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.
Files changed (54) hide show
  1. package/dist/dev.cjs +35 -19
  2. package/dist/dev.js +558 -309
  3. package/dist/server.cjs +38 -23
  4. package/dist/server.js +202 -94
  5. package/dist/solid.cjs +35 -19
  6. package/dist/solid.js +485 -267
  7. package/h/dist/h.cjs +2 -2
  8. package/h/dist/h.js +36 -10
  9. package/h/jsx-runtime/dist/jsx.js +1 -1
  10. package/h/jsx-runtime/types/index.d.ts +11 -8
  11. package/h/jsx-runtime/types/jsx.d.ts +3 -0
  12. package/h/types/hyperscript.d.ts +11 -11
  13. package/h/types/index.d.ts +3 -2
  14. package/html/dist/html.cjs +2 -2
  15. package/html/dist/html.js +218 -96
  16. package/html/types/index.d.ts +3 -2
  17. package/html/types/lit.d.ts +45 -31
  18. package/package.json +1 -1
  19. package/store/dist/dev.cjs +36 -33
  20. package/store/dist/dev.js +143 -68
  21. package/store/dist/server.js +19 -8
  22. package/store/dist/store.cjs +36 -33
  23. package/store/dist/store.js +134 -65
  24. package/store/types/index.d.ts +21 -7
  25. package/store/types/modifiers.d.ts +6 -3
  26. package/store/types/mutable.d.ts +5 -2
  27. package/store/types/server.d.ts +12 -4
  28. package/store/types/store.d.ts +220 -63
  29. package/types/index.d.ts +72 -9
  30. package/types/jsx.d.ts +3 -0
  31. package/types/reactive/array.d.ts +12 -4
  32. package/types/reactive/observable.d.ts +25 -17
  33. package/types/reactive/scheduler.d.ts +9 -6
  34. package/types/reactive/signal.d.ts +237 -146
  35. package/types/render/Suspense.d.ts +5 -5
  36. package/types/render/component.d.ts +62 -31
  37. package/types/render/flow.d.ts +43 -31
  38. package/types/render/hydration.d.ts +12 -12
  39. package/types/server/index.d.ts +56 -2
  40. package/types/server/reactive.d.ts +71 -45
  41. package/types/server/rendering.d.ts +171 -95
  42. package/universal/dist/dev.js +28 -12
  43. package/universal/dist/universal.js +28 -12
  44. package/universal/types/index.d.ts +3 -1
  45. package/universal/types/universal.d.ts +0 -1
  46. package/web/dist/dev.js +610 -79
  47. package/web/dist/server.cjs +5 -1
  48. package/web/dist/server.js +181 -78
  49. package/web/dist/web.js +610 -79
  50. package/web/types/client.d.ts +2 -2
  51. package/web/types/core.d.ts +10 -1
  52. package/web/types/index.d.ts +27 -10
  53. package/web/types/server-mock.d.ts +47 -32
  54. package/web/types/server.d.ts +1 -1
@@ -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 getDataNodes(target) {
57
- let nodes = target[$NODE];
58
- if (!nodes) Object.defineProperty(target, $NODE, {
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 getDataNode(nodes, property, value) {
64
- return nodes[property] || (nodes[property] = createDataNode(value));
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
- if (solidJs.getListener()) {
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 = getDataNodes(target);
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 = getDataNode(nodes, property, 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
- this.get(target, property, target);
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) delete state[property];else state[property] = value;
129
- let nodes = getDataNodes(state),
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 = getDataNode(nodes, property, prev)) node.$(() => value);
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 = getDataNode(nodes, "length", len)) && node.$(state.length);
137
+ (node = getNode(nodes, "length", len)) && node.$(state.length);
135
138
  }
136
- (node = nodes._) && node.$();
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 = getDataNodes(target);
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 = getDataNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {
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
- this.get(target, property, target);
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) {
@@ -1,12 +1,14 @@
1
- import { $PROXY, $TRACK, getListener, batch, createSignal } from 'solid-js';
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 obj != null && typeof obj === "object" && (obj[$PROXY] || !(proto = Object.getPrototypeOf(obj)) || proto === Object.prototype || Array.isArray(obj));
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);else set.add(item);
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);else set.add(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 getDataNodes(target) {
55
- let nodes = target[$NODE];
56
- if (!nodes) Object.defineProperty(target, $NODE, {
57
- value: nodes = Object.create(null)
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 getDataNode(nodes, property, value) {
62
- return nodes[property] || (nodes[property] = createDataNode(value));
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) return desc;
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
- if (getListener()) {
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 = getDataNodes(target);
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 (getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getDataNode(nodes, property, value)();
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 (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === "__proto__") return true;
110
- this.get(target, property, target);
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) delete state[property];else state[property] = value;
127
- let nodes = getDataNodes(state),
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 = getDataNode(nodes, property, prev)) node.$(() => value);
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 = getDataNode(nodes, "length", len)) && node.$(state.length);
159
+ (node = getNode(nodes, "length", len)) && node.$(state.length);
133
160
  }
134
- (node = nodes._) && node.$();
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 ? updateArray(unwrappedStore, args[0]) : updatePath(unwrappedStore, args);
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 (!desc || desc.get || desc.set || !desc.configurable || property === $PROXY || property === $NODE) return desc;
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 = getDataNodes(target);
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)) value = getDataNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {
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 (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === "__proto__") return true;
246
- this.get(target, property, target);
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 (property !== $ROOT && (!isWrappable(target) || !isWrappable(previous) || key && target[key] !== previous[key])) {
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 (target.length && previous.length && (!merge || key && target[0] && target[0][key] != null)) {
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 (start = 0, end = Math.min(previous.length, target.length); start < end && (previous[start] === target[start] || key && previous[start] && target[start] && previous[start][key] === target[start][key]); start++) {
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 (end = previous.length - 1, newEnd = target.length - 1; end >= start && newEnd >= start && (previous[end] === target[newEnd] || key && previous[start] && target[start] && previous[end][key] === target[newEnd][key]); end--, newEnd--) {
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(v, {
374
- [$ROOT]: state
375
- }, $ROOT, merge, key);
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) ? producers.get(value) || (producers.set(value, proxy = new Proxy(value, setterTraps)), proxy) : 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
  }
@@ -1,12 +1,26 @@
1
1
  export { $RAW, createStore, unwrap } from "./store.js";
2
- export type { ArrayFilterFn, DeepMutable, DeepReadonly, NotWrappable, Part, SetStoreFunction, SolidStore, Store, StoreNode, StorePathRange, StoreSetter } from "./store.js";
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
- readonly $NODE: typeof $NODE;
8
- readonly isWrappable: typeof isWrappable;
9
- readonly hooks: {
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
- } | undefined;
24
+ };
25
+ }
26
+ | undefined;
@@ -1,6 +1,9 @@
1
1
  export type ReconcileOptions = {
2
- key?: string | null;
3
- merge?: boolean;
2
+ key?: string | null;
3
+ merge?: boolean;
4
4
  };
5
- export declare function reconcile<T extends U, U>(value: T, options?: ReconcileOptions): (state: U) => T;
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;
@@ -1,5 +1,8 @@
1
1
  import { StoreNode } from "./store.js";
2
- export declare function createMutable<T extends StoreNode>(state: T, options?: {
2
+ export declare function createMutable<T extends StoreNode>(
3
+ state: T,
4
+ options?: {
3
5
  name?: string;
4
- }): T;
6
+ }
7
+ ): T;
5
8
  export declare function modifyMutable<T>(state: T, modifier: (state: T) => T): void;
@@ -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(state: any, property: PropertyKey, value: any, force?: boolean): void;
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
- key?: string | null;
11
- merge?: boolean;
15
+ key?: string | null;
16
+ merge?: boolean;
12
17
  };
13
- export declare function reconcile<T extends U, U extends object>(value: T, options?: ReconcileOptions): (state: U) => T;
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 {};