solid-js 1.7.7 → 1.7.9
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 +24 -13
- package/dist/dev.js +555 -306
- package/dist/server.cjs +3 -3
- package/dist/server.js +177 -79
- package/dist/solid.cjs +24 -13
- package/dist/solid.js +482 -264
- package/h/dist/h.cjs +2 -2
- package/h/dist/h.js +36 -10
- package/h/jsx-runtime/dist/jsx.js +1 -1
- package/h/jsx-runtime/types/index.d.ts +11 -8
- package/h/jsx-runtime/types/jsx.d.ts +130 -100
- package/h/types/hyperscript.d.ts +11 -11
- package/h/types/index.d.ts +3 -2
- package/html/dist/html.cjs +2 -2
- package/html/dist/html.js +218 -96
- package/html/types/index.d.ts +3 -2
- package/html/types/lit.d.ts +45 -31
- package/package.json +1 -1
- package/store/dist/dev.cjs +34 -32
- package/store/dist/dev.js +141 -67
- package/store/dist/server.js +19 -8
- package/store/dist/store.cjs +34 -32
- package/store/dist/store.js +132 -64
- 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 +217 -63
- package/types/index.d.ts +69 -9
- package/types/jsx.d.ts +10 -6
- 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 +227 -136
- 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 -10
- package/types/server/index.d.ts +55 -2
- package/types/server/reactive.d.ts +67 -40
- package/types/server/rendering.d.ts +171 -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.js +610 -79
- package/web/dist/server.cjs +4 -4
- package/web/dist/server.js +180 -81
- package/web/dist/web.js +610 -79
- package/web/types/client.d.ts +2 -2
- 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/store/dist/store.cjs
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
var solidJs = require('solid-js');
|
|
4
4
|
|
|
5
5
|
const $RAW = Symbol("store-raw"),
|
|
6
|
-
$NODE = Symbol("store-node")
|
|
6
|
+
$NODE = Symbol("store-node"),
|
|
7
|
+
$HAS = Symbol("store-has");
|
|
7
8
|
function wrap$1(value) {
|
|
8
9
|
let p = value[solidJs.$PROXY];
|
|
9
10
|
if (!p) {
|
|
@@ -53,15 +54,21 @@ function unwrap(item, set = new Set()) {
|
|
|
53
54
|
}
|
|
54
55
|
return item;
|
|
55
56
|
}
|
|
56
|
-
function
|
|
57
|
-
let nodes = target[
|
|
58
|
-
if (!nodes) Object.defineProperty(target,
|
|
57
|
+
function getNodes(target, symbol) {
|
|
58
|
+
let nodes = target[symbol];
|
|
59
|
+
if (!nodes) Object.defineProperty(target, symbol, {
|
|
59
60
|
value: nodes = Object.create(null)
|
|
60
61
|
});
|
|
61
62
|
return nodes;
|
|
62
63
|
}
|
|
63
|
-
function
|
|
64
|
-
|
|
64
|
+
function getNode(nodes, property, value) {
|
|
65
|
+
if (nodes[property]) return nodes[property];
|
|
66
|
+
const [s, set] = solidJs.createSignal(value, {
|
|
67
|
+
equals: false,
|
|
68
|
+
internal: true
|
|
69
|
+
});
|
|
70
|
+
s.$ = set;
|
|
71
|
+
return nodes[property] = s;
|
|
65
72
|
}
|
|
66
73
|
function proxyDescriptor$1(target, property) {
|
|
67
74
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
@@ -72,23 +79,12 @@ function proxyDescriptor$1(target, property) {
|
|
|
72
79
|
return desc;
|
|
73
80
|
}
|
|
74
81
|
function trackSelf(target) {
|
|
75
|
-
|
|
76
|
-
const nodes = getDataNodes(target);
|
|
77
|
-
(nodes._ || (nodes._ = createDataNode()))();
|
|
78
|
-
}
|
|
82
|
+
solidJs.getListener() && getNode(getNodes(target, $NODE), "_")();
|
|
79
83
|
}
|
|
80
84
|
function ownKeys(target) {
|
|
81
85
|
trackSelf(target);
|
|
82
86
|
return Reflect.ownKeys(target);
|
|
83
87
|
}
|
|
84
|
-
function createDataNode(value) {
|
|
85
|
-
const [s, set] = solidJs.createSignal(value, {
|
|
86
|
-
equals: false,
|
|
87
|
-
internal: true
|
|
88
|
-
});
|
|
89
|
-
s.$ = set;
|
|
90
|
-
return s;
|
|
91
|
-
}
|
|
92
88
|
const proxyTraps$1 = {
|
|
93
89
|
get(target, property, receiver) {
|
|
94
90
|
if (property === $RAW) return target;
|
|
@@ -97,19 +93,19 @@ const proxyTraps$1 = {
|
|
|
97
93
|
trackSelf(target);
|
|
98
94
|
return receiver;
|
|
99
95
|
}
|
|
100
|
-
const nodes =
|
|
96
|
+
const nodes = getNodes(target, $NODE);
|
|
101
97
|
const tracked = nodes[property];
|
|
102
98
|
let value = tracked ? tracked() : target[property];
|
|
103
|
-
if (property === $NODE || property === "__proto__") return value;
|
|
99
|
+
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
104
100
|
if (!tracked) {
|
|
105
101
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
106
|
-
if (solidJs.getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value =
|
|
102
|
+
if (solidJs.getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();
|
|
107
103
|
}
|
|
108
104
|
return isWrappable(value) ? wrap$1(value) : value;
|
|
109
105
|
},
|
|
110
106
|
has(target, property) {
|
|
111
|
-
if (property === $RAW || property === solidJs.$PROXY || property === solidJs.$TRACK || property === $NODE || property === "__proto__") return true;
|
|
112
|
-
|
|
107
|
+
if (property === $RAW || property === solidJs.$PROXY || property === solidJs.$TRACK || property === $NODE || property === $HAS || property === "__proto__") return true;
|
|
108
|
+
solidJs.getListener() && getNode(getNodes(target, $HAS), property)();
|
|
113
109
|
return property in target;
|
|
114
110
|
},
|
|
115
111
|
set() {
|
|
@@ -125,13 +121,19 @@ function setProperty(state, property, value, deleting = false) {
|
|
|
125
121
|
if (!deleting && state[property] === value) return;
|
|
126
122
|
const prev = state[property],
|
|
127
123
|
len = state.length;
|
|
128
|
-
if (value === undefined)
|
|
129
|
-
|
|
124
|
+
if (value === undefined) {
|
|
125
|
+
delete state[property];
|
|
126
|
+
if (state[$HAS] && state[$HAS][property] && prev !== undefined) state[$HAS][property].$();
|
|
127
|
+
} else {
|
|
128
|
+
state[property] = value;
|
|
129
|
+
if (state[$HAS] && state[$HAS][property] && prev === undefined) state[$HAS][property].$();
|
|
130
|
+
}
|
|
131
|
+
let nodes = getNodes(state, $NODE),
|
|
130
132
|
node;
|
|
131
|
-
if (node =
|
|
133
|
+
if (node = getNode(nodes, property, prev)) node.$(() => value);
|
|
132
134
|
if (Array.isArray(state) && state.length !== len) {
|
|
133
135
|
for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();
|
|
134
|
-
(node =
|
|
136
|
+
(node = getNode(nodes, "length", len)) && node.$(state.length);
|
|
135
137
|
}
|
|
136
138
|
(node = nodes._) && node.$();
|
|
137
139
|
}
|
|
@@ -230,22 +232,22 @@ const proxyTraps = {
|
|
|
230
232
|
trackSelf(target);
|
|
231
233
|
return receiver;
|
|
232
234
|
}
|
|
233
|
-
const nodes =
|
|
235
|
+
const nodes = getNodes(target, $NODE);
|
|
234
236
|
const tracked = nodes[property];
|
|
235
237
|
let value = tracked ? tracked() : target[property];
|
|
236
|
-
if (property === $NODE || property === "__proto__") return value;
|
|
238
|
+
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
237
239
|
if (!tracked) {
|
|
238
240
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
239
241
|
const isFunction = typeof value === "function";
|
|
240
|
-
if (solidJs.getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value =
|
|
242
|
+
if (solidJs.getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {
|
|
241
243
|
return (...args) => solidJs.batch(() => Array.prototype[property].apply(receiver, args));
|
|
242
244
|
}
|
|
243
245
|
}
|
|
244
246
|
return isWrappable(value) ? wrap(value) : value;
|
|
245
247
|
},
|
|
246
248
|
has(target, property) {
|
|
247
|
-
if (property === $RAW || property === solidJs.$PROXY || property === solidJs.$TRACK || property === $NODE || property === "__proto__") return true;
|
|
248
|
-
|
|
249
|
+
if (property === $RAW || property === solidJs.$PROXY || property === solidJs.$TRACK || property === $NODE || property === $HAS || property === "__proto__") return true;
|
|
250
|
+
solidJs.getListener() && getNode(getNodes(target, $HAS), property)();
|
|
249
251
|
return property in target;
|
|
250
252
|
},
|
|
251
253
|
set(target, property, value) {
|
package/store/dist/store.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
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
|
-
$NODE = Symbol("store-node")
|
|
4
|
+
$NODE = Symbol("store-node"),
|
|
5
|
+
$HAS = Symbol("store-has");
|
|
5
6
|
function wrap$1(value) {
|
|
6
7
|
let p = value[$PROXY];
|
|
7
8
|
if (!p) {
|
|
8
9
|
Object.defineProperty(value, $PROXY, {
|
|
9
|
-
value: p = new Proxy(value, proxyTraps$1)
|
|
10
|
+
value: (p = new Proxy(value, proxyTraps$1))
|
|
10
11
|
});
|
|
11
12
|
if (!Array.isArray(value)) {
|
|
12
13
|
const keys = Object.keys(value),
|
|
@@ -26,20 +27,29 @@ function wrap$1(value) {
|
|
|
26
27
|
}
|
|
27
28
|
function isWrappable(obj) {
|
|
28
29
|
let proto;
|
|
29
|
-
return
|
|
30
|
+
return (
|
|
31
|
+
obj != null &&
|
|
32
|
+
typeof obj === "object" &&
|
|
33
|
+
(obj[$PROXY] ||
|
|
34
|
+
!(proto = Object.getPrototypeOf(obj)) ||
|
|
35
|
+
proto === Object.prototype ||
|
|
36
|
+
Array.isArray(obj))
|
|
37
|
+
);
|
|
30
38
|
}
|
|
31
39
|
function unwrap(item, set = new Set()) {
|
|
32
40
|
let result, unwrapped, v, prop;
|
|
33
|
-
if (result = item != null && item[$RAW]) return result;
|
|
41
|
+
if ((result = item != null && item[$RAW])) return result;
|
|
34
42
|
if (!isWrappable(item) || set.has(item)) return item;
|
|
35
43
|
if (Array.isArray(item)) {
|
|
36
|
-
if (Object.isFrozen(item)) item = item.slice(0);
|
|
44
|
+
if (Object.isFrozen(item)) item = item.slice(0);
|
|
45
|
+
else set.add(item);
|
|
37
46
|
for (let i = 0, l = item.length; i < l; i++) {
|
|
38
47
|
v = item[i];
|
|
39
48
|
if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;
|
|
40
49
|
}
|
|
41
50
|
} else {
|
|
42
|
-
if (Object.isFrozen(item)) item = Object.assign({}, item);
|
|
51
|
+
if (Object.isFrozen(item)) item = Object.assign({}, item);
|
|
52
|
+
else set.add(item);
|
|
43
53
|
const keys = Object.keys(item),
|
|
44
54
|
desc = Object.getOwnPropertyDescriptors(item);
|
|
45
55
|
for (let i = 0, l = keys.length; i < l; i++) {
|
|
@@ -51,42 +61,39 @@ function unwrap(item, set = new Set()) {
|
|
|
51
61
|
}
|
|
52
62
|
return item;
|
|
53
63
|
}
|
|
54
|
-
function
|
|
55
|
-
let nodes = target[
|
|
56
|
-
if (!nodes)
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
function getNodes(target, symbol) {
|
|
65
|
+
let nodes = target[symbol];
|
|
66
|
+
if (!nodes)
|
|
67
|
+
Object.defineProperty(target, symbol, {
|
|
68
|
+
value: (nodes = Object.create(null))
|
|
69
|
+
});
|
|
59
70
|
return nodes;
|
|
60
71
|
}
|
|
61
|
-
function
|
|
62
|
-
|
|
72
|
+
function getNode(nodes, property, value) {
|
|
73
|
+
if (nodes[property]) return nodes[property];
|
|
74
|
+
const [s, set] = createSignal(value, {
|
|
75
|
+
equals: false,
|
|
76
|
+
internal: true
|
|
77
|
+
});
|
|
78
|
+
s.$ = set;
|
|
79
|
+
return (nodes[property] = s);
|
|
63
80
|
}
|
|
64
81
|
function proxyDescriptor$1(target, property) {
|
|
65
82
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
66
|
-
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)
|
|
83
|
+
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)
|
|
84
|
+
return desc;
|
|
67
85
|
delete desc.value;
|
|
68
86
|
delete desc.writable;
|
|
69
87
|
desc.get = () => target[$PROXY][property];
|
|
70
88
|
return desc;
|
|
71
89
|
}
|
|
72
90
|
function trackSelf(target) {
|
|
73
|
-
|
|
74
|
-
const nodes = getDataNodes(target);
|
|
75
|
-
(nodes._ || (nodes._ = createDataNode()))();
|
|
76
|
-
}
|
|
91
|
+
getListener() && getNode(getNodes(target, $NODE), "_")();
|
|
77
92
|
}
|
|
78
93
|
function ownKeys(target) {
|
|
79
94
|
trackSelf(target);
|
|
80
95
|
return Reflect.ownKeys(target);
|
|
81
96
|
}
|
|
82
|
-
function createDataNode(value) {
|
|
83
|
-
const [s, set] = createSignal(value, {
|
|
84
|
-
equals: false,
|
|
85
|
-
internal: true
|
|
86
|
-
});
|
|
87
|
-
s.$ = set;
|
|
88
|
-
return s;
|
|
89
|
-
}
|
|
90
97
|
const proxyTraps$1 = {
|
|
91
98
|
get(target, property, receiver) {
|
|
92
99
|
if (property === $RAW) return target;
|
|
@@ -95,19 +102,32 @@ const proxyTraps$1 = {
|
|
|
95
102
|
trackSelf(target);
|
|
96
103
|
return receiver;
|
|
97
104
|
}
|
|
98
|
-
const nodes =
|
|
105
|
+
const nodes = getNodes(target, $NODE);
|
|
99
106
|
const tracked = nodes[property];
|
|
100
107
|
let value = tracked ? tracked() : target[property];
|
|
101
|
-
if (property === $NODE || property === "__proto__") return value;
|
|
108
|
+
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
102
109
|
if (!tracked) {
|
|
103
110
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
104
|
-
if (
|
|
111
|
+
if (
|
|
112
|
+
getListener() &&
|
|
113
|
+
(typeof value !== "function" || target.hasOwnProperty(property)) &&
|
|
114
|
+
!(desc && desc.get)
|
|
115
|
+
)
|
|
116
|
+
value = getNode(nodes, property, value)();
|
|
105
117
|
}
|
|
106
118
|
return isWrappable(value) ? wrap$1(value) : value;
|
|
107
119
|
},
|
|
108
120
|
has(target, property) {
|
|
109
|
-
if (
|
|
110
|
-
|
|
121
|
+
if (
|
|
122
|
+
property === $RAW ||
|
|
123
|
+
property === $PROXY ||
|
|
124
|
+
property === $TRACK ||
|
|
125
|
+
property === $NODE ||
|
|
126
|
+
property === $HAS ||
|
|
127
|
+
property === "__proto__"
|
|
128
|
+
)
|
|
129
|
+
return true;
|
|
130
|
+
getListener() && getNode(getNodes(target, $HAS), property)();
|
|
111
131
|
return property in target;
|
|
112
132
|
},
|
|
113
133
|
set() {
|
|
@@ -123,13 +143,19 @@ function setProperty(state, property, value, deleting = false) {
|
|
|
123
143
|
if (!deleting && state[property] === value) return;
|
|
124
144
|
const prev = state[property],
|
|
125
145
|
len = state.length;
|
|
126
|
-
if (value === undefined)
|
|
127
|
-
|
|
146
|
+
if (value === undefined) {
|
|
147
|
+
delete state[property];
|
|
148
|
+
if (state[$HAS] && state[$HAS][property] && prev !== undefined) state[$HAS][property].$();
|
|
149
|
+
} else {
|
|
150
|
+
state[property] = value;
|
|
151
|
+
if (state[$HAS] && state[$HAS][property] && prev === undefined) state[$HAS][property].$();
|
|
152
|
+
}
|
|
153
|
+
let nodes = getNodes(state, $NODE),
|
|
128
154
|
node;
|
|
129
|
-
if (node =
|
|
155
|
+
if ((node = getNode(nodes, property, prev))) node.$(() => value);
|
|
130
156
|
if (Array.isArray(state) && state.length !== len) {
|
|
131
157
|
for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();
|
|
132
|
-
(node =
|
|
158
|
+
(node = getNode(nodes, "length", len)) && node.$(state.length);
|
|
133
159
|
}
|
|
134
160
|
(node = nodes._) && node.$();
|
|
135
161
|
}
|
|
@@ -172,11 +198,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
172
198
|
}
|
|
173
199
|
return;
|
|
174
200
|
} else if (isArray && partType === "object") {
|
|
175
|
-
const {
|
|
176
|
-
from = 0,
|
|
177
|
-
to = current.length - 1,
|
|
178
|
-
by = 1
|
|
179
|
-
} = part;
|
|
201
|
+
const { from = 0, to = current.length - 1, by = 1 } = part;
|
|
180
202
|
for (let i = from; i <= to; i += by) {
|
|
181
203
|
updatePath(current, [i].concat(path), traversed);
|
|
182
204
|
}
|
|
@@ -195,7 +217,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
195
217
|
}
|
|
196
218
|
if (part === undefined && value == undefined) return;
|
|
197
219
|
value = unwrap(value);
|
|
198
|
-
if (part === undefined || isWrappable(prev) && isWrappable(value) && !Array.isArray(value)) {
|
|
220
|
+
if (part === undefined || (isWrappable(prev) && isWrappable(value) && !Array.isArray(value))) {
|
|
199
221
|
mergeStoreNode(prev, value);
|
|
200
222
|
} else setProperty(current, part, value);
|
|
201
223
|
}
|
|
@@ -205,7 +227,9 @@ function createStore(...[store, options]) {
|
|
|
205
227
|
const wrappedStore = wrap$1(unwrappedStore);
|
|
206
228
|
function setStore(...args) {
|
|
207
229
|
batch(() => {
|
|
208
|
-
isArray && args.length === 1
|
|
230
|
+
isArray && args.length === 1
|
|
231
|
+
? updateArray(unwrappedStore, args[0])
|
|
232
|
+
: updatePath(unwrappedStore, args);
|
|
209
233
|
});
|
|
210
234
|
}
|
|
211
235
|
return [wrappedStore, setStore];
|
|
@@ -213,11 +237,19 @@ function createStore(...[store, options]) {
|
|
|
213
237
|
|
|
214
238
|
function proxyDescriptor(target, property) {
|
|
215
239
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
216
|
-
if (
|
|
240
|
+
if (
|
|
241
|
+
!desc ||
|
|
242
|
+
desc.get ||
|
|
243
|
+
desc.set ||
|
|
244
|
+
!desc.configurable ||
|
|
245
|
+
property === $PROXY ||
|
|
246
|
+
property === $NODE
|
|
247
|
+
)
|
|
248
|
+
return desc;
|
|
217
249
|
delete desc.value;
|
|
218
250
|
delete desc.writable;
|
|
219
251
|
desc.get = () => target[$PROXY][property];
|
|
220
|
-
desc.set = v => target[$PROXY][property] = v;
|
|
252
|
+
desc.set = v => (target[$PROXY][property] = v);
|
|
221
253
|
return desc;
|
|
222
254
|
}
|
|
223
255
|
const proxyTraps = {
|
|
@@ -228,22 +260,32 @@ const proxyTraps = {
|
|
|
228
260
|
trackSelf(target);
|
|
229
261
|
return receiver;
|
|
230
262
|
}
|
|
231
|
-
const nodes =
|
|
263
|
+
const nodes = getNodes(target, $NODE);
|
|
232
264
|
const tracked = nodes[property];
|
|
233
265
|
let value = tracked ? tracked() : target[property];
|
|
234
|
-
if (property === $NODE || property === "__proto__") return value;
|
|
266
|
+
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
235
267
|
if (!tracked) {
|
|
236
268
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
237
269
|
const isFunction = typeof value === "function";
|
|
238
|
-
if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get))
|
|
270
|
+
if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get))
|
|
271
|
+
value = getNode(nodes, property, value)();
|
|
272
|
+
else if (value != null && isFunction && value === Array.prototype[property]) {
|
|
239
273
|
return (...args) => batch(() => Array.prototype[property].apply(receiver, args));
|
|
240
274
|
}
|
|
241
275
|
}
|
|
242
276
|
return isWrappable(value) ? wrap(value) : value;
|
|
243
277
|
},
|
|
244
278
|
has(target, property) {
|
|
245
|
-
if (
|
|
246
|
-
|
|
279
|
+
if (
|
|
280
|
+
property === $RAW ||
|
|
281
|
+
property === $PROXY ||
|
|
282
|
+
property === $TRACK ||
|
|
283
|
+
property === $NODE ||
|
|
284
|
+
property === $HAS ||
|
|
285
|
+
property === "__proto__"
|
|
286
|
+
)
|
|
287
|
+
return true;
|
|
288
|
+
getListener() && getNode(getNodes(target, $HAS), property)();
|
|
247
289
|
return property in target;
|
|
248
290
|
},
|
|
249
291
|
set(target, property, value) {
|
|
@@ -261,7 +303,7 @@ function wrap(value) {
|
|
|
261
303
|
let p = value[$PROXY];
|
|
262
304
|
if (!p) {
|
|
263
305
|
Object.defineProperty(value, $PROXY, {
|
|
264
|
-
value: p = new Proxy(value, proxyTraps)
|
|
306
|
+
value: (p = new Proxy(value, proxyTraps))
|
|
265
307
|
});
|
|
266
308
|
const keys = Object.keys(value),
|
|
267
309
|
desc = Object.getOwnPropertyDescriptors(value);
|
|
@@ -297,19 +339,39 @@ const $ROOT = Symbol("store-root");
|
|
|
297
339
|
function applyState(target, parent, property, merge, key) {
|
|
298
340
|
const previous = parent[property];
|
|
299
341
|
if (target === previous) return;
|
|
300
|
-
if (
|
|
342
|
+
if (
|
|
343
|
+
property !== $ROOT &&
|
|
344
|
+
(!isWrappable(target) || !isWrappable(previous) || (key && target[key] !== previous[key]))
|
|
345
|
+
) {
|
|
301
346
|
setProperty(parent, property, target);
|
|
302
347
|
return;
|
|
303
348
|
}
|
|
304
349
|
if (Array.isArray(target)) {
|
|
305
|
-
if (
|
|
350
|
+
if (
|
|
351
|
+
target.length &&
|
|
352
|
+
previous.length &&
|
|
353
|
+
(!merge || (key && target[0] && target[0][key] != null))
|
|
354
|
+
) {
|
|
306
355
|
let i, j, start, end, newEnd, item, newIndicesNext, keyVal;
|
|
307
|
-
for (
|
|
356
|
+
for (
|
|
357
|
+
start = 0, end = Math.min(previous.length, target.length);
|
|
358
|
+
start < end &&
|
|
359
|
+
(previous[start] === target[start] ||
|
|
360
|
+
(key && previous[start] && target[start] && previous[start][key] === target[start][key]));
|
|
361
|
+
start++
|
|
362
|
+
) {
|
|
308
363
|
applyState(target[start], previous, start, merge, key);
|
|
309
364
|
}
|
|
310
365
|
const temp = new Array(target.length),
|
|
311
366
|
newIndices = new Map();
|
|
312
|
-
for (
|
|
367
|
+
for (
|
|
368
|
+
end = previous.length - 1, newEnd = target.length - 1;
|
|
369
|
+
end >= start &&
|
|
370
|
+
newEnd >= start &&
|
|
371
|
+
(previous[end] === target[newEnd] ||
|
|
372
|
+
(key && previous[start] && target[start] && previous[end][key] === target[newEnd][key]));
|
|
373
|
+
end--, newEnd--
|
|
374
|
+
) {
|
|
313
375
|
temp[newEnd] = previous[end];
|
|
314
376
|
}
|
|
315
377
|
if (start > newEnd || start > end) {
|
|
@@ -363,16 +425,19 @@ function applyState(target, parent, property, merge, key) {
|
|
|
363
425
|
}
|
|
364
426
|
}
|
|
365
427
|
function reconcile(value, options = {}) {
|
|
366
|
-
const {
|
|
367
|
-
merge,
|
|
368
|
-
key = "id"
|
|
369
|
-
} = options,
|
|
428
|
+
const { merge, key = "id" } = options,
|
|
370
429
|
v = unwrap(value);
|
|
371
430
|
return state => {
|
|
372
431
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
373
|
-
const res = applyState(
|
|
374
|
-
|
|
375
|
-
|
|
432
|
+
const res = applyState(
|
|
433
|
+
v,
|
|
434
|
+
{
|
|
435
|
+
[$ROOT]: state
|
|
436
|
+
},
|
|
437
|
+
$ROOT,
|
|
438
|
+
merge,
|
|
439
|
+
key
|
|
440
|
+
);
|
|
376
441
|
return res === undefined ? state : res;
|
|
377
442
|
};
|
|
378
443
|
}
|
|
@@ -382,7 +447,10 @@ const setterTraps = {
|
|
|
382
447
|
if (property === $RAW) return target;
|
|
383
448
|
const value = target[property];
|
|
384
449
|
let proxy;
|
|
385
|
-
return isWrappable(value)
|
|
450
|
+
return isWrappable(value)
|
|
451
|
+
? producers.get(value) ||
|
|
452
|
+
(producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)
|
|
453
|
+
: value;
|
|
386
454
|
},
|
|
387
455
|
set(target, property, value) {
|
|
388
456
|
setProperty(target, property, unwrap(value));
|
|
@@ -398,7 +466,7 @@ function produce(fn) {
|
|
|
398
466
|
if (isWrappable(state)) {
|
|
399
467
|
let proxy;
|
|
400
468
|
if (!(proxy = producers.get(state))) {
|
|
401
|
-
producers.set(state, proxy = new Proxy(state, setterTraps));
|
|
469
|
+
producers.set(state, (proxy = new Proxy(state, setterTraps)));
|
|
402
470
|
}
|
|
403
471
|
fn(proxy);
|
|
404
472
|
}
|
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 {};
|