solid-js 1.8.11 → 1.8.13

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 (52) hide show
  1. package/dist/dev.js +544 -307
  2. package/dist/server.js +170 -75
  3. package/dist/solid.js +471 -265
  4. package/h/dist/h.js +34 -8
  5. package/h/jsx-runtime/dist/jsx.js +1 -1
  6. package/h/jsx-runtime/types/index.d.ts +11 -8
  7. package/h/types/hyperscript.d.ts +11 -11
  8. package/html/dist/html.js +216 -94
  9. package/html/types/lit.d.ts +47 -33
  10. package/package.json +9 -4
  11. package/store/dist/dev.cjs +12 -2
  12. package/store/dist/dev.js +133 -44
  13. package/store/dist/server.js +19 -8
  14. package/store/dist/store.cjs +12 -2
  15. package/store/dist/store.js +124 -41
  16. package/store/types/index.d.ts +21 -7
  17. package/store/types/modifiers.d.ts +6 -3
  18. package/store/types/mutable.d.ts +5 -2
  19. package/store/types/server.d.ts +12 -4
  20. package/store/types/store.d.ts +218 -61
  21. package/types/index.d.ts +75 -10
  22. package/types/reactive/array.d.ts +12 -4
  23. package/types/reactive/observable.d.ts +25 -17
  24. package/types/reactive/scheduler.d.ts +9 -6
  25. package/types/reactive/signal.d.ts +233 -142
  26. package/types/render/Suspense.d.ts +5 -5
  27. package/types/render/component.d.ts +64 -33
  28. package/types/render/flow.d.ts +43 -31
  29. package/types/render/hydration.d.ts +13 -13
  30. package/types/server/index.d.ts +57 -2
  31. package/types/server/reactive.d.ts +73 -42
  32. package/types/server/rendering.d.ts +167 -96
  33. package/universal/dist/dev.js +28 -12
  34. package/universal/dist/universal.js +28 -12
  35. package/universal/types/index.d.ts +3 -1
  36. package/universal/types/universal.d.ts +0 -1
  37. package/web/dist/dev.cjs +3 -0
  38. package/web/dist/dev.js +625 -81
  39. package/web/dist/server.cjs +10 -15
  40. package/web/dist/server.js +216 -107
  41. package/web/dist/web.js +614 -80
  42. package/web/storage/dist/storage.js +10 -0
  43. package/web/storage/package.json +15 -0
  44. package/web/storage/types/index.d.ts +2 -0
  45. package/web/storage/types/index.js +13 -0
  46. package/web/types/client.d.ts +2 -2
  47. package/web/types/core.d.ts +10 -1
  48. package/web/types/index.d.ts +27 -10
  49. package/web/types/server-mock.d.ts +47 -32
  50. package/web/dist/storage.js +0 -10
  51. package/web/types/storage.d.ts +0 -2
  52. /package/web/{dist → storage/dist}/storage.cjs +0 -0
@@ -1,4 +1,4 @@
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
4
  $NODE = Symbol("store-node"),
@@ -8,7 +8,7 @@ function wrap$1(value) {
8
8
  let p = value[$PROXY];
9
9
  if (!p) {
10
10
  Object.defineProperty(value, $PROXY, {
11
- value: p = new Proxy(value, proxyTraps$1)
11
+ value: (p = new Proxy(value, proxyTraps$1))
12
12
  });
13
13
  if (!Array.isArray(value)) {
14
14
  const keys = Object.keys(value),
@@ -28,20 +28,29 @@ function wrap$1(value) {
28
28
  }
29
29
  function isWrappable(obj) {
30
30
  let proto;
31
- 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
+ );
32
39
  }
33
40
  function unwrap(item, set = new Set()) {
34
41
  let result, unwrapped, v, prop;
35
- if (result = item != null && item[$RAW]) return result;
42
+ if ((result = item != null && item[$RAW])) return result;
36
43
  if (!isWrappable(item) || set.has(item)) return item;
37
44
  if (Array.isArray(item)) {
38
- 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);
39
47
  for (let i = 0, l = item.length; i < l; i++) {
40
48
  v = item[i];
41
49
  if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;
42
50
  }
43
51
  } else {
44
- 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);
45
54
  const keys = Object.keys(item),
46
55
  desc = Object.getOwnPropertyDescriptors(item);
47
56
  for (let i = 0, l = keys.length; i < l; i++) {
@@ -55,9 +64,10 @@ function unwrap(item, set = new Set()) {
55
64
  }
56
65
  function getNodes(target, symbol) {
57
66
  let nodes = target[symbol];
58
- if (!nodes) Object.defineProperty(target, symbol, {
59
- value: nodes = Object.create(null)
60
- });
67
+ if (!nodes)
68
+ Object.defineProperty(target, symbol, {
69
+ value: (nodes = Object.create(null))
70
+ });
61
71
  return nodes;
62
72
  }
63
73
  function getNode(nodes, property, value) {
@@ -67,11 +77,12 @@ function getNode(nodes, property, value) {
67
77
  internal: true
68
78
  });
69
79
  s.$ = set;
70
- return nodes[property] = s;
80
+ return (nodes[property] = s);
71
81
  }
72
82
  function proxyDescriptor$1(target, property) {
73
83
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
74
- 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;
75
86
  delete desc.value;
76
87
  delete desc.writable;
77
88
  desc.get = () => target[$PROXY][property];
@@ -98,12 +109,25 @@ const proxyTraps$1 = {
98
109
  if (property === $NODE || property === $HAS || property === "__proto__") return value;
99
110
  if (!tracked) {
100
111
  const desc = Object.getOwnPropertyDescriptor(target, property);
101
- if (getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(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)();
102
118
  }
103
119
  return isWrappable(value) ? wrap$1(value) : value;
104
120
  },
105
121
  has(target, property) {
106
- if (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === $HAS || property === "__proto__") return true;
122
+ if (
123
+ property === $RAW ||
124
+ property === $PROXY ||
125
+ property === $TRACK ||
126
+ property === $NODE ||
127
+ property === $HAS ||
128
+ property === "__proto__"
129
+ )
130
+ return true;
107
131
  getListener() && getNode(getNodes(target, $HAS), property)();
108
132
  return property in target;
109
133
  },
@@ -129,7 +153,7 @@ function setProperty(state, property, value, deleting = false) {
129
153
  }
130
154
  let nodes = getNodes(state, $NODE),
131
155
  node;
132
- if (node = getNode(nodes, property, prev)) node.$(() => value);
156
+ if ((node = getNode(nodes, property, prev))) node.$(() => value);
133
157
  if (Array.isArray(state) && state.length !== len) {
134
158
  for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();
135
159
  (node = getNode(nodes, "length", len)) && node.$(state.length);
@@ -175,11 +199,7 @@ function updatePath(current, path, traversed = []) {
175
199
  }
176
200
  return;
177
201
  } else if (isArray && partType === "object") {
178
- const {
179
- from = 0,
180
- to = current.length - 1,
181
- by = 1
182
- } = part;
202
+ const { from = 0, to = current.length - 1, by = 1 } = part;
183
203
  for (let i = from; i <= to; i += by) {
184
204
  updatePath(current, [i].concat(path), traversed);
185
205
  }
@@ -198,7 +218,7 @@ function updatePath(current, path, traversed = []) {
198
218
  }
199
219
  if (part === undefined && value == undefined) return;
200
220
  value = unwrap(value);
201
- if (part === undefined || isWrappable(prev) && isWrappable(value) && !Array.isArray(value)) {
221
+ if (part === undefined || (isWrappable(prev) && isWrappable(value) && !Array.isArray(value))) {
202
222
  mergeStoreNode(prev, value);
203
223
  } else setProperty(current, part, value);
204
224
  }
@@ -208,7 +228,9 @@ function createStore(...[store, options]) {
208
228
  const wrappedStore = wrap$1(unwrappedStore);
209
229
  function setStore(...args) {
210
230
  batch(() => {
211
- 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);
212
234
  });
213
235
  }
214
236
  return [wrappedStore, setStore];
@@ -216,11 +238,19 @@ function createStore(...[store, options]) {
216
238
 
217
239
  function proxyDescriptor(target, property) {
218
240
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
219
- 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;
220
250
  delete desc.value;
221
251
  delete desc.writable;
222
252
  desc.get = () => target[$PROXY][property];
223
- desc.set = v => target[$PROXY][property] = v;
253
+ desc.set = v => (target[$PROXY][property] = v);
224
254
  return desc;
225
255
  }
226
256
  const proxyTraps = {
@@ -238,14 +268,24 @@ const proxyTraps = {
238
268
  if (!tracked) {
239
269
  const desc = Object.getOwnPropertyDescriptor(target, property);
240
270
  const isFunction = typeof value === "function";
241
- if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(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]) {
242
274
  return (...args) => batch(() => Array.prototype[property].apply(receiver, args));
243
275
  }
244
276
  }
245
277
  return isWrappable(value) ? wrap(value) : value;
246
278
  },
247
279
  has(target, property) {
248
- if (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === $HAS || property === "__proto__") return true;
280
+ if (
281
+ property === $RAW ||
282
+ property === $PROXY ||
283
+ property === $TRACK ||
284
+ property === $NODE ||
285
+ property === $HAS ||
286
+ property === "__proto__"
287
+ )
288
+ return true;
249
289
  getListener() && getNode(getNodes(target, $HAS), property)();
250
290
  return property in target;
251
291
  },
@@ -264,23 +304,37 @@ function wrap(value) {
264
304
  let p = value[$PROXY];
265
305
  if (!p) {
266
306
  Object.defineProperty(value, $PROXY, {
267
- value: p = new Proxy(value, proxyTraps)
307
+ value: (p = new Proxy(value, proxyTraps))
268
308
  });
269
309
  const keys = Object.keys(value),
270
310
  desc = Object.getOwnPropertyDescriptors(value);
311
+ const proto = Object.getPrototypeOf(value);
312
+ const isClass =
313
+ value !== null &&
314
+ typeof value === "object" &&
315
+ !Array.isArray(value) &&
316
+ proto !== Object.prototype;
317
+ if (isClass) {
318
+ const descriptors = Object.getOwnPropertyDescriptors(proto);
319
+ keys.push(...Object.keys(descriptors));
320
+ Object.assign(desc, descriptors);
321
+ }
271
322
  for (let i = 0, l = keys.length; i < l; i++) {
272
323
  const prop = keys[i];
324
+ if (isClass && prop === "constructor") continue;
273
325
  if (desc[prop].get) {
274
326
  const get = desc[prop].get.bind(p);
275
327
  Object.defineProperty(value, prop, {
276
- get
328
+ get,
329
+ configurable: true
277
330
  });
278
331
  }
279
332
  if (desc[prop].set) {
280
333
  const og = desc[prop].set,
281
334
  set = v => batch(() => og.call(p, v));
282
335
  Object.defineProperty(value, prop, {
283
- set
336
+ set,
337
+ configurable: true
284
338
  });
285
339
  }
286
340
  }
@@ -301,19 +355,42 @@ function applyState(target, parent, property, merge, key) {
301
355
  const previous = parent[property];
302
356
  if (target === previous) return;
303
357
  const isArray = Array.isArray(target);
304
- if (property !== $ROOT && (!isWrappable(target) || !isWrappable(previous) || isArray !== Array.isArray(previous) || key && target[key] !== previous[key])) {
358
+ if (
359
+ property !== $ROOT &&
360
+ (!isWrappable(target) ||
361
+ !isWrappable(previous) ||
362
+ isArray !== Array.isArray(previous) ||
363
+ (key && target[key] !== previous[key]))
364
+ ) {
305
365
  setProperty(parent, property, target);
306
366
  return;
307
367
  }
308
368
  if (isArray) {
309
- if (target.length && previous.length && (!merge || key && target[0] && target[0][key] != null)) {
369
+ if (
370
+ target.length &&
371
+ previous.length &&
372
+ (!merge || (key && target[0] && target[0][key] != null))
373
+ ) {
310
374
  let i, j, start, end, newEnd, item, newIndicesNext, keyVal;
311
- 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++) {
375
+ for (
376
+ start = 0, end = Math.min(previous.length, target.length);
377
+ start < end &&
378
+ (previous[start] === target[start] ||
379
+ (key && previous[start] && target[start] && previous[start][key] === target[start][key]));
380
+ start++
381
+ ) {
312
382
  applyState(target[start], previous, start, merge, key);
313
383
  }
314
384
  const temp = new Array(target.length),
315
385
  newIndices = new Map();
316
- 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--) {
386
+ for (
387
+ end = previous.length - 1, newEnd = target.length - 1;
388
+ end >= start &&
389
+ newEnd >= start &&
390
+ (previous[end] === target[newEnd] ||
391
+ (key && previous[start] && target[start] && previous[end][key] === target[newEnd][key]));
392
+ end--, newEnd--
393
+ ) {
317
394
  temp[newEnd] = previous[end];
318
395
  }
319
396
  if (start > newEnd || start > end) {
@@ -367,16 +444,19 @@ function applyState(target, parent, property, merge, key) {
367
444
  }
368
445
  }
369
446
  function reconcile(value, options = {}) {
370
- const {
371
- merge,
372
- key = "id"
373
- } = options,
447
+ const { merge, key = "id" } = options,
374
448
  v = unwrap(value);
375
449
  return state => {
376
450
  if (!isWrappable(state) || !isWrappable(v)) return v;
377
- const res = applyState(v, {
378
- [$ROOT]: state
379
- }, $ROOT, merge, key);
451
+ const res = applyState(
452
+ v,
453
+ {
454
+ [$ROOT]: state
455
+ },
456
+ $ROOT,
457
+ merge,
458
+ key
459
+ );
380
460
  return res === undefined ? state : res;
381
461
  };
382
462
  }
@@ -386,7 +466,10 @@ const setterTraps = {
386
466
  if (property === $RAW) return target;
387
467
  const value = target[property];
388
468
  let proxy;
389
- return isWrappable(value) ? producers.get(value) || (producers.set(value, proxy = new Proxy(value, setterTraps)), proxy) : value;
469
+ return isWrappable(value)
470
+ ? producers.get(value) ||
471
+ (producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)
472
+ : value;
390
473
  },
391
474
  set(target, property, value) {
392
475
  setProperty(target, property, unwrap(value));
@@ -402,7 +485,7 @@ function produce(fn) {
402
485
  if (isWrappable(state)) {
403
486
  let proxy;
404
487
  if (!(proxy = producers.get(state))) {
405
- producers.set(state, proxy = new Proxy(state, setterTraps));
488
+ producers.set(state, (proxy = new Proxy(state, setterTraps)));
406
489
  }
407
490
  fn(proxy);
408
491
  }
@@ -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 {};