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