solid-js 1.4.7 → 1.5.0-beta.0
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/dev.cjs +113 -114
- package/dist/dev.js +113 -114
- package/dist/server.cjs +28 -23
- package/dist/server.js +28 -23
- package/dist/solid.cjs +113 -112
- package/dist/solid.js +113 -112
- package/h/jsx-runtime/types/jsx.d.ts +6 -1401
- package/html/dist/html.cjs +34 -59
- package/html/dist/html.js +34 -59
- package/package.json +2 -2
- package/store/dist/dev.cjs +40 -22
- package/store/dist/dev.js +40 -22
- package/store/dist/store.cjs +40 -22
- package/store/dist/store.js +40 -22
- package/store/types/store.d.ts +1 -1
- package/types/jsx.d.ts +194 -1580
- package/types/reactive/observable.d.ts +7 -2
- package/types/reactive/signal.d.ts +42 -13
- package/types/render/component.d.ts +21 -6
- package/types/server/reactive.d.ts +1 -0
- package/types/server/rendering.d.ts +2 -2
- package/universal/types/universal.d.ts +3 -3
- package/web/dist/dev.cjs +3 -3
- package/web/dist/dev.js +3 -3
- package/web/dist/server.cjs +34 -69
- package/web/dist/server.js +34 -69
- package/web/dist/web.cjs +3 -3
- package/web/dist/web.js +3 -3
- package/web/types/index.d.ts +4 -5
- package/web/types/server-mock.d.ts +4 -2
package/web/dist/server.js
CHANGED
|
@@ -4,6 +4,7 @@ export { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch,
|
|
|
4
4
|
const booleans = ["allowfullscreen", "async", "autofocus", "autoplay", "checked", "controls", "default", "disabled", "formnovalidate", "hidden", "indeterminate", "ismap", "loop", "multiple", "muted", "nomodule", "novalidate", "open", "playsinline", "readonly", "required", "reversed", "seamless", "selected"];
|
|
5
5
|
const BooleanAttributes = /*#__PURE__*/new Set(booleans);
|
|
6
6
|
/*#__PURE__*/new Set(["className", "value", "readOnly", "formNoValidate", "isMap", "noModule", "playsInline", ...booleans]);
|
|
7
|
+
const ChildProperties = /*#__PURE__*/new Set(["innerHTML", "textContent", "innerText", "children"]);
|
|
7
8
|
const Aliases = {
|
|
8
9
|
className: "class",
|
|
9
10
|
htmlFor: "for"
|
|
@@ -229,8 +230,7 @@ function stringifyString(str) {
|
|
|
229
230
|
return result;
|
|
230
231
|
}
|
|
231
232
|
|
|
232
|
-
const REPLACE_SCRIPT = `function $df(e,t,d,l){d=document.getElementById(e),(l=document.getElementById("pl-"+e))&&l.replaceWith(...d.childNodes),d.remove(),_$HY.set(e,t||
|
|
233
|
-
const FRAGMENT_REPLACE = /<!\[([\d-]+)\]>/;
|
|
233
|
+
const REPLACE_SCRIPT = `function $df(e,t,d,l){d=document.getElementById(e),(l=document.getElementById("pl-"+e))&&l.replaceWith(...d.childNodes),d.remove(),_$HY.set(e,t||"$$$")}`;
|
|
234
234
|
function renderToString(code, options = {}) {
|
|
235
235
|
let scripts = "";
|
|
236
236
|
sharedConfig.context = {
|
|
@@ -249,70 +249,20 @@ function renderToString(code, options = {}) {
|
|
|
249
249
|
return html;
|
|
250
250
|
}
|
|
251
251
|
function renderToStringAsync(code, options = {}) {
|
|
252
|
-
let scripts = "";
|
|
253
252
|
const {
|
|
254
|
-
nonce,
|
|
255
|
-
renderId,
|
|
256
253
|
timeoutMs = 30000
|
|
257
254
|
} = options;
|
|
258
|
-
const dedupe = new WeakMap();
|
|
259
|
-
const context = sharedConfig.context = {
|
|
260
|
-
id: renderId || "",
|
|
261
|
-
count: 0,
|
|
262
|
-
resources: {},
|
|
263
|
-
suspense: {},
|
|
264
|
-
assets: [],
|
|
265
|
-
async: true,
|
|
266
|
-
nonce,
|
|
267
|
-
writeResource(id, p, error) {
|
|
268
|
-
if (error) return scripts += `_$HY.set("${id}", ${serializeError(p)});`;
|
|
269
|
-
if (!p || typeof p !== "object" || !("then" in p)) return scripts += serializeSet(dedupe, id, p) + ";";
|
|
270
|
-
p.then(d => scripts += serializeSet(dedupe, id, d) + ";").catch(() => scripts += `_$HY.set("${id}", {});`);
|
|
271
|
-
}
|
|
272
|
-
};
|
|
273
255
|
let timeoutHandle;
|
|
274
256
|
const timeout = new Promise((_, reject) => {
|
|
275
257
|
timeoutHandle = setTimeout(() => reject("renderToString timed out"), timeoutMs);
|
|
276
258
|
});
|
|
277
|
-
|
|
278
|
-
return new Promise(resolve => {
|
|
279
|
-
const registry = new Map();
|
|
280
|
-
const cache = Object.create(null);
|
|
281
|
-
sharedConfig.context.registerFragment = register;
|
|
282
|
-
const rendered = fn();
|
|
283
|
-
if (!registry.size) resolve(rendered);
|
|
284
|
-
function register(key) {
|
|
285
|
-
if (!registry.has(key)) registry.set(key, []);
|
|
286
|
-
return (value = "", error) => {
|
|
287
|
-
if (!registry.has(key)) return;
|
|
288
|
-
cache[key] = value;
|
|
289
|
-
registry.delete(key);
|
|
290
|
-
if (waitForFragments(registry, key)) return;
|
|
291
|
-
if (error) scripts += `_$HY.set("${key}", Promise.resolve(${serializeError(error)}));`;else scripts += `_$HY.set("${key}", null);`;
|
|
292
|
-
if (!registry.size) Promise.resolve().then(() => {
|
|
293
|
-
let source = resolveSSRNode(rendered);
|
|
294
|
-
let final = "";
|
|
295
|
-
let match;
|
|
296
|
-
while (match = source.match(FRAGMENT_REPLACE)) {
|
|
297
|
-
final += source.substring(0, match.index);
|
|
298
|
-
source = cache[match[1]] + source.substring(match.index + match[0].length);
|
|
299
|
-
}
|
|
300
|
-
resolve(final + source);
|
|
301
|
-
});
|
|
302
|
-
return true;
|
|
303
|
-
};
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
return Promise.race([asyncWrap(() => escape(code())), timeout]).then(res => {
|
|
259
|
+
return Promise.race([renderToStream(code, options), timeout]).then(html => {
|
|
308
260
|
clearTimeout(timeoutHandle);
|
|
309
|
-
let html = injectAssets(context.assets, resolveSSRNode(res));
|
|
310
|
-
if (scripts.length) html = injectScripts(html, scripts, nonce);
|
|
311
261
|
return html;
|
|
312
262
|
});
|
|
313
263
|
}
|
|
314
264
|
function renderToStream(code, options = {}) {
|
|
315
|
-
|
|
265
|
+
let {
|
|
316
266
|
nonce,
|
|
317
267
|
onCompleteShell,
|
|
318
268
|
onCompleteAll,
|
|
@@ -337,13 +287,13 @@ function renderToStream(code, options = {}) {
|
|
|
337
287
|
};
|
|
338
288
|
const pushTask = task => {
|
|
339
289
|
tasks.push(task);
|
|
340
|
-
if (!scheduled) {
|
|
290
|
+
if (!scheduled && firstFlushed) {
|
|
341
291
|
Promise.resolve().then(writeTasks);
|
|
342
292
|
scheduled = true;
|
|
343
293
|
}
|
|
344
294
|
};
|
|
345
295
|
const writeTasks = () => {
|
|
346
|
-
if (tasks.length && !completed) {
|
|
296
|
+
if (tasks.length && !completed && firstFlushed) {
|
|
347
297
|
buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>${tasks.join(";")}</script>`);
|
|
348
298
|
tasks.length = 0;
|
|
349
299
|
}
|
|
@@ -363,7 +313,6 @@ function renderToStream(code, options = {}) {
|
|
|
363
313
|
id: renderId || "",
|
|
364
314
|
count: 0,
|
|
365
315
|
async: true,
|
|
366
|
-
streaming: true,
|
|
367
316
|
resources: {},
|
|
368
317
|
suspense: {},
|
|
369
318
|
assets: [],
|
|
@@ -391,7 +340,7 @@ function renderToStream(code, options = {}) {
|
|
|
391
340
|
if ((value !== undefined || error) && !completed) {
|
|
392
341
|
if (!firstFlushed) {
|
|
393
342
|
Promise.resolve().then(() => html = replacePlaceholder(html, key, value !== undefined ? value : ""));
|
|
394
|
-
pushTask(`${keys.length ? keys.map(k => `_$HY.unset("${k}");`) : ""}_$HY.set("${key}",${error ? serializeError(error) : "
|
|
343
|
+
pushTask(`${keys.length ? keys.map(k => `_$HY.unset("${k}");`) : ""}_$HY.set("${key}",${error ? serializeError(error) : '"$$$"'})`);
|
|
395
344
|
} else {
|
|
396
345
|
buffer.write(`<div hidden id="${key}">${value !== undefined ? value : " "}</div>`);
|
|
397
346
|
pushTask(`${keys.length ? keys.map(k => `_$HY.unset("${k}")`).join(";") + ";" : ""}$df("${key}"${error ? "," + serializeError(error) : ""})${!scriptFlushed ? ";" + REPLACE_SCRIPT : ""}`);
|
|
@@ -399,7 +348,7 @@ function renderToStream(code, options = {}) {
|
|
|
399
348
|
}
|
|
400
349
|
}
|
|
401
350
|
}
|
|
402
|
-
|
|
351
|
+
Promise.resolve().then(checkEnd);
|
|
403
352
|
return true;
|
|
404
353
|
};
|
|
405
354
|
}
|
|
@@ -418,6 +367,22 @@ function renderToStream(code, options = {}) {
|
|
|
418
367
|
});
|
|
419
368
|
}
|
|
420
369
|
return {
|
|
370
|
+
then(fn) {
|
|
371
|
+
function complete() {
|
|
372
|
+
doShell();
|
|
373
|
+
let mapped = "";
|
|
374
|
+
for (let i = 0, len = tmp.length; i < len; i++) mapped += tmp[i];
|
|
375
|
+
fn(mapped);
|
|
376
|
+
}
|
|
377
|
+
if (onCompleteAll) {
|
|
378
|
+
ogComplete = onCompleteAll;
|
|
379
|
+
onCompleteAll = options => {
|
|
380
|
+
ogComplete(options);
|
|
381
|
+
complete();
|
|
382
|
+
};
|
|
383
|
+
} else onCompleteAll = complete;
|
|
384
|
+
checkEnd();
|
|
385
|
+
},
|
|
421
386
|
pipe(w) {
|
|
422
387
|
Promise.allSettled(blockingResources).then(() => {
|
|
423
388
|
doShell();
|
|
@@ -514,16 +479,15 @@ function ssrStyle(value) {
|
|
|
514
479
|
}
|
|
515
480
|
return result;
|
|
516
481
|
}
|
|
517
|
-
function
|
|
518
|
-
let result = ""
|
|
519
|
-
if (props == null) return results;
|
|
482
|
+
function ssrElement(tag, props, children, needsId) {
|
|
483
|
+
let result = `<${tag}${needsId ? ssrHydrationKey() : ""} `;
|
|
520
484
|
if (typeof props === "function") props = props();
|
|
521
485
|
const keys = Object.keys(props);
|
|
522
486
|
let classResolved;
|
|
523
487
|
for (let i = 0; i < keys.length; i++) {
|
|
524
488
|
const prop = keys[i];
|
|
525
|
-
if (prop ===
|
|
526
|
-
|
|
489
|
+
if (ChildProperties.has(prop) && children === undefined) {
|
|
490
|
+
children = prop === "innerHTML" ? props[prop] : escape(props[prop]);
|
|
527
491
|
continue;
|
|
528
492
|
}
|
|
529
493
|
const value = props[prop];
|
|
@@ -543,7 +507,9 @@ function ssrSpread(props, isSVG, skipChildren) {
|
|
|
543
507
|
}
|
|
544
508
|
if (i !== keys.length - 1) result += " ";
|
|
545
509
|
}
|
|
546
|
-
return
|
|
510
|
+
return {
|
|
511
|
+
t: result + `>${resolveSSRNode(children)}</${tag}>`
|
|
512
|
+
};
|
|
547
513
|
}
|
|
548
514
|
function ssrAttribute(key, value, isBoolean) {
|
|
549
515
|
return isBoolean ? value ? " " + key : "" : value != null ? ` ${key}="${value}"` : "";
|
|
@@ -615,7 +581,7 @@ function generateHydrationScript({
|
|
|
615
581
|
eventNames = ["click", "input"],
|
|
616
582
|
nonce
|
|
617
583
|
} = {}) {
|
|
618
|
-
return `<script${nonce ? ` nonce="${nonce}"` : ""}>var e,t;e=window._$HY||(_$HY={events:[],completed:new WeakSet,r:{}}),t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),["${eventNames.join('","')}"].forEach((o=>document.addEventListener(o,(o=>{let s=o.composedPath&&o.composedPath()[0]||o.target,a=t(s);a&&!e.completed.has(a)&&e.events.push([a,o])})))),e.init=(t,o)=>{e.r[t]=[new Promise(((e,t)=>o=e)),o]},e.set=(t,o,s)=>{(s=e.r[t])&&s[1](o),e.r[t]=[o]},e.unset=t=>{delete e.r[t]},e.load=
|
|
584
|
+
return `<script${nonce ? ` nonce="${nonce}"` : ""}>var e,t;e=window._$HY||(_$HY={events:[],completed:new WeakSet,r:{}}),t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),["${eventNames.join('","')}"].forEach((o=>document.addEventListener(o,(o=>{let s=o.composedPath&&o.composedPath()[0]||o.target,a=t(s);a&&!e.completed.has(a)&&e.events.push([a,o])})))),e.init=(t,o)=>{e.r[t]=[new Promise(((e,t)=>o=e)),o]},e.set=(t,o,s)=>{(s=e.r[t])&&s[1](o),e.r[t]=[o]},e.unset=t=>{delete e.r[t]},e.load=t=>e.r[t];</script><!--xs-->`;
|
|
619
585
|
}
|
|
620
586
|
function injectAssets(assets, html) {
|
|
621
587
|
for (let i = 0; i < assets.length; i++) {
|
|
@@ -719,8 +685,7 @@ function Dynamic(props) {
|
|
|
719
685
|
t = typeof comp;
|
|
720
686
|
if (comp) {
|
|
721
687
|
if (t === "function") return comp(others);else if (t === "string") {
|
|
722
|
-
|
|
723
|
-
return ssr([`<${comp}`, ' ', ">", `</${comp}>`], ssrHydrationKey(), ssrSpread(sOthers), escape(local.children || ""));
|
|
688
|
+
return ssrElement(comp, others, undefined, true);
|
|
724
689
|
}
|
|
725
690
|
}
|
|
726
691
|
}
|
|
@@ -728,4 +693,4 @@ function Portal(props) {
|
|
|
728
693
|
return "";
|
|
729
694
|
}
|
|
730
695
|
|
|
731
|
-
export { Assets, Dynamic, HydrationScript, NoHydration, Portal, escape, generateHydrationScript, getHydrationKey, isServer, pipeToNodeWritable, pipeToWritable, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, spread, ssr, ssrAttribute, ssrClassList,
|
|
696
|
+
export { Assets, Dynamic, HydrationScript, NoHydration, Portal, escape, generateHydrationScript, getHydrationKey, isServer, pipeToNodeWritable, pipeToWritable, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrStyle };
|
package/web/dist/web.cjs
CHANGED
|
@@ -518,12 +518,12 @@ function renderToStream(fn, options) {
|
|
|
518
518
|
throwInBrowser(renderToStream);
|
|
519
519
|
}
|
|
520
520
|
function ssr(template, ...nodes) {}
|
|
521
|
-
function
|
|
521
|
+
function ssrElement(name, props, children, needsId) {}
|
|
522
522
|
function ssrClassList(value) {}
|
|
523
523
|
function ssrStyle(value) {}
|
|
524
|
-
function ssrSpread(accessor) {}
|
|
525
524
|
function ssrAttribute(key, value) {}
|
|
526
525
|
function ssrHydrationKey() {}
|
|
526
|
+
function resolveSSRNode(node) {}
|
|
527
527
|
function escape(html) {}
|
|
528
528
|
function generateHydrationScript() {}
|
|
529
529
|
|
|
@@ -681,8 +681,8 @@ exports.spread = spread;
|
|
|
681
681
|
exports.ssr = ssr;
|
|
682
682
|
exports.ssrAttribute = ssrAttribute;
|
|
683
683
|
exports.ssrClassList = ssrClassList;
|
|
684
|
+
exports.ssrElement = ssrElement;
|
|
684
685
|
exports.ssrHydrationKey = ssrHydrationKey;
|
|
685
|
-
exports.ssrSpread = ssrSpread;
|
|
686
686
|
exports.ssrStyle = ssrStyle;
|
|
687
687
|
exports.style = style;
|
|
688
688
|
exports.template = template;
|
package/web/dist/web.js
CHANGED
|
@@ -515,12 +515,12 @@ function renderToStream(fn, options) {
|
|
|
515
515
|
throwInBrowser(renderToStream);
|
|
516
516
|
}
|
|
517
517
|
function ssr(template, ...nodes) {}
|
|
518
|
-
function
|
|
518
|
+
function ssrElement(name, props, children, needsId) {}
|
|
519
519
|
function ssrClassList(value) {}
|
|
520
520
|
function ssrStyle(value) {}
|
|
521
|
-
function ssrSpread(accessor) {}
|
|
522
521
|
function ssrAttribute(key, value) {}
|
|
523
522
|
function ssrHydrationKey() {}
|
|
523
|
+
function resolveSSRNode(node) {}
|
|
524
524
|
function escape(html) {}
|
|
525
525
|
function generateHydrationScript() {}
|
|
526
526
|
|
|
@@ -587,4 +587,4 @@ function Dynamic(props) {
|
|
|
587
587
|
});
|
|
588
588
|
}
|
|
589
589
|
|
|
590
|
-
export { Aliases, Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Assets as HydrationScript, NoHydration, Portal, PropAliases, Properties, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, delegateEvents, dynamicProperty, escape, generateHydrationScript, getHydrationKey, getNextElement, getNextMarker, getNextMatch, hydrate, innerHTML, insert, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, spread, ssr, ssrAttribute, ssrClassList,
|
|
590
|
+
export { Aliases, Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Assets as HydrationScript, NoHydration, Portal, PropAliases, Properties, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, delegateEvents, dynamicProperty, escape, generateHydrationScript, getHydrationKey, getNextElement, getNextMarker, getNextMatch, hydrate, innerHTML, insert, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrStyle, style, template };
|
package/web/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { hydrate as hydrateCore } from "./client";
|
|
2
|
-
import {
|
|
2
|
+
import { JSX, Accessor, ComponentProps, ValidComponent } from "../..";
|
|
3
3
|
export * from "./client";
|
|
4
4
|
export { For, Show, Suspense, SuspenseList, Switch, Match, Index, ErrorBoundary, mergeProps } from "../..";
|
|
5
5
|
export * from "./server-mock";
|
|
@@ -21,9 +21,8 @@ export declare function Portal<T extends boolean = false, S extends boolean = fa
|
|
|
21
21
|
} : {}) & (S extends true ? SVGGElement : HTMLDivElement)) => void);
|
|
22
22
|
children: JSX.Element;
|
|
23
23
|
}): Text;
|
|
24
|
-
declare type DynamicProps<T> = T & {
|
|
25
|
-
|
|
26
|
-
component?: Component<T> | string | keyof JSX.IntrinsicElements;
|
|
24
|
+
declare type DynamicProps<T extends ValidComponent> = ComponentProps<T> & {
|
|
25
|
+
component: T | undefined;
|
|
27
26
|
};
|
|
28
27
|
/**
|
|
29
28
|
* renders an arbitrary custom or native component and passes the other props
|
|
@@ -32,4 +31,4 @@ declare type DynamicProps<T> = T & {
|
|
|
32
31
|
* ```
|
|
33
32
|
* @description https://www.solidjs.com/docs/latest/api#%3Cdynamic%3E
|
|
34
33
|
*/
|
|
35
|
-
export declare function Dynamic<T>(props: DynamicProps<T>): Accessor<JSX.Element>;
|
|
34
|
+
export declare function Dynamic<T extends ValidComponent>(props: DynamicProps<T>): Accessor<JSX.Element>;
|
|
@@ -25,16 +25,18 @@ export declare function renderToStream<T>(fn: () => T, options?: {
|
|
|
25
25
|
export declare function ssr(template: string[] | string, ...nodes: any[]): {
|
|
26
26
|
t: string;
|
|
27
27
|
};
|
|
28
|
-
export declare function
|
|
28
|
+
export declare function ssrElement(name: string, props: any, children: any, needsId: boolean): {
|
|
29
|
+
t: string;
|
|
30
|
+
};
|
|
29
31
|
export declare function ssrClassList(value: {
|
|
30
32
|
[k: string]: boolean;
|
|
31
33
|
}): string;
|
|
32
34
|
export declare function ssrStyle(value: {
|
|
33
35
|
[k: string]: string;
|
|
34
36
|
}): string;
|
|
35
|
-
export declare function ssrSpread(accessor: any): () => string;
|
|
36
37
|
export declare function ssrAttribute(key: string, value: boolean): string;
|
|
37
38
|
export declare function ssrHydrationKey(): string;
|
|
39
|
+
export declare function resolveSSRNode(node: any): string;
|
|
38
40
|
export declare function escape(html: string): string;
|
|
39
41
|
export declare function generateHydrationScript(): string;
|
|
40
42
|
export declare type LegacyResults = {
|