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/package.json
CHANGED
package/store/dist/dev.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
|
const DevHooks = {
|
|
8
10
|
onStoreNodeUpdate: null
|
|
9
11
|
};
|
|
@@ -56,15 +58,21 @@ function unwrap(item, set = new Set()) {
|
|
|
56
58
|
}
|
|
57
59
|
return item;
|
|
58
60
|
}
|
|
59
|
-
function
|
|
60
|
-
let nodes = target[
|
|
61
|
-
if (!nodes) Object.defineProperty(target,
|
|
61
|
+
function getNodes(target, symbol) {
|
|
62
|
+
let nodes = target[symbol];
|
|
63
|
+
if (!nodes) Object.defineProperty(target, symbol, {
|
|
62
64
|
value: nodes = Object.create(null)
|
|
63
65
|
});
|
|
64
66
|
return nodes;
|
|
65
67
|
}
|
|
66
|
-
function
|
|
67
|
-
|
|
68
|
+
function getNode(nodes, property, value) {
|
|
69
|
+
if (nodes[property]) return nodes[property];
|
|
70
|
+
const [s, set] = solidJs.createSignal(value, {
|
|
71
|
+
equals: false,
|
|
72
|
+
internal: true
|
|
73
|
+
});
|
|
74
|
+
s.$ = set;
|
|
75
|
+
return nodes[property] = s;
|
|
68
76
|
}
|
|
69
77
|
function proxyDescriptor$1(target, property) {
|
|
70
78
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
@@ -75,23 +83,12 @@ function proxyDescriptor$1(target, property) {
|
|
|
75
83
|
return desc;
|
|
76
84
|
}
|
|
77
85
|
function trackSelf(target) {
|
|
78
|
-
|
|
79
|
-
const nodes = getDataNodes(target);
|
|
80
|
-
(nodes._ || (nodes._ = createDataNode()))();
|
|
81
|
-
}
|
|
86
|
+
solidJs.getListener() && getNode(getNodes(target, $NODE), $SELF)();
|
|
82
87
|
}
|
|
83
88
|
function ownKeys(target) {
|
|
84
89
|
trackSelf(target);
|
|
85
90
|
return Reflect.ownKeys(target);
|
|
86
91
|
}
|
|
87
|
-
function createDataNode(value) {
|
|
88
|
-
const [s, set] = solidJs.createSignal(value, {
|
|
89
|
-
equals: false,
|
|
90
|
-
internal: true
|
|
91
|
-
});
|
|
92
|
-
s.$ = set;
|
|
93
|
-
return s;
|
|
94
|
-
}
|
|
95
92
|
const proxyTraps$1 = {
|
|
96
93
|
get(target, property, receiver) {
|
|
97
94
|
if (property === $RAW) return target;
|
|
@@ -100,19 +97,19 @@ const proxyTraps$1 = {
|
|
|
100
97
|
trackSelf(target);
|
|
101
98
|
return receiver;
|
|
102
99
|
}
|
|
103
|
-
const nodes =
|
|
100
|
+
const nodes = getNodes(target, $NODE);
|
|
104
101
|
const tracked = nodes[property];
|
|
105
102
|
let value = tracked ? tracked() : target[property];
|
|
106
|
-
if (property === $NODE || property === "__proto__") return value;
|
|
103
|
+
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
107
104
|
if (!tracked) {
|
|
108
105
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
109
|
-
if (solidJs.getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value =
|
|
106
|
+
if (solidJs.getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();
|
|
110
107
|
}
|
|
111
108
|
return isWrappable(value) ? wrap$1(value) : value;
|
|
112
109
|
},
|
|
113
110
|
has(target, property) {
|
|
114
|
-
if (property === $RAW || property === solidJs.$PROXY || property === solidJs.$TRACK || property === $NODE || property === "__proto__") return true;
|
|
115
|
-
|
|
111
|
+
if (property === $RAW || property === solidJs.$PROXY || property === solidJs.$TRACK || property === $NODE || property === $HAS || property === "__proto__") return true;
|
|
112
|
+
solidJs.getListener() && getNode(getNodes(target, $HAS), property)();
|
|
116
113
|
return property in target;
|
|
117
114
|
},
|
|
118
115
|
set() {
|
|
@@ -131,15 +128,21 @@ function setProperty(state, property, value, deleting = false) {
|
|
|
131
128
|
const prev = state[property],
|
|
132
129
|
len = state.length;
|
|
133
130
|
DevHooks.onStoreNodeUpdate && DevHooks.onStoreNodeUpdate(state, property, value, prev);
|
|
134
|
-
if (value === undefined)
|
|
135
|
-
|
|
131
|
+
if (value === undefined) {
|
|
132
|
+
delete state[property];
|
|
133
|
+
if (state[$HAS] && state[$HAS][property] && prev !== undefined) state[$HAS][property].$();
|
|
134
|
+
} else {
|
|
135
|
+
state[property] = value;
|
|
136
|
+
if (state[$HAS] && state[$HAS][property] && prev === undefined) state[$HAS][property].$();
|
|
137
|
+
}
|
|
138
|
+
let nodes = getNodes(state, $NODE),
|
|
136
139
|
node;
|
|
137
|
-
if (node =
|
|
140
|
+
if (node = getNode(nodes, property, prev)) node.$(() => value);
|
|
138
141
|
if (Array.isArray(state) && state.length !== len) {
|
|
139
142
|
for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();
|
|
140
|
-
(node =
|
|
143
|
+
(node = getNode(nodes, "length", len)) && node.$(state.length);
|
|
141
144
|
}
|
|
142
|
-
(node = nodes
|
|
145
|
+
(node = nodes[$SELF]) && node.$();
|
|
143
146
|
}
|
|
144
147
|
function mergeStoreNode(state, value) {
|
|
145
148
|
const keys = Object.keys(value);
|
|
@@ -241,22 +244,22 @@ const proxyTraps = {
|
|
|
241
244
|
trackSelf(target);
|
|
242
245
|
return receiver;
|
|
243
246
|
}
|
|
244
|
-
const nodes =
|
|
247
|
+
const nodes = getNodes(target, $NODE);
|
|
245
248
|
const tracked = nodes[property];
|
|
246
249
|
let value = tracked ? tracked() : target[property];
|
|
247
|
-
if (property === $NODE || property === "__proto__") return value;
|
|
250
|
+
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
248
251
|
if (!tracked) {
|
|
249
252
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
250
253
|
const isFunction = typeof value === "function";
|
|
251
|
-
if (solidJs.getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value =
|
|
254
|
+
if (solidJs.getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {
|
|
252
255
|
return (...args) => solidJs.batch(() => Array.prototype[property].apply(receiver, args));
|
|
253
256
|
}
|
|
254
257
|
}
|
|
255
258
|
return isWrappable(value) ? wrap(value) : value;
|
|
256
259
|
},
|
|
257
260
|
has(target, property) {
|
|
258
|
-
if (property === $RAW || property === solidJs.$PROXY || property === solidJs.$TRACK || property === $NODE || property === "__proto__") return true;
|
|
259
|
-
|
|
261
|
+
if (property === $RAW || property === solidJs.$PROXY || property === solidJs.$TRACK || property === $NODE || property === $HAS || property === "__proto__") return true;
|
|
262
|
+
solidJs.getListener() && getNode(getNodes(target, $HAS), property)();
|
|
260
263
|
return property in target;
|
|
261
264
|
},
|
|
262
265
|
set(target, property, value) {
|
package/store/dist/dev.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
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
|
-
$NODE = Symbol("store-node")
|
|
4
|
+
$NODE = Symbol("store-node"),
|
|
5
|
+
$HAS = Symbol("store-has"),
|
|
6
|
+
$SELF = Symbol("store-self");
|
|
5
7
|
const DevHooks = {
|
|
6
8
|
onStoreNodeUpdate: null
|
|
7
9
|
};
|
|
@@ -9,7 +11,7 @@ function wrap$1(value) {
|
|
|
9
11
|
let p = value[$PROXY];
|
|
10
12
|
if (!p) {
|
|
11
13
|
Object.defineProperty(value, $PROXY, {
|
|
12
|
-
value: p = new Proxy(value, proxyTraps$1)
|
|
14
|
+
value: (p = new Proxy(value, proxyTraps$1))
|
|
13
15
|
});
|
|
14
16
|
if (!Array.isArray(value)) {
|
|
15
17
|
const keys = Object.keys(value),
|
|
@@ -29,20 +31,29 @@ function wrap$1(value) {
|
|
|
29
31
|
}
|
|
30
32
|
function isWrappable(obj) {
|
|
31
33
|
let proto;
|
|
32
|
-
return
|
|
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
|
+
);
|
|
33
42
|
}
|
|
34
43
|
function unwrap(item, set = new Set()) {
|
|
35
44
|
let result, unwrapped, v, prop;
|
|
36
|
-
if (result = item != null && item[$RAW]) return result;
|
|
45
|
+
if ((result = item != null && item[$RAW])) return result;
|
|
37
46
|
if (!isWrappable(item) || set.has(item)) return item;
|
|
38
47
|
if (Array.isArray(item)) {
|
|
39
|
-
if (Object.isFrozen(item)) item = item.slice(0);
|
|
48
|
+
if (Object.isFrozen(item)) item = item.slice(0);
|
|
49
|
+
else set.add(item);
|
|
40
50
|
for (let i = 0, l = item.length; i < l; i++) {
|
|
41
51
|
v = item[i];
|
|
42
52
|
if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;
|
|
43
53
|
}
|
|
44
54
|
} else {
|
|
45
|
-
if (Object.isFrozen(item)) item = Object.assign({}, item);
|
|
55
|
+
if (Object.isFrozen(item)) item = Object.assign({}, item);
|
|
56
|
+
else set.add(item);
|
|
46
57
|
const keys = Object.keys(item),
|
|
47
58
|
desc = Object.getOwnPropertyDescriptors(item);
|
|
48
59
|
for (let i = 0, l = keys.length; i < l; i++) {
|
|
@@ -54,42 +65,39 @@ function unwrap(item, set = new Set()) {
|
|
|
54
65
|
}
|
|
55
66
|
return item;
|
|
56
67
|
}
|
|
57
|
-
function
|
|
58
|
-
let nodes = target[
|
|
59
|
-
if (!nodes)
|
|
60
|
-
|
|
61
|
-
|
|
68
|
+
function getNodes(target, symbol) {
|
|
69
|
+
let nodes = target[symbol];
|
|
70
|
+
if (!nodes)
|
|
71
|
+
Object.defineProperty(target, symbol, {
|
|
72
|
+
value: (nodes = Object.create(null))
|
|
73
|
+
});
|
|
62
74
|
return nodes;
|
|
63
75
|
}
|
|
64
|
-
function
|
|
65
|
-
|
|
76
|
+
function getNode(nodes, property, value) {
|
|
77
|
+
if (nodes[property]) return nodes[property];
|
|
78
|
+
const [s, set] = createSignal(value, {
|
|
79
|
+
equals: false,
|
|
80
|
+
internal: true
|
|
81
|
+
});
|
|
82
|
+
s.$ = set;
|
|
83
|
+
return (nodes[property] = s);
|
|
66
84
|
}
|
|
67
85
|
function proxyDescriptor$1(target, property) {
|
|
68
86
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
69
|
-
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)
|
|
87
|
+
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)
|
|
88
|
+
return desc;
|
|
70
89
|
delete desc.value;
|
|
71
90
|
delete desc.writable;
|
|
72
91
|
desc.get = () => target[$PROXY][property];
|
|
73
92
|
return desc;
|
|
74
93
|
}
|
|
75
94
|
function trackSelf(target) {
|
|
76
|
-
|
|
77
|
-
const nodes = getDataNodes(target);
|
|
78
|
-
(nodes._ || (nodes._ = createDataNode()))();
|
|
79
|
-
}
|
|
95
|
+
getListener() && getNode(getNodes(target, $NODE), $SELF)();
|
|
80
96
|
}
|
|
81
97
|
function ownKeys(target) {
|
|
82
98
|
trackSelf(target);
|
|
83
99
|
return Reflect.ownKeys(target);
|
|
84
100
|
}
|
|
85
|
-
function createDataNode(value) {
|
|
86
|
-
const [s, set] = createSignal(value, {
|
|
87
|
-
equals: false,
|
|
88
|
-
internal: true
|
|
89
|
-
});
|
|
90
|
-
s.$ = set;
|
|
91
|
-
return s;
|
|
92
|
-
}
|
|
93
101
|
const proxyTraps$1 = {
|
|
94
102
|
get(target, property, receiver) {
|
|
95
103
|
if (property === $RAW) return target;
|
|
@@ -98,19 +106,32 @@ const proxyTraps$1 = {
|
|
|
98
106
|
trackSelf(target);
|
|
99
107
|
return receiver;
|
|
100
108
|
}
|
|
101
|
-
const nodes =
|
|
109
|
+
const nodes = getNodes(target, $NODE);
|
|
102
110
|
const tracked = nodes[property];
|
|
103
111
|
let value = tracked ? tracked() : target[property];
|
|
104
|
-
if (property === $NODE || property === "__proto__") return value;
|
|
112
|
+
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
105
113
|
if (!tracked) {
|
|
106
114
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
107
|
-
if (
|
|
115
|
+
if (
|
|
116
|
+
getListener() &&
|
|
117
|
+
(typeof value !== "function" || target.hasOwnProperty(property)) &&
|
|
118
|
+
!(desc && desc.get)
|
|
119
|
+
)
|
|
120
|
+
value = getNode(nodes, property, value)();
|
|
108
121
|
}
|
|
109
122
|
return isWrappable(value) ? wrap$1(value) : value;
|
|
110
123
|
},
|
|
111
124
|
has(target, property) {
|
|
112
|
-
if (
|
|
113
|
-
|
|
125
|
+
if (
|
|
126
|
+
property === $RAW ||
|
|
127
|
+
property === $PROXY ||
|
|
128
|
+
property === $TRACK ||
|
|
129
|
+
property === $NODE ||
|
|
130
|
+
property === $HAS ||
|
|
131
|
+
property === "__proto__"
|
|
132
|
+
)
|
|
133
|
+
return true;
|
|
134
|
+
getListener() && getNode(getNodes(target, $HAS), property)();
|
|
114
135
|
return property in target;
|
|
115
136
|
},
|
|
116
137
|
set() {
|
|
@@ -129,15 +150,21 @@ function setProperty(state, property, value, deleting = false) {
|
|
|
129
150
|
const prev = state[property],
|
|
130
151
|
len = state.length;
|
|
131
152
|
DevHooks.onStoreNodeUpdate && DevHooks.onStoreNodeUpdate(state, property, value, prev);
|
|
132
|
-
if (value === undefined)
|
|
133
|
-
|
|
153
|
+
if (value === undefined) {
|
|
154
|
+
delete state[property];
|
|
155
|
+
if (state[$HAS] && state[$HAS][property] && prev !== undefined) state[$HAS][property].$();
|
|
156
|
+
} else {
|
|
157
|
+
state[property] = value;
|
|
158
|
+
if (state[$HAS] && state[$HAS][property] && prev === undefined) state[$HAS][property].$();
|
|
159
|
+
}
|
|
160
|
+
let nodes = getNodes(state, $NODE),
|
|
134
161
|
node;
|
|
135
|
-
if (node =
|
|
162
|
+
if ((node = getNode(nodes, property, prev))) node.$(() => value);
|
|
136
163
|
if (Array.isArray(state) && state.length !== len) {
|
|
137
164
|
for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();
|
|
138
|
-
(node =
|
|
165
|
+
(node = getNode(nodes, "length", len)) && node.$(state.length);
|
|
139
166
|
}
|
|
140
|
-
(node = nodes
|
|
167
|
+
(node = nodes[$SELF]) && node.$();
|
|
141
168
|
}
|
|
142
169
|
function mergeStoreNode(state, value) {
|
|
143
170
|
const keys = Object.keys(value);
|
|
@@ -178,11 +205,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
178
205
|
}
|
|
179
206
|
return;
|
|
180
207
|
} else if (isArray && partType === "object") {
|
|
181
|
-
const {
|
|
182
|
-
from = 0,
|
|
183
|
-
to = current.length - 1,
|
|
184
|
-
by = 1
|
|
185
|
-
} = part;
|
|
208
|
+
const { from = 0, to = current.length - 1, by = 1 } = part;
|
|
186
209
|
for (let i = from; i <= to; i += by) {
|
|
187
210
|
updatePath(current, [i].concat(path), traversed);
|
|
188
211
|
}
|
|
@@ -201,14 +224,17 @@ function updatePath(current, path, traversed = []) {
|
|
|
201
224
|
}
|
|
202
225
|
if (part === undefined && value == undefined) return;
|
|
203
226
|
value = unwrap(value);
|
|
204
|
-
if (part === undefined || isWrappable(prev) && isWrappable(value) && !Array.isArray(value)) {
|
|
227
|
+
if (part === undefined || (isWrappable(prev) && isWrappable(value) && !Array.isArray(value))) {
|
|
205
228
|
mergeStoreNode(prev, value);
|
|
206
229
|
} else setProperty(current, part, value);
|
|
207
230
|
}
|
|
208
231
|
function createStore(...[store, options]) {
|
|
209
232
|
const unwrappedStore = unwrap(store || {});
|
|
210
233
|
const isArray = Array.isArray(unwrappedStore);
|
|
211
|
-
if (typeof unwrappedStore !== "object" && typeof unwrappedStore !== "function")
|
|
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
|
+
);
|
|
212
238
|
const wrappedStore = wrap$1(unwrappedStore);
|
|
213
239
|
DEV$1.registerGraph({
|
|
214
240
|
value: unwrappedStore,
|
|
@@ -216,7 +242,9 @@ function createStore(...[store, options]) {
|
|
|
216
242
|
});
|
|
217
243
|
function setStore(...args) {
|
|
218
244
|
batch(() => {
|
|
219
|
-
isArray && args.length === 1
|
|
245
|
+
isArray && args.length === 1
|
|
246
|
+
? updateArray(unwrappedStore, args[0])
|
|
247
|
+
: updatePath(unwrappedStore, args);
|
|
220
248
|
});
|
|
221
249
|
}
|
|
222
250
|
return [wrappedStore, setStore];
|
|
@@ -224,11 +252,19 @@ function createStore(...[store, options]) {
|
|
|
224
252
|
|
|
225
253
|
function proxyDescriptor(target, property) {
|
|
226
254
|
const desc = Reflect.getOwnPropertyDescriptor(target, property);
|
|
227
|
-
if (
|
|
255
|
+
if (
|
|
256
|
+
!desc ||
|
|
257
|
+
desc.get ||
|
|
258
|
+
desc.set ||
|
|
259
|
+
!desc.configurable ||
|
|
260
|
+
property === $PROXY ||
|
|
261
|
+
property === $NODE
|
|
262
|
+
)
|
|
263
|
+
return desc;
|
|
228
264
|
delete desc.value;
|
|
229
265
|
delete desc.writable;
|
|
230
266
|
desc.get = () => target[$PROXY][property];
|
|
231
|
-
desc.set = v => target[$PROXY][property] = v;
|
|
267
|
+
desc.set = v => (target[$PROXY][property] = v);
|
|
232
268
|
return desc;
|
|
233
269
|
}
|
|
234
270
|
const proxyTraps = {
|
|
@@ -239,22 +275,32 @@ const proxyTraps = {
|
|
|
239
275
|
trackSelf(target);
|
|
240
276
|
return receiver;
|
|
241
277
|
}
|
|
242
|
-
const nodes =
|
|
278
|
+
const nodes = getNodes(target, $NODE);
|
|
243
279
|
const tracked = nodes[property];
|
|
244
280
|
let value = tracked ? tracked() : target[property];
|
|
245
|
-
if (property === $NODE || property === "__proto__") return value;
|
|
281
|
+
if (property === $NODE || property === $HAS || property === "__proto__") return value;
|
|
246
282
|
if (!tracked) {
|
|
247
283
|
const desc = Object.getOwnPropertyDescriptor(target, property);
|
|
248
284
|
const isFunction = typeof value === "function";
|
|
249
|
-
if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get))
|
|
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]) {
|
|
250
288
|
return (...args) => batch(() => Array.prototype[property].apply(receiver, args));
|
|
251
289
|
}
|
|
252
290
|
}
|
|
253
291
|
return isWrappable(value) ? wrap(value) : value;
|
|
254
292
|
},
|
|
255
293
|
has(target, property) {
|
|
256
|
-
if (
|
|
257
|
-
|
|
294
|
+
if (
|
|
295
|
+
property === $RAW ||
|
|
296
|
+
property === $PROXY ||
|
|
297
|
+
property === $TRACK ||
|
|
298
|
+
property === $NODE ||
|
|
299
|
+
property === $HAS ||
|
|
300
|
+
property === "__proto__"
|
|
301
|
+
)
|
|
302
|
+
return true;
|
|
303
|
+
getListener() && getNode(getNodes(target, $HAS), property)();
|
|
258
304
|
return property in target;
|
|
259
305
|
},
|
|
260
306
|
set(target, property, value) {
|
|
@@ -272,7 +318,7 @@ function wrap(value) {
|
|
|
272
318
|
let p = value[$PROXY];
|
|
273
319
|
if (!p) {
|
|
274
320
|
Object.defineProperty(value, $PROXY, {
|
|
275
|
-
value: p = new Proxy(value, proxyTraps)
|
|
321
|
+
value: (p = new Proxy(value, proxyTraps))
|
|
276
322
|
});
|
|
277
323
|
const keys = Object.keys(value),
|
|
278
324
|
desc = Object.getOwnPropertyDescriptors(value);
|
|
@@ -297,7 +343,10 @@ function wrap(value) {
|
|
|
297
343
|
}
|
|
298
344
|
function createMutable(state, options) {
|
|
299
345
|
const unwrappedStore = unwrap(state || {});
|
|
300
|
-
if (typeof unwrappedStore !== "object" && typeof unwrappedStore !== "function")
|
|
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
|
+
);
|
|
301
350
|
const wrappedStore = wrap(unwrappedStore);
|
|
302
351
|
DEV$1.registerGraph({
|
|
303
352
|
value: unwrappedStore,
|
|
@@ -313,19 +362,39 @@ const $ROOT = Symbol("store-root");
|
|
|
313
362
|
function applyState(target, parent, property, merge, key) {
|
|
314
363
|
const previous = parent[property];
|
|
315
364
|
if (target === previous) return;
|
|
316
|
-
if (
|
|
365
|
+
if (
|
|
366
|
+
property !== $ROOT &&
|
|
367
|
+
(!isWrappable(target) || !isWrappable(previous) || (key && target[key] !== previous[key]))
|
|
368
|
+
) {
|
|
317
369
|
setProperty(parent, property, target);
|
|
318
370
|
return;
|
|
319
371
|
}
|
|
320
372
|
if (Array.isArray(target)) {
|
|
321
|
-
if (
|
|
373
|
+
if (
|
|
374
|
+
target.length &&
|
|
375
|
+
previous.length &&
|
|
376
|
+
(!merge || (key && target[0] && target[0][key] != null))
|
|
377
|
+
) {
|
|
322
378
|
let i, j, start, end, newEnd, item, newIndicesNext, keyVal;
|
|
323
|
-
for (
|
|
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
|
+
) {
|
|
324
386
|
applyState(target[start], previous, start, merge, key);
|
|
325
387
|
}
|
|
326
388
|
const temp = new Array(target.length),
|
|
327
389
|
newIndices = new Map();
|
|
328
|
-
for (
|
|
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
|
+
) {
|
|
329
398
|
temp[newEnd] = previous[end];
|
|
330
399
|
}
|
|
331
400
|
if (start > newEnd || start > end) {
|
|
@@ -379,16 +448,19 @@ function applyState(target, parent, property, merge, key) {
|
|
|
379
448
|
}
|
|
380
449
|
}
|
|
381
450
|
function reconcile(value, options = {}) {
|
|
382
|
-
const {
|
|
383
|
-
merge,
|
|
384
|
-
key = "id"
|
|
385
|
-
} = options,
|
|
451
|
+
const { merge, key = "id" } = options,
|
|
386
452
|
v = unwrap(value);
|
|
387
453
|
return state => {
|
|
388
454
|
if (!isWrappable(state) || !isWrappable(v)) return v;
|
|
389
|
-
const res = applyState(
|
|
390
|
-
|
|
391
|
-
|
|
455
|
+
const res = applyState(
|
|
456
|
+
v,
|
|
457
|
+
{
|
|
458
|
+
[$ROOT]: state
|
|
459
|
+
},
|
|
460
|
+
$ROOT,
|
|
461
|
+
merge,
|
|
462
|
+
key
|
|
463
|
+
);
|
|
392
464
|
return res === undefined ? state : res;
|
|
393
465
|
};
|
|
394
466
|
}
|
|
@@ -398,7 +470,10 @@ const setterTraps = {
|
|
|
398
470
|
if (property === $RAW) return target;
|
|
399
471
|
const value = target[property];
|
|
400
472
|
let proxy;
|
|
401
|
-
return isWrappable(value)
|
|
473
|
+
return isWrappable(value)
|
|
474
|
+
? producers.get(value) ||
|
|
475
|
+
(producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)
|
|
476
|
+
: value;
|
|
402
477
|
},
|
|
403
478
|
set(target, property, value) {
|
|
404
479
|
setProperty(target, property, unwrap(value));
|
|
@@ -414,7 +489,7 @@ function produce(fn) {
|
|
|
414
489
|
if (isWrappable(state)) {
|
|
415
490
|
let proxy;
|
|
416
491
|
if (!(proxy = producers.get(state))) {
|
|
417
|
-
producers.set(state, proxy = new Proxy(state, setterTraps));
|
|
492
|
+
producers.set(state, (proxy = new Proxy(state, setterTraps)));
|
|
418
493
|
}
|
|
419
494
|
fn(proxy);
|
|
420
495
|
}
|
|
@@ -426,6 +501,6 @@ const DEV = {
|
|
|
426
501
|
$NODE,
|
|
427
502
|
isWrappable,
|
|
428
503
|
hooks: DevHooks
|
|
429
|
-
}
|
|
504
|
+
};
|
|
430
505
|
|
|
431
506
|
export { $RAW, DEV, createMutable, createStore, modifyMutable, produce, reconcile, unwrap };
|
package/store/dist/server.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
const $RAW = Symbol("state-raw");
|
|
2
2
|
function isWrappable(obj) {
|
|
3
|
-
return
|
|
3
|
+
return (
|
|
4
|
+
obj != null &&
|
|
5
|
+
typeof obj === "object" &&
|
|
6
|
+
(Object.getPrototypeOf(obj) === Object.prototype || Array.isArray(obj))
|
|
7
|
+
);
|
|
4
8
|
}
|
|
5
9
|
function unwrap(item) {
|
|
6
10
|
return item;
|
|
@@ -49,11 +53,7 @@ function updatePath(current, path, traversed = []) {
|
|
|
49
53
|
}
|
|
50
54
|
return;
|
|
51
55
|
} else if (isArray && partType === "object") {
|
|
52
|
-
const {
|
|
53
|
-
from = 0,
|
|
54
|
-
to = current.length - 1,
|
|
55
|
-
by = 1
|
|
56
|
-
} = part;
|
|
56
|
+
const { from = 0, to = current.length - 1, by = 1 } = 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 || isWrappable(next) && isWrappable(value) && !Array.isArray(value)) {
|
|
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,4 +108,15 @@ function produce(fn) {
|
|
|
108
108
|
}
|
|
109
109
|
const DEV = undefined;
|
|
110
110
|
|
|
111
|
-
export {
|
|
111
|
+
export {
|
|
112
|
+
$RAW,
|
|
113
|
+
DEV,
|
|
114
|
+
createMutable,
|
|
115
|
+
createStore,
|
|
116
|
+
isWrappable,
|
|
117
|
+
produce,
|
|
118
|
+
reconcile,
|
|
119
|
+
setProperty,
|
|
120
|
+
unwrap,
|
|
121
|
+
updatePath
|
|
122
|
+
};
|