solid-js 1.4.0-beta.3 → 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.
@@ -0,0 +1 @@
1
+ export * from "./types/jsx"
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.3",
4
+ "version": "1.4.0-beta.6",
5
5
  "author": "Ryan Carniato",
6
6
  "license": "MIT",
7
7
  "homepage": "https://solidjs.com",
@@ -27,13 +27,14 @@
27
27
  "web/types",
28
28
  "h/dist",
29
29
  "h/types",
30
+ "h/jsx-runtime/dist",
31
+ "h/jsx-runtime/types",
30
32
  "html/dist",
31
33
  "html/types",
32
34
  "universal/dist",
33
35
  "universal/types",
34
36
  "types",
35
- "jsx-runtime/dist",
36
- "jsx-runtime/types"
37
+ "jsx-runtime.d.ts"
37
38
  ],
38
39
  "exports": {
39
40
  ".": {
@@ -112,29 +113,29 @@
112
113
  "import": "./h/dist/h.js",
113
114
  "require": "./h/dist/h.cjs"
114
115
  },
116
+ "./h/jsx-runtime": {
117
+ "import": "./h/dist/jsx.js",
118
+ "require": "./h/dist/jsx.cjs"
119
+ },
115
120
  "./h/dist/*": "./h/dist/*",
116
121
  "./html": {
117
122
  "import": "./html/dist/html.js",
118
123
  "require": "./html/dist/html.cjs"
119
124
  },
120
- "./html/dist/*": "./html/dist/*",
121
- "./jsx-runtime": {
122
- "import": "./html/dist/jsx.js",
123
- "require": "./html/dist/jsx.cjs"
124
- }
125
+ "./html/dist/*": "./html/dist/*"
125
126
  },
126
127
  "scripts": {
127
128
  "prebuild": "npm run clean",
128
- "clean": "rimraf dist/ types/ coverage/ store/dist/ store/types/ web/dist/ web/types/ h/dist/ h/types/ html/dist/ html/types/",
129
+ "clean": "rimraf dist/ types/ coverage/ store/dist/ store/types/ web/dist/ web/types/ h/dist/ h/types/ h/jsx-runtime/dist h/jsx-runtime/types html/dist/ html/types/",
129
130
  "build": "npm-run-all -cnl build:*",
130
131
  "build:link": "symlink-dir . node_modules/solid-js",
131
- "build:js": "ncp ../../node_modules/dom-expressions/src/jsx.d.ts ./src/jsx.d.ts && rollup -c",
132
+ "build:js": "ncp ../../node_modules/dom-expressions/src/jsx.d.ts ./src/jsx.d.ts && ncp ../../node_modules/dom-expressions/src/jsx-h.d.ts ./h/jsx-runtime/src/jsx.d.ts && rollup -c",
132
133
  "build:types": "tsc --project ./tsconfig.build.json",
133
134
  "build:types-store": "tsc --project ./store/tsconfig.build.json && tsconfig-replace-paths --project ./store/tsconfig.types.json",
134
135
  "build:types-web": "tsc --project ./web/tsconfig.build.json && tsconfig-replace-paths --project ./web/tsconfig.types.json",
135
136
  "build:types-html": "tsc --project ./html/tsconfig.json",
136
137
  "build:types-h": "tsc --project ./h/tsconfig.json",
137
- "build:types-jsx": "tsc --project ./jsx-runtime/tsconfig.json",
138
+ "build:types-jsx": "tsc --project ./h/jsx-runtime/tsconfig.json",
138
139
  "build:types-universal": "tsc --project ./universal/tsconfig.json",
139
140
  "bench": "node --allow-natives-syntax bench/bench.cjs",
140
141
  "test": "jest && npm run test:types",
@@ -150,5 +151,5 @@
150
151
  "compiler",
151
152
  "performance"
152
153
  ],
153
- "gitHead": "0919e999b84569a9d1d3b5cf4948f34952960784"
154
+ "gitHead": "dce1c4b0c4d7b47f6f8cb743173da3acfd831419"
154
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 : {