@solidjs/universal 2.0.0-experimental.1 → 2.0.0-experimental.4

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2016-2023 Ryan Carniato
3
+ Copyright (c) 2016-2025 Ryan Carniato
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/dist/dev.cjs CHANGED
@@ -64,7 +64,7 @@ function createRenderer({
64
64
  doNotUnwrap
65
65
  });
66
66
  if (doNotUnwrap && typeof value === "function") return value;
67
- if (multi && value != null && !Array.isArray(value)) value = [value];
67
+ if (multi && !Array.isArray(value)) value = [value != null ? value : ""];
68
68
  if (Array.isArray(value)) {
69
69
  for (let i = 0, len = value.length; i < len; i++) {
70
70
  const item = value[i],
package/dist/dev.js CHANGED
@@ -1,4 +1,12 @@
1
- import { createRoot, merge, createRenderEffect, createMemo, createComponent, untrack, flatten } from 'solid-js';
1
+ import {
2
+ createRoot,
3
+ merge,
4
+ createRenderEffect,
5
+ createMemo,
6
+ createComponent,
7
+ untrack,
8
+ flatten
9
+ } from "solid-js";
2
10
 
3
11
  function createRenderer({
4
12
  createElement,
@@ -17,9 +25,14 @@ function createRenderer({
17
25
  if (multi && !initial) initial = [];
18
26
  if (typeof accessor !== "function") {
19
27
  accessor = normalize(accessor, multi, true);
20
- if (typeof accessor !== "function") return insertExpression(parent, accessor, initial, marker);
28
+ if (typeof accessor !== "function")
29
+ return insertExpression(parent, accessor, initial, marker);
21
30
  }
22
- createRenderEffect(() => normalize(accessor, multi), (value, current) => insertExpression(parent, value, current, marker), initial);
31
+ createRenderEffect(
32
+ () => normalize(accessor, multi),
33
+ (value, current) => insertExpression(parent, value, current, marker),
34
+ initial
35
+ );
23
36
  }
24
37
  function insertExpression(parent, value, current, marker) {
25
38
  if (value === current) return;
@@ -45,7 +58,7 @@ function createRenderer({
45
58
  } else if (current == null) {
46
59
  appendNodes(parent, value);
47
60
  } else {
48
- reconcileArrays(parent, multi && current || [getFirstChild(parent)], value);
61
+ reconcileArrays(parent, (multi && current) || [getFirstChild(parent)], value);
49
62
  }
50
63
  }
51
64
  } else {
@@ -62,7 +75,7 @@ function createRenderer({
62
75
  doNotUnwrap
63
76
  });
64
77
  if (doNotUnwrap && typeof value === "function") return value;
65
- if (multi && value != null && !Array.isArray(value)) value = [value];
78
+ if (multi && !Array.isArray(value)) value = [value != null ? value : ""];
66
79
  if (Array.isArray(value)) {
67
80
  for (let i = 0, len = value.length; i < len; i++) {
68
81
  const item = value[i],
@@ -91,7 +104,8 @@ function createRenderer({
91
104
  bEnd--;
92
105
  }
93
106
  if (aEnd === aStart) {
94
- const node = bEnd < bLength ? bStart ? getNextSibling(b[bStart - 1]) : b[bEnd - bStart] : after;
107
+ const node =
108
+ bEnd < bLength ? (bStart ? getNextSibling(b[bStart - 1]) : b[bEnd - bStart]) : after;
95
109
  while (bStart < bEnd) insertNode(parentNode, b[bStart++], node);
96
110
  } else if (bEnd === bStart) {
97
111
  while (aStart < aEnd) {
@@ -131,7 +145,7 @@ function createRenderer({
131
145
  function cleanChildren(parent, current, marker, replacement) {
132
146
  if (marker === undefined) {
133
147
  let removed;
134
- while (removed = getFirstChild(parent)) removeNode(parent, removed);
148
+ while ((removed = getFirstChild(parent))) removeNode(parent, removed);
135
149
  replacement && insertNode(parent, replacement);
136
150
  return "";
137
151
  }
@@ -141,7 +155,11 @@ function createRenderer({
141
155
  const el = current[i];
142
156
  if (replacement !== el) {
143
157
  const isParent = getParentNode(el) === parent;
144
- if (replacement && !inserted && !i) isParent ? replaceNode(parent, replacement, el) : insertNode(parent, replacement, marker);else isParent && removeNode(parent, el);
158
+ if (replacement && !inserted && !i)
159
+ isParent
160
+ ? replaceNode(parent, replacement, el)
161
+ : insertNode(parent, replacement, marker);
162
+ else isParent && removeNode(parent, el);
145
163
  } else inserted = true;
146
164
  }
147
165
  } else if (replacement) insertNode(parent, replacement, marker);
@@ -157,28 +175,37 @@ function createRenderer({
157
175
  const prevProps = {};
158
176
  props || (props = {});
159
177
  if (!skipChildren) {
160
- createRenderEffect(() => normalize(props.children), value => {
161
- insertExpression(node, value, prevProps.children);
162
- prevProps.children = value;
163
- });
178
+ createRenderEffect(
179
+ () => normalize(props.children),
180
+ value => {
181
+ insertExpression(node, value, prevProps.children);
182
+ prevProps.children = value;
183
+ }
184
+ );
164
185
  }
165
- createRenderEffect(() => props.ref && props.ref(node), () => ({}));
166
- createRenderEffect(() => {
167
- const newProps = {};
168
- for (const prop in props) {
169
- if (prop === "children" || prop === "ref") continue;
170
- const value = props[prop];
171
- if (value === prevProps[prop]) continue;
172
- newProps[prop] = value;
173
- }
174
- return newProps;
175
- }, props => {
176
- for (const prop in props) {
177
- const value = props[prop];
178
- setProperty(node, prop, value, prevProps[prop]);
179
- prevProps[prop] = value;
186
+ createRenderEffect(
187
+ () => props.ref && props.ref(node),
188
+ () => ({})
189
+ );
190
+ createRenderEffect(
191
+ () => {
192
+ const newProps = {};
193
+ for (const prop in props) {
194
+ if (prop === "children" || prop === "ref") continue;
195
+ const value = props[prop];
196
+ if (value === prevProps[prop]) continue;
197
+ newProps[prop] = value;
198
+ }
199
+ return newProps;
200
+ },
201
+ props => {
202
+ for (const prop in props) {
203
+ const value = props[prop];
204
+ setProperty(node, prop, value, prevProps[prop]);
205
+ prevProps[prop] = value;
206
+ }
180
207
  }
181
- });
208
+ );
182
209
  return prevProps;
183
210
  }
184
211
  return {
@@ -64,7 +64,7 @@ function createRenderer({
64
64
  doNotUnwrap
65
65
  });
66
66
  if (doNotUnwrap && typeof value === "function") return value;
67
- if (multi && value != null && !Array.isArray(value)) value = [value];
67
+ if (multi && !Array.isArray(value)) value = [value != null ? value : ""];
68
68
  if (Array.isArray(value)) {
69
69
  for (let i = 0, len = value.length; i < len; i++) {
70
70
  const item = value[i],
package/dist/universal.js CHANGED
@@ -1,4 +1,12 @@
1
- import { createRoot, merge, createRenderEffect, createMemo, createComponent, untrack, flatten } from 'solid-js';
1
+ import {
2
+ createRoot,
3
+ merge,
4
+ createRenderEffect,
5
+ createMemo,
6
+ createComponent,
7
+ untrack,
8
+ flatten
9
+ } from "solid-js";
2
10
 
3
11
  function createRenderer({
4
12
  createElement,
@@ -17,9 +25,14 @@ function createRenderer({
17
25
  if (multi && !initial) initial = [];
18
26
  if (typeof accessor !== "function") {
19
27
  accessor = normalize(accessor, multi, true);
20
- if (typeof accessor !== "function") return insertExpression(parent, accessor, initial, marker);
28
+ if (typeof accessor !== "function")
29
+ return insertExpression(parent, accessor, initial, marker);
21
30
  }
22
- createRenderEffect(() => normalize(accessor, multi), (value, current) => insertExpression(parent, value, current, marker), initial);
31
+ createRenderEffect(
32
+ () => normalize(accessor, multi),
33
+ (value, current) => insertExpression(parent, value, current, marker),
34
+ initial
35
+ );
23
36
  }
24
37
  function insertExpression(parent, value, current, marker) {
25
38
  if (value === current) return;
@@ -45,7 +58,7 @@ function createRenderer({
45
58
  } else if (current == null) {
46
59
  appendNodes(parent, value);
47
60
  } else {
48
- reconcileArrays(parent, multi && current || [getFirstChild(parent)], value);
61
+ reconcileArrays(parent, (multi && current) || [getFirstChild(parent)], value);
49
62
  }
50
63
  }
51
64
  } else {
@@ -62,7 +75,7 @@ function createRenderer({
62
75
  doNotUnwrap
63
76
  });
64
77
  if (doNotUnwrap && typeof value === "function") return value;
65
- if (multi && value != null && !Array.isArray(value)) value = [value];
78
+ if (multi && !Array.isArray(value)) value = [value != null ? value : ""];
66
79
  if (Array.isArray(value)) {
67
80
  for (let i = 0, len = value.length; i < len; i++) {
68
81
  const item = value[i],
@@ -91,7 +104,8 @@ function createRenderer({
91
104
  bEnd--;
92
105
  }
93
106
  if (aEnd === aStart) {
94
- const node = bEnd < bLength ? bStart ? getNextSibling(b[bStart - 1]) : b[bEnd - bStart] : after;
107
+ const node =
108
+ bEnd < bLength ? (bStart ? getNextSibling(b[bStart - 1]) : b[bEnd - bStart]) : after;
95
109
  while (bStart < bEnd) insertNode(parentNode, b[bStart++], node);
96
110
  } else if (bEnd === bStart) {
97
111
  while (aStart < aEnd) {
@@ -131,7 +145,7 @@ function createRenderer({
131
145
  function cleanChildren(parent, current, marker, replacement) {
132
146
  if (marker === undefined) {
133
147
  let removed;
134
- while (removed = getFirstChild(parent)) removeNode(parent, removed);
148
+ while ((removed = getFirstChild(parent))) removeNode(parent, removed);
135
149
  replacement && insertNode(parent, replacement);
136
150
  return "";
137
151
  }
@@ -141,7 +155,11 @@ function createRenderer({
141
155
  const el = current[i];
142
156
  if (replacement !== el) {
143
157
  const isParent = getParentNode(el) === parent;
144
- if (replacement && !inserted && !i) isParent ? replaceNode(parent, replacement, el) : insertNode(parent, replacement, marker);else isParent && removeNode(parent, el);
158
+ if (replacement && !inserted && !i)
159
+ isParent
160
+ ? replaceNode(parent, replacement, el)
161
+ : insertNode(parent, replacement, marker);
162
+ else isParent && removeNode(parent, el);
145
163
  } else inserted = true;
146
164
  }
147
165
  } else if (replacement) insertNode(parent, replacement, marker);
@@ -157,28 +175,37 @@ function createRenderer({
157
175
  const prevProps = {};
158
176
  props || (props = {});
159
177
  if (!skipChildren) {
160
- createRenderEffect(() => normalize(props.children), value => {
161
- insertExpression(node, value, prevProps.children);
162
- prevProps.children = value;
163
- });
178
+ createRenderEffect(
179
+ () => normalize(props.children),
180
+ value => {
181
+ insertExpression(node, value, prevProps.children);
182
+ prevProps.children = value;
183
+ }
184
+ );
164
185
  }
165
- createRenderEffect(() => props.ref && props.ref(node), () => ({}));
166
- createRenderEffect(() => {
167
- const newProps = {};
168
- for (const prop in props) {
169
- if (prop === "children" || prop === "ref") continue;
170
- const value = props[prop];
171
- if (value === prevProps[prop]) continue;
172
- newProps[prop] = value;
173
- }
174
- return newProps;
175
- }, props => {
176
- for (const prop in props) {
177
- const value = props[prop];
178
- setProperty(node, prop, value, prevProps[prop]);
179
- prevProps[prop] = value;
186
+ createRenderEffect(
187
+ () => props.ref && props.ref(node),
188
+ () => ({})
189
+ );
190
+ createRenderEffect(
191
+ () => {
192
+ const newProps = {};
193
+ for (const prop in props) {
194
+ if (prop === "children" || prop === "ref") continue;
195
+ const value = props[prop];
196
+ if (value === prevProps[prop]) continue;
197
+ newProps[prop] = value;
198
+ }
199
+ return newProps;
200
+ },
201
+ props => {
202
+ for (const prop in props) {
203
+ const value = props[prop];
204
+ setProperty(node, prop, value, prevProps[prop]);
205
+ prevProps[prop] = value;
206
+ }
180
207
  }
181
- });
208
+ );
182
209
  return prevProps;
183
210
  }
184
211
  return {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@solidjs/universal",
3
3
  "description": "Solid's universal runtime for creating custom renderers",
4
- "version": "2.0.0-experimental.1",
4
+ "version": "2.0.0-experimental.4",
5
5
  "author": "Ryan Carniato",
6
6
  "license": "MIT",
7
7
  "homepage": "https://solidjs.com",
@@ -37,10 +37,10 @@
37
37
  "./types/*": "./types/*"
38
38
  },
39
39
  "peerDependencies": {
40
- "solid-js": "^2.0.0-experimental.1"
40
+ "solid-js": "^2.0.0-experimental.4"
41
41
  },
42
42
  "devDependencies": {
43
- "solid-js": "2.0.0-experimental.1"
43
+ "solid-js": "2.0.0-experimental.4"
44
44
  },
45
45
  "scripts": {
46
46
  "build": "npm-run-all -nl build:*",
package/types/index.d.ts DELETED
@@ -1,29 +0,0 @@
1
- export interface RendererOptions<NodeType> {
2
- createElement(tag: string): NodeType;
3
- createTextNode(value: string): NodeType;
4
- replaceText(textNode: NodeType, value: string): void;
5
- isTextNode(node: NodeType): boolean;
6
- setProperty<T>(node: NodeType, name: string, value: T, prev?: T): void;
7
- insertNode(parent: NodeType, node: NodeType, anchor?: NodeType): void;
8
- removeNode(parent: NodeType, node: NodeType): void;
9
- getParentNode(node: NodeType): NodeType | undefined;
10
- getFirstChild(node: NodeType): NodeType | undefined;
11
- getNextSibling(node: NodeType): NodeType | undefined;
12
- }
13
-
14
- export interface Renderer<NodeType> {
15
- render(code: () => NodeType, node: NodeType): () => void;
16
- effect<T>(fn: (prev?: T) => T, effect: (value: T, prev?: T) => void, init?: T): void;
17
- memo<T>(fn: () => T, equal: boolean): () => T;
18
- createComponent<T>(Comp: (props: T) => NodeType, props: T): NodeType;
19
- createElement(tag: string): NodeType;
20
- createTextNode(value: string): NodeType;
21
- insertNode(parent: NodeType, node: NodeType, anchor?: NodeType): void;
22
- insert<T>(parent: any, accessor: (() => T) | T, marker?: any | null): NodeType;
23
- spread<T>(node: any, accessor: (() => T) | T, skipChildren?: Boolean): void;
24
- setProp<T>(node: NodeType, name: string, value: T, prev?: T): T;
25
- mergeProps(...sources: unknown[]): unknown;
26
- use<A, T>(fn: (element: NodeType, arg: A) => T, element: NodeType, arg: A): T;
27
- }
28
-
29
- export function createRenderer<NodeType>(options: RendererOptions<NodeType>): Renderer<NodeType>;