solid-js 1.4.0-beta.5 → 1.4.0-beta.6

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/server.cjs CHANGED
@@ -398,7 +398,7 @@ function createResource(source, fetcher, options = {}) {
398
398
  value
399
399
  });
400
400
  }
401
- if (p && "then" in p) {
401
+ if (p != undefined && typeof p === "object" && "then" in p) {
402
402
  read.loading = true;
403
403
  if (ctx.writeResource) ctx.writeResource(id, p, undefined, options.deferStream);
404
404
  return p.then(res => {
@@ -415,6 +415,7 @@ function createResource(source, fetcher, options = {}) {
415
415
  });
416
416
  }
417
417
  ctx.resources[id].data = p;
418
+ if (ctx.writeResource) ctx.writeResource(id, p);
418
419
  p = null;
419
420
  return ctx.resources[id].data;
420
421
  }
package/dist/server.js CHANGED
@@ -394,7 +394,7 @@ function createResource(source, fetcher, options = {}) {
394
394
  value
395
395
  });
396
396
  }
397
- if (p && "then" in p) {
397
+ if (p != undefined && typeof p === "object" && "then" in p) {
398
398
  read.loading = true;
399
399
  if (ctx.writeResource) ctx.writeResource(id, p, undefined, options.deferStream);
400
400
  return p.then(res => {
@@ -411,6 +411,7 @@ function createResource(source, fetcher, options = {}) {
411
411
  });
412
412
  }
413
413
  ctx.resources[id].data = p;
414
+ if (ctx.writeResource) ctx.writeResource(id, p);
414
415
  p = null;
415
416
  return ctx.resources[id].data;
416
417
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "solid-js",
3
3
  "description": "A declarative JavaScript library for building user interfaces.",
4
- "version": "1.4.0-beta.5",
4
+ "version": "1.4.0-beta.6",
5
5
  "author": "Ryan Carniato",
6
6
  "license": "MIT",
7
7
  "homepage": "https://solidjs.com",
@@ -151,5 +151,5 @@
151
151
  "compiler",
152
152
  "performance"
153
153
  ],
154
- "gitHead": "6ada354ebee1245a1d060af8a11047d50e2845e1"
154
+ "gitHead": "dce1c4b0c4d7b47f6f8cb743173da3acfd831419"
155
155
  }
@@ -63,6 +63,9 @@ function getDataNodes(target) {
63
63
  });
64
64
  return nodes;
65
65
  }
66
+ function getDataNode(nodes, property, value) {
67
+ return nodes[property] || (nodes[property] = createDataNode(value, true));
68
+ }
66
69
  function proxyDescriptor(target, property) {
67
70
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
68
71
  if (!desc || desc.get || !desc.configurable || property === solidJs.$PROXY || property === $NODE || property === $NAME) return desc;
@@ -81,8 +84,10 @@ function ownKeys(target) {
81
84
  trackSelf(target);
82
85
  return Reflect.ownKeys(target);
83
86
  }
84
- function createDataNode() {
85
- const [s, set] = solidJs.createSignal(undefined, {
87
+ function createDataNode(value, equals) {
88
+ const [s, set] = solidJs.createSignal(value, equals ? {
89
+ internal: true
90
+ } : {
86
91
  equals: false,
87
92
  internal: true
88
93
  });
@@ -93,12 +98,14 @@ const proxyTraps$1 = {
93
98
  get(target, property, receiver) {
94
99
  if (property === $RAW) return target;
95
100
  if (property === solidJs.$PROXY) return receiver;
96
- const value = target[property];
97
- if (property === $NODE || property === "__proto__") return value;
98
101
  if (property === solidJs.$TRACK) return trackSelf(target);
99
- if (solidJs.getListener() && (typeof value !== "function" || target.hasOwnProperty(property))) {
100
- const nodes = getDataNodes(target);
101
- (nodes[property] || (nodes[property] = createDataNode()))();
102
+ const nodes = getDataNodes(target);
103
+ const tracked = nodes[property];
104
+ let value = tracked ? nodes[property]() : target[property];
105
+ if (property === $NODE || property === "__proto__") return value;
106
+ if (!tracked) {
107
+ const desc = Object.getOwnPropertyDescriptor(target, property);
108
+ if (solidJs.getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getDataNode(nodes, property, value)();
102
109
  }
103
110
  return isWrappable(value) ? wrap$1(value, target[$NAME] && `${target[$NAME]}:${property.toString()}`) : value;
104
111
  },
@@ -115,15 +122,15 @@ const proxyTraps$1 = {
115
122
  };
116
123
  function setProperty(state, property, value) {
117
124
  if (state[property] === value) return;
118
- const array = Array.isArray(state);
125
+ const prev = state[property];
119
126
  const len = state.length;
120
127
  if (value === undefined) {
121
128
  delete state[property];
122
129
  } else state[property] = value;
123
130
  let nodes = getDataNodes(state),
124
131
  node;
125
- (node = nodes[property]) && node.$();
126
- if (array && state.length !== len) (node = nodes.length) && node.$();
132
+ if (node = getDataNode(nodes, property, prev)) node.$(() => value);
133
+ if (Array.isArray(state) && state.length !== len) (node = getDataNode(nodes, "length", len)) && node.$(state.length);
127
134
  (node = nodes._) && node.$();
128
135
  }
129
136
  function mergeStoreNode(state, value) {
@@ -213,14 +220,17 @@ const proxyTraps = {
213
220
  get(target, property, receiver) {
214
221
  if (property === $RAW) return target;
215
222
  if (property === solidJs.$PROXY) return receiver;
216
- const value = target[property];
217
- if (property === $NODE || property === "__proto__") return value;
218
223
  if (property === solidJs.$TRACK) return trackSelf(target);
219
- if (solidJs.getListener() && (typeof value !== "function" || target.hasOwnProperty(property))) {
220
- const nodes = getDataNodes(target);
221
- (nodes[property] || (nodes[property] = createDataNode()))();
222
- } else if (value != null && typeof value === "function" && value === Array.prototype[property]) {
223
- return (...args) => solidJs.batch(() => Array.prototype[property].apply(receiver, args));
224
+ const nodes = getDataNodes(target);
225
+ const tracked = nodes[property];
226
+ let value = tracked ? nodes[property]() : target[property];
227
+ if (property === $NODE || property === "__proto__") return value;
228
+ if (!tracked) {
229
+ const desc = Object.getOwnPropertyDescriptor(target, property);
230
+ const isFunction = typeof value !== "function";
231
+ if (solidJs.getListener() && (isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getDataNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {
232
+ return (...args) => solidJs.batch(() => Array.prototype[property].apply(receiver, args));
233
+ }
224
234
  }
225
235
  return isWrappable(value) ? wrap(value, target[$NAME] && `${target[$NAME]}:${property.toString()}`) : value;
226
236
  },
package/store/dist/dev.js CHANGED
@@ -59,6 +59,9 @@ function getDataNodes(target) {
59
59
  });
60
60
  return nodes;
61
61
  }
62
+ function getDataNode(nodes, property, value) {
63
+ return nodes[property] || (nodes[property] = createDataNode(value, true));
64
+ }
62
65
  function proxyDescriptor(target, property) {
63
66
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
64
67
  if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE || property === $NAME) return desc;
@@ -77,8 +80,10 @@ function ownKeys(target) {
77
80
  trackSelf(target);
78
81
  return Reflect.ownKeys(target);
79
82
  }
80
- function createDataNode() {
81
- const [s, set] = createSignal(undefined, {
83
+ function createDataNode(value, equals) {
84
+ const [s, set] = createSignal(value, equals ? {
85
+ internal: true
86
+ } : {
82
87
  equals: false,
83
88
  internal: true
84
89
  });
@@ -89,12 +94,14 @@ const proxyTraps$1 = {
89
94
  get(target, property, receiver) {
90
95
  if (property === $RAW) return target;
91
96
  if (property === $PROXY) return receiver;
92
- const value = target[property];
93
- if (property === $NODE || property === "__proto__") return value;
94
97
  if (property === $TRACK) return trackSelf(target);
95
- if (getListener() && (typeof value !== "function" || target.hasOwnProperty(property))) {
96
- const nodes = getDataNodes(target);
97
- (nodes[property] || (nodes[property] = createDataNode()))();
98
+ const nodes = getDataNodes(target);
99
+ const tracked = nodes[property];
100
+ let value = tracked ? nodes[property]() : target[property];
101
+ if (property === $NODE || property === "__proto__") return value;
102
+ if (!tracked) {
103
+ const desc = Object.getOwnPropertyDescriptor(target, property);
104
+ if (getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getDataNode(nodes, property, value)();
98
105
  }
99
106
  return isWrappable(value) ? wrap$1(value, target[$NAME] && `${target[$NAME]}:${property.toString()}`) : value;
100
107
  },
@@ -111,15 +118,15 @@ const proxyTraps$1 = {
111
118
  };
112
119
  function setProperty(state, property, value) {
113
120
  if (state[property] === value) return;
114
- const array = Array.isArray(state);
121
+ const prev = state[property];
115
122
  const len = state.length;
116
123
  if (value === undefined) {
117
124
  delete state[property];
118
125
  } else state[property] = value;
119
126
  let nodes = getDataNodes(state),
120
127
  node;
121
- (node = nodes[property]) && node.$();
122
- if (array && state.length !== len) (node = nodes.length) && node.$();
128
+ if (node = getDataNode(nodes, property, prev)) node.$(() => value);
129
+ if (Array.isArray(state) && state.length !== len) (node = getDataNode(nodes, "length", len)) && node.$(state.length);
123
130
  (node = nodes._) && node.$();
124
131
  }
125
132
  function mergeStoreNode(state, value) {
@@ -209,14 +216,17 @@ const proxyTraps = {
209
216
  get(target, property, receiver) {
210
217
  if (property === $RAW) return target;
211
218
  if (property === $PROXY) return receiver;
212
- const value = target[property];
213
- if (property === $NODE || property === "__proto__") return value;
214
219
  if (property === $TRACK) return trackSelf(target);
215
- if (getListener() && (typeof value !== "function" || target.hasOwnProperty(property))) {
216
- const nodes = getDataNodes(target);
217
- (nodes[property] || (nodes[property] = createDataNode()))();
218
- } else if (value != null && typeof value === "function" && value === Array.prototype[property]) {
219
- return (...args) => batch(() => Array.prototype[property].apply(receiver, args));
220
+ const nodes = getDataNodes(target);
221
+ const tracked = nodes[property];
222
+ let value = tracked ? nodes[property]() : target[property];
223
+ if (property === $NODE || property === "__proto__") return value;
224
+ if (!tracked) {
225
+ const desc = Object.getOwnPropertyDescriptor(target, property);
226
+ const isFunction = typeof value !== "function";
227
+ if (getListener() && (isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getDataNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {
228
+ return (...args) => batch(() => Array.prototype[property].apply(receiver, args));
229
+ }
220
230
  }
221
231
  return isWrappable(value) ? wrap(value, target[$NAME] && `${target[$NAME]}:${property.toString()}`) : value;
222
232
  },
@@ -60,6 +60,9 @@ function getDataNodes(target) {
60
60
  });
61
61
  return nodes;
62
62
  }
63
+ function getDataNode(nodes, property, value) {
64
+ return nodes[property] || (nodes[property] = createDataNode(value, true));
65
+ }
63
66
  function proxyDescriptor(target, property) {
64
67
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
65
68
  if (!desc || desc.get || !desc.configurable || property === solidJs.$PROXY || property === $NODE || property === $NAME) return desc;
@@ -78,8 +81,10 @@ function ownKeys(target) {
78
81
  trackSelf(target);
79
82
  return Reflect.ownKeys(target);
80
83
  }
81
- function createDataNode() {
82
- const [s, set] = solidJs.createSignal(undefined, {
84
+ function createDataNode(value, equals) {
85
+ const [s, set] = solidJs.createSignal(value, equals ? {
86
+ internal: true
87
+ } : {
83
88
  equals: false,
84
89
  internal: true
85
90
  });
@@ -90,12 +95,14 @@ const proxyTraps$1 = {
90
95
  get(target, property, receiver) {
91
96
  if (property === $RAW) return target;
92
97
  if (property === solidJs.$PROXY) return receiver;
93
- const value = target[property];
94
- if (property === $NODE || property === "__proto__") return value;
95
98
  if (property === solidJs.$TRACK) return trackSelf(target);
96
- if (solidJs.getListener() && (typeof value !== "function" || target.hasOwnProperty(property))) {
97
- const nodes = getDataNodes(target);
98
- (nodes[property] || (nodes[property] = createDataNode()))();
99
+ const nodes = getDataNodes(target);
100
+ const tracked = nodes[property];
101
+ let value = tracked ? nodes[property]() : target[property];
102
+ if (property === $NODE || property === "__proto__") return value;
103
+ if (!tracked) {
104
+ const desc = Object.getOwnPropertyDescriptor(target, property);
105
+ if (solidJs.getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getDataNode(nodes, property, value)();
99
106
  }
100
107
  return isWrappable(value) ? wrap$1(value) : value;
101
108
  },
@@ -110,15 +117,15 @@ const proxyTraps$1 = {
110
117
  };
111
118
  function setProperty(state, property, value) {
112
119
  if (state[property] === value) return;
113
- const array = Array.isArray(state);
120
+ const prev = state[property];
114
121
  const len = state.length;
115
122
  if (value === undefined) {
116
123
  delete state[property];
117
124
  } else state[property] = value;
118
125
  let nodes = getDataNodes(state),
119
126
  node;
120
- (node = nodes[property]) && node.$();
121
- if (array && state.length !== len) (node = nodes.length) && node.$();
127
+ if (node = getDataNode(nodes, property, prev)) node.$(() => value);
128
+ if (Array.isArray(state) && state.length !== len) (node = getDataNode(nodes, "length", len)) && node.$(state.length);
122
129
  (node = nodes._) && node.$();
123
130
  }
124
131
  function mergeStoreNode(state, value) {
@@ -201,14 +208,17 @@ const proxyTraps = {
201
208
  get(target, property, receiver) {
202
209
  if (property === $RAW) return target;
203
210
  if (property === solidJs.$PROXY) return receiver;
204
- const value = target[property];
205
- if (property === $NODE || property === "__proto__") return value;
206
211
  if (property === solidJs.$TRACK) return trackSelf(target);
207
- if (solidJs.getListener() && (typeof value !== "function" || target.hasOwnProperty(property))) {
208
- const nodes = getDataNodes(target);
209
- (nodes[property] || (nodes[property] = createDataNode()))();
210
- } else if (value != null && typeof value === "function" && value === Array.prototype[property]) {
211
- return (...args) => solidJs.batch(() => Array.prototype[property].apply(receiver, args));
212
+ const nodes = getDataNodes(target);
213
+ const tracked = nodes[property];
214
+ let value = tracked ? nodes[property]() : target[property];
215
+ if (property === $NODE || property === "__proto__") return value;
216
+ if (!tracked) {
217
+ const desc = Object.getOwnPropertyDescriptor(target, property);
218
+ const isFunction = typeof value !== "function";
219
+ if (solidJs.getListener() && (isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getDataNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {
220
+ return (...args) => solidJs.batch(() => Array.prototype[property].apply(receiver, args));
221
+ }
212
222
  }
213
223
  return isWrappable(value) ? wrap(value) : value;
214
224
  },
@@ -56,6 +56,9 @@ function getDataNodes(target) {
56
56
  });
57
57
  return nodes;
58
58
  }
59
+ function getDataNode(nodes, property, value) {
60
+ return nodes[property] || (nodes[property] = createDataNode(value, true));
61
+ }
59
62
  function proxyDescriptor(target, property) {
60
63
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
61
64
  if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE || property === $NAME) return desc;
@@ -74,8 +77,10 @@ function ownKeys(target) {
74
77
  trackSelf(target);
75
78
  return Reflect.ownKeys(target);
76
79
  }
77
- function createDataNode() {
78
- const [s, set] = createSignal(undefined, {
80
+ function createDataNode(value, equals) {
81
+ const [s, set] = createSignal(value, equals ? {
82
+ internal: true
83
+ } : {
79
84
  equals: false,
80
85
  internal: true
81
86
  });
@@ -86,12 +91,14 @@ const proxyTraps$1 = {
86
91
  get(target, property, receiver) {
87
92
  if (property === $RAW) return target;
88
93
  if (property === $PROXY) return receiver;
89
- const value = target[property];
90
- if (property === $NODE || property === "__proto__") return value;
91
94
  if (property === $TRACK) return trackSelf(target);
92
- if (getListener() && (typeof value !== "function" || target.hasOwnProperty(property))) {
93
- const nodes = getDataNodes(target);
94
- (nodes[property] || (nodes[property] = createDataNode()))();
95
+ const nodes = getDataNodes(target);
96
+ const tracked = nodes[property];
97
+ let value = tracked ? nodes[property]() : target[property];
98
+ if (property === $NODE || property === "__proto__") return value;
99
+ if (!tracked) {
100
+ const desc = Object.getOwnPropertyDescriptor(target, property);
101
+ if (getListener() && (typeof value !== "function" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getDataNode(nodes, property, value)();
95
102
  }
96
103
  return isWrappable(value) ? wrap$1(value) : value;
97
104
  },
@@ -106,15 +113,15 @@ const proxyTraps$1 = {
106
113
  };
107
114
  function setProperty(state, property, value) {
108
115
  if (state[property] === value) return;
109
- const array = Array.isArray(state);
116
+ const prev = state[property];
110
117
  const len = state.length;
111
118
  if (value === undefined) {
112
119
  delete state[property];
113
120
  } else state[property] = value;
114
121
  let nodes = getDataNodes(state),
115
122
  node;
116
- (node = nodes[property]) && node.$();
117
- if (array && state.length !== len) (node = nodes.length) && node.$();
123
+ if (node = getDataNode(nodes, property, prev)) node.$(() => value);
124
+ if (Array.isArray(state) && state.length !== len) (node = getDataNode(nodes, "length", len)) && node.$(state.length);
118
125
  (node = nodes._) && node.$();
119
126
  }
120
127
  function mergeStoreNode(state, value) {
@@ -197,14 +204,17 @@ const proxyTraps = {
197
204
  get(target, property, receiver) {
198
205
  if (property === $RAW) return target;
199
206
  if (property === $PROXY) return receiver;
200
- const value = target[property];
201
- if (property === $NODE || property === "__proto__") return value;
202
207
  if (property === $TRACK) return trackSelf(target);
203
- if (getListener() && (typeof value !== "function" || target.hasOwnProperty(property))) {
204
- const nodes = getDataNodes(target);
205
- (nodes[property] || (nodes[property] = createDataNode()))();
206
- } else if (value != null && typeof value === "function" && value === Array.prototype[property]) {
207
- return (...args) => batch(() => Array.prototype[property].apply(receiver, args));
208
+ const nodes = getDataNodes(target);
209
+ const tracked = nodes[property];
210
+ let value = tracked ? nodes[property]() : target[property];
211
+ if (property === $NODE || property === "__proto__") return value;
212
+ if (!tracked) {
213
+ const desc = Object.getOwnPropertyDescriptor(target, property);
214
+ const isFunction = typeof value !== "function";
215
+ if (getListener() && (isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getDataNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {
216
+ return (...args) => batch(() => Array.prototype[property].apply(receiver, args));
217
+ }
208
218
  }
209
219
  return isWrappable(value) ? wrap(value) : value;
210
220
  },
@@ -1,4 +1,3 @@
1
- import { Accessor } from "../..";
2
1
  export declare const $RAW: unique symbol, $NODE: unique symbol, $NAME: unique symbol;
3
2
  export declare type StoreNode = Record<PropertyKey, any>;
4
3
  export declare namespace SolidStore {
@@ -10,12 +9,10 @@ export declare type Store<T> = DeepReadonly<T>;
10
9
  export declare function isWrappable(obj: any): any;
11
10
  export declare function unwrap<T extends StoreNode>(item: any, set?: Set<unknown>): T;
12
11
  export declare function getDataNodes(target: StoreNode): any;
12
+ export declare function getDataNode(nodes: Record<string, any>, property: string | symbol, value: any): any;
13
13
  export declare function proxyDescriptor(target: StoreNode, property: PropertyKey): PropertyDescriptor | undefined;
14
14
  export declare function trackSelf(target: StoreNode): void;
15
15
  export declare function ownKeys(target: StoreNode): (string | symbol)[];
16
- export declare function createDataNode(): Accessor<void> & {
17
- $: () => void;
18
- };
19
16
  export declare function setProperty(state: StoreNode, property: PropertyKey, value: any): void;
20
17
  export declare function updatePath(current: StoreNode, path: any[], traversed?: PropertyKey[]): void;
21
18
  export declare type DeepReadonly<T> = 0 extends 1 & T ? T : T extends NotWrappable ? T : {