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