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
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { Accessor, Setter } from "./signal";
|
|
2
|
+
declare global {
|
|
3
|
+
interface SymbolConstructor {
|
|
4
|
+
readonly observable: symbol;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
2
7
|
export declare type ObservableObserver<T> = ((v: T) => void) | {
|
|
3
|
-
next
|
|
8
|
+
next?: (v: T) => void;
|
|
4
9
|
error?: (v: any) => void;
|
|
5
10
|
complete?: (v: boolean) => void;
|
|
6
11
|
};
|
|
@@ -15,10 +20,10 @@ export declare type ObservableObserver<T> = ((v: T) => void) | {
|
|
|
15
20
|
* description https://www.solidjs.com/docs/latest/api#observable
|
|
16
21
|
*/
|
|
17
22
|
export declare function observable<T>(input: Accessor<T>): {
|
|
18
|
-
[x: number]: () => any;
|
|
19
23
|
subscribe(observer: ObservableObserver<T>): {
|
|
20
24
|
unsubscribe(): void;
|
|
21
25
|
};
|
|
26
|
+
[Symbol.observable](): any;
|
|
22
27
|
};
|
|
23
28
|
export declare function from<T>(producer: ((setter: Setter<T>) => () => void) | {
|
|
24
29
|
subscribe: (fn: (v: T) => void) => (() => void) | {
|
|
@@ -5,10 +5,10 @@ export declare const equalFn: <T>(a: T, b: T) => boolean;
|
|
|
5
5
|
export declare const $PROXY: unique symbol;
|
|
6
6
|
export declare const $TRACK: unique symbol;
|
|
7
7
|
export declare const $DEVCOMP: unique symbol;
|
|
8
|
-
export declare const NOTPENDING: {};
|
|
9
8
|
export declare var Owner: Owner | null;
|
|
10
9
|
export declare let Transition: TransitionState | null;
|
|
11
10
|
declare let ExternalSourceFactory: ExternalSourceFactory | null;
|
|
11
|
+
declare let Pending: SignalState<any>[] | null;
|
|
12
12
|
declare global {
|
|
13
13
|
var _$afterUpdate: () => void;
|
|
14
14
|
var _$afterCreateRoot: (root: Owner) => void;
|
|
@@ -17,7 +17,6 @@ export interface SignalState<T> {
|
|
|
17
17
|
value?: T;
|
|
18
18
|
observers: Computation<any>[] | null;
|
|
19
19
|
observerSlots: number[] | null;
|
|
20
|
-
pending: T | {};
|
|
21
20
|
tValue?: T;
|
|
22
21
|
comparator?: (prev: T, next: T) => boolean;
|
|
23
22
|
name?: string;
|
|
@@ -198,11 +197,42 @@ export interface MemoOptions<T> extends EffectOptions {
|
|
|
198
197
|
*/
|
|
199
198
|
export declare function createMemo<Next extends Prev, Prev = Next>(fn: EffectFunction<undefined | NoInfer<Prev>, Next>): Accessor<Next>;
|
|
200
199
|
export declare function createMemo<Next extends Prev, Init = Next, Prev = Next>(fn: EffectFunction<Init | Prev, Next>, value: Init, options?: MemoOptions<Next>): Accessor<Next>;
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
200
|
+
interface Unresolved {
|
|
201
|
+
state: "unresolved";
|
|
202
|
+
loading: false;
|
|
203
|
+
error: undefined;
|
|
204
|
+
latest: undefined;
|
|
205
|
+
(): undefined;
|
|
206
|
+
}
|
|
207
|
+
interface Pending {
|
|
208
|
+
state: "pending";
|
|
209
|
+
loading: true;
|
|
210
|
+
error: undefined;
|
|
211
|
+
latest: undefined;
|
|
212
|
+
(): undefined;
|
|
213
|
+
}
|
|
214
|
+
interface Ready<T> {
|
|
215
|
+
state: "ready";
|
|
216
|
+
loading: false;
|
|
217
|
+
error: undefined;
|
|
204
218
|
latest: T;
|
|
219
|
+
(): T;
|
|
220
|
+
}
|
|
221
|
+
interface Refreshing<T> {
|
|
222
|
+
state: "refreshing";
|
|
223
|
+
loading: true;
|
|
224
|
+
error: undefined;
|
|
225
|
+
latest: T;
|
|
226
|
+
(): T;
|
|
227
|
+
}
|
|
228
|
+
interface Error {
|
|
229
|
+
state: "error";
|
|
230
|
+
loading: false;
|
|
231
|
+
error: any;
|
|
232
|
+
latest: undefined;
|
|
233
|
+
(): undefined;
|
|
205
234
|
}
|
|
235
|
+
export declare type Resource<T> = undefined extends T ? Unresolved | Pending | Ready<T> | Refreshing<T> | Error : Ready<T> | Refreshing<T> | Error;
|
|
206
236
|
export declare type ResourceActions<T> = {
|
|
207
237
|
mutate: Setter<T>;
|
|
208
238
|
refetch: (info?: unknown) => T | Promise<T> | undefined | null;
|
|
@@ -217,17 +247,16 @@ export declare type ResourceOptions<T> = undefined extends T ? {
|
|
|
217
247
|
initialValue?: T;
|
|
218
248
|
name?: string;
|
|
219
249
|
deferStream?: boolean;
|
|
250
|
+
store?: <T>(init: T) => [Accessor<T>, Setter<T>];
|
|
220
251
|
onHydrated?: <S, T>(k: S, info: ResourceFetcherInfo<T>) => void;
|
|
221
252
|
} : {
|
|
222
253
|
initialValue: T;
|
|
223
254
|
name?: string;
|
|
224
255
|
deferStream?: boolean;
|
|
256
|
+
store?: <T>(init: T) => [Accessor<T>, Setter<T>];
|
|
225
257
|
onHydrated?: <S, T>(k: S, info: ResourceFetcherInfo<T>) => void;
|
|
226
258
|
};
|
|
227
|
-
export declare type ResourceReturn<T,
|
|
228
|
-
Resource<O extends undefined | null ? T | undefined : NonNullable<O>["initialValue"] extends undefined ? T | undefined : T>,
|
|
229
|
-
ResourceActions<K>
|
|
230
|
-
];
|
|
259
|
+
export declare type ResourceReturn<T, K = T> = [Resource<T>, ResourceActions<K>];
|
|
231
260
|
/**
|
|
232
261
|
* Creates a resource that wraps a repeated promise in a reactive pattern:
|
|
233
262
|
* ```typescript
|
|
@@ -253,10 +282,10 @@ export declare type ResourceReturn<T, O extends ResourceOptions<T | undefined> |
|
|
|
253
282
|
*
|
|
254
283
|
* @description https://www.solidjs.com/docs/latest/api#createresource
|
|
255
284
|
*/
|
|
256
|
-
export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined>): ResourceReturn<T | undefined
|
|
257
|
-
export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T
|
|
258
|
-
export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined>): ResourceReturn<T | undefined
|
|
259
|
-
export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T
|
|
285
|
+
export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined>): ResourceReturn<T | undefined>;
|
|
286
|
+
export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T>;
|
|
287
|
+
export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined>): ResourceReturn<T | undefined>;
|
|
288
|
+
export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T>;
|
|
260
289
|
export interface DeferredOptions<T> {
|
|
261
290
|
equals?: false | ((prev: T, next: T) => boolean);
|
|
262
291
|
name?: string;
|
|
@@ -51,6 +51,7 @@ export declare type FlowProps<P = {}, C = JSX.Element> = P & {
|
|
|
51
51
|
export declare type FlowComponent<P = {}, C = JSX.Element> = Component<FlowProps<P, C>>;
|
|
52
52
|
/** @deprecated: use `ParentProps` instead */
|
|
53
53
|
export declare type PropsWithChildren<P = {}> = ParentProps<P>;
|
|
54
|
+
export declare type ValidComponent = keyof JSX.IntrinsicElements | Component<any> | (string & {});
|
|
54
55
|
/**
|
|
55
56
|
* Takes the props of the passed component and returns its type
|
|
56
57
|
*
|
|
@@ -58,7 +59,7 @@ export declare type PropsWithChildren<P = {}> = ParentProps<P>;
|
|
|
58
59
|
* ComponentProps<typeof Portal> // { mount?: Node; useShadow?: boolean; children: JSX.Element }
|
|
59
60
|
* ComponentProps<'div'> // JSX.HTMLAttributes<HTMLDivElement>
|
|
60
61
|
*/
|
|
61
|
-
export declare type ComponentProps<T extends
|
|
62
|
+
export declare type ComponentProps<T extends ValidComponent> = T extends Component<infer P> ? P : T extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[T] : Record<string, unknown>;
|
|
62
63
|
/**
|
|
63
64
|
* Type of `props.ref`, for use in `Component` or `props` typing.
|
|
64
65
|
*
|
|
@@ -66,16 +67,30 @@ export declare type ComponentProps<T extends keyof JSX.IntrinsicElements | Compo
|
|
|
66
67
|
*/
|
|
67
68
|
export declare type Ref<T> = T | ((val: T) => void);
|
|
68
69
|
export declare function createComponent<T>(Comp: Component<T>, props: T): JSX.Element;
|
|
70
|
+
declare type DistributeOverride<T, F> = T extends undefined ? F : T;
|
|
69
71
|
declare type Override<T, U> = T extends any ? U extends any ? {
|
|
70
|
-
[K in keyof T]: K extends keyof U ?
|
|
72
|
+
[K in keyof T]: K extends keyof U ? DistributeOverride<U[K], T[K]> : T[K];
|
|
71
73
|
} & {
|
|
72
|
-
[K in keyof U]: K extends keyof T ?
|
|
74
|
+
[K in keyof U]: K extends keyof T ? DistributeOverride<U[K], T[K]> : U[K];
|
|
73
75
|
} : T & U : T & U;
|
|
74
|
-
|
|
76
|
+
declare type OverrideSpread<T, U> = T extends any ? {
|
|
77
|
+
[K in keyof ({
|
|
78
|
+
[K in keyof T]: any;
|
|
79
|
+
} & {
|
|
80
|
+
[K in keyof U]?: any;
|
|
81
|
+
} & {
|
|
82
|
+
[K in U extends any ? keyof U : keyof U]?: any;
|
|
83
|
+
})]: K extends keyof T ? Exclude<U extends any ? U[K & keyof U] : never, undefined> | T[K] : U extends any ? U[K & keyof U] : never;
|
|
84
|
+
} : T & U;
|
|
85
|
+
declare type Simplify<T> = T extends any ? {
|
|
86
|
+
[K in keyof T]: T[K];
|
|
87
|
+
} : T;
|
|
88
|
+
declare type _MergeProps<T extends unknown[], Curr = {}> = T extends [
|
|
75
89
|
infer Next | (() => infer Next),
|
|
76
90
|
...infer Rest
|
|
77
|
-
] ?
|
|
78
|
-
export declare
|
|
91
|
+
] ? _MergeProps<Rest, Override<Curr, Next>> : T extends [...infer Rest, infer Next | (() => infer Next)] ? Override<_MergeProps<Rest, Curr>, Next> : T extends [] ? Curr : T extends (infer I | (() => infer I))[] ? OverrideSpread<Curr, I> : Curr;
|
|
92
|
+
export declare type MergeProps<T extends unknown[]> = Simplify<_MergeProps<T>>;
|
|
93
|
+
export declare function mergeProps<T extends unknown[]>(...sources: T): MergeProps<T>;
|
|
79
94
|
export declare type SplitProps<T, K extends (readonly (keyof T)[])[]> = [
|
|
80
95
|
...{
|
|
81
96
|
[P in keyof K]: P extends `${number}` ? Pick<T, Extract<K[P], readonly (keyof T)[]>[number]> : never;
|
|
@@ -4,6 +4,7 @@ export declare const $DEVCOMP: unique symbol;
|
|
|
4
4
|
export declare const DEV: {};
|
|
5
5
|
export declare type Accessor<T> = () => T;
|
|
6
6
|
export declare type Setter<T> = undefined extends T ? <U extends T>(value?: (U extends Function ? never : U) | ((prev?: T) => U)) => U : <U extends T>(value: (U extends Function ? never : U) | ((prev: T) => U)) => U;
|
|
7
|
+
export declare function castError(err: any): string | Error;
|
|
7
8
|
export declare let Owner: Owner | null;
|
|
8
9
|
interface Owner {
|
|
9
10
|
owner: Owner | null;
|
|
@@ -14,7 +14,8 @@ export declare type FlowProps<P = {}, C = JSX.Element> = P & {
|
|
|
14
14
|
};
|
|
15
15
|
export declare type FlowComponent<P = {}, C = JSX.Element> = Component<FlowProps<P, C>>;
|
|
16
16
|
export declare type Ref<T> = T | ((val: T) => void);
|
|
17
|
-
export declare type
|
|
17
|
+
export declare type ValidComponent = keyof JSX.IntrinsicElements | Component<any> | (string & {});
|
|
18
|
+
export declare type ComponentProps<T extends ValidComponent> = T extends Component<infer P> ? P : T extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[T] : Record<string, unknown>;
|
|
18
19
|
declare type SharedConfig = {
|
|
19
20
|
context?: HydrationContext;
|
|
20
21
|
};
|
|
@@ -123,7 +124,6 @@ declare type HydrationContext = {
|
|
|
123
124
|
suspense: Record<string, SuspenseContextType>;
|
|
124
125
|
registerFragment: (v: string) => (v?: string, err?: any) => boolean;
|
|
125
126
|
async?: boolean;
|
|
126
|
-
streaming?: boolean;
|
|
127
127
|
noHydrate: boolean;
|
|
128
128
|
};
|
|
129
129
|
export declare function SuspenseList(props: {
|
|
@@ -6,9 +6,9 @@ export interface RendererOptions<NodeType> {
|
|
|
6
6
|
setProperty<T>(node: NodeType, name: string, value: T, prev?: T): void;
|
|
7
7
|
insertNode(parent: NodeType, node: NodeType, anchor?: NodeType): void;
|
|
8
8
|
removeNode(parent: NodeType, node: NodeType): void;
|
|
9
|
-
getParentNode(node: NodeType): NodeType;
|
|
10
|
-
getFirstChild(node: NodeType): NodeType;
|
|
11
|
-
getNextSibling(node: NodeType): NodeType;
|
|
9
|
+
getParentNode(node: NodeType): NodeType | undefined;
|
|
10
|
+
getFirstChild(node: NodeType): NodeType | undefined;
|
|
11
|
+
getNextSibling(node: NodeType): NodeType | undefined;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export interface Renderer<NodeType> {
|
package/web/dist/dev.cjs
CHANGED
|
@@ -519,12 +519,12 @@ function renderToStream(fn, options) {
|
|
|
519
519
|
throwInBrowser(renderToStream);
|
|
520
520
|
}
|
|
521
521
|
function ssr(template, ...nodes) {}
|
|
522
|
-
function
|
|
522
|
+
function ssrElement(name, props, children, needsId) {}
|
|
523
523
|
function ssrClassList(value) {}
|
|
524
524
|
function ssrStyle(value) {}
|
|
525
|
-
function ssrSpread(accessor) {}
|
|
526
525
|
function ssrAttribute(key, value) {}
|
|
527
526
|
function ssrHydrationKey() {}
|
|
527
|
+
function resolveSSRNode(node) {}
|
|
528
528
|
function escape(html) {}
|
|
529
529
|
function generateHydrationScript() {}
|
|
530
530
|
|
|
@@ -685,8 +685,8 @@ exports.spread = spread;
|
|
|
685
685
|
exports.ssr = ssr;
|
|
686
686
|
exports.ssrAttribute = ssrAttribute;
|
|
687
687
|
exports.ssrClassList = ssrClassList;
|
|
688
|
+
exports.ssrElement = ssrElement;
|
|
688
689
|
exports.ssrHydrationKey = ssrHydrationKey;
|
|
689
|
-
exports.ssrSpread = ssrSpread;
|
|
690
690
|
exports.ssrStyle = ssrStyle;
|
|
691
691
|
exports.style = style;
|
|
692
692
|
exports.template = template;
|
package/web/dist/dev.js
CHANGED
|
@@ -516,12 +516,12 @@ function renderToStream(fn, options) {
|
|
|
516
516
|
throwInBrowser(renderToStream);
|
|
517
517
|
}
|
|
518
518
|
function ssr(template, ...nodes) {}
|
|
519
|
-
function
|
|
519
|
+
function ssrElement(name, props, children, needsId) {}
|
|
520
520
|
function ssrClassList(value) {}
|
|
521
521
|
function ssrStyle(value) {}
|
|
522
|
-
function ssrSpread(accessor) {}
|
|
523
522
|
function ssrAttribute(key, value) {}
|
|
524
523
|
function ssrHydrationKey() {}
|
|
524
|
+
function resolveSSRNode(node) {}
|
|
525
525
|
function escape(html) {}
|
|
526
526
|
function generateHydrationScript() {}
|
|
527
527
|
|
|
@@ -591,4 +591,4 @@ function Dynamic(props) {
|
|
|
591
591
|
});
|
|
592
592
|
}
|
|
593
593
|
|
|
594
|
-
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,
|
|
594
|
+
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/dist/server.cjs
CHANGED
|
@@ -7,6 +7,7 @@ var solidJs = require('solid-js');
|
|
|
7
7
|
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"];
|
|
8
8
|
const BooleanAttributes = /*#__PURE__*/new Set(booleans);
|
|
9
9
|
/*#__PURE__*/new Set(["className", "value", "readOnly", "formNoValidate", "isMap", "noModule", "playsInline", ...booleans]);
|
|
10
|
+
const ChildProperties = /*#__PURE__*/new Set(["innerHTML", "textContent", "innerText", "children"]);
|
|
10
11
|
const Aliases = {
|
|
11
12
|
className: "class",
|
|
12
13
|
htmlFor: "for"
|
|
@@ -232,8 +233,7 @@ function stringifyString(str) {
|
|
|
232
233
|
return result;
|
|
233
234
|
}
|
|
234
235
|
|
|
235
|
-
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||
|
|
236
|
-
const FRAGMENT_REPLACE = /<!\[([\d-]+)\]>/;
|
|
236
|
+
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||"$$$")}`;
|
|
237
237
|
function renderToString(code, options = {}) {
|
|
238
238
|
let scripts = "";
|
|
239
239
|
solidJs.sharedConfig.context = {
|
|
@@ -252,70 +252,20 @@ function renderToString(code, options = {}) {
|
|
|
252
252
|
return html;
|
|
253
253
|
}
|
|
254
254
|
function renderToStringAsync(code, options = {}) {
|
|
255
|
-
let scripts = "";
|
|
256
255
|
const {
|
|
257
|
-
nonce,
|
|
258
|
-
renderId,
|
|
259
256
|
timeoutMs = 30000
|
|
260
257
|
} = options;
|
|
261
|
-
const dedupe = new WeakMap();
|
|
262
|
-
const context = solidJs.sharedConfig.context = {
|
|
263
|
-
id: renderId || "",
|
|
264
|
-
count: 0,
|
|
265
|
-
resources: {},
|
|
266
|
-
suspense: {},
|
|
267
|
-
assets: [],
|
|
268
|
-
async: true,
|
|
269
|
-
nonce,
|
|
270
|
-
writeResource(id, p, error) {
|
|
271
|
-
if (error) return scripts += `_$HY.set("${id}", ${serializeError(p)});`;
|
|
272
|
-
if (!p || typeof p !== "object" || !("then" in p)) return scripts += serializeSet(dedupe, id, p) + ";";
|
|
273
|
-
p.then(d => scripts += serializeSet(dedupe, id, d) + ";").catch(() => scripts += `_$HY.set("${id}", {});`);
|
|
274
|
-
}
|
|
275
|
-
};
|
|
276
258
|
let timeoutHandle;
|
|
277
259
|
const timeout = new Promise((_, reject) => {
|
|
278
260
|
timeoutHandle = setTimeout(() => reject("renderToString timed out"), timeoutMs);
|
|
279
261
|
});
|
|
280
|
-
|
|
281
|
-
return new Promise(resolve => {
|
|
282
|
-
const registry = new Map();
|
|
283
|
-
const cache = Object.create(null);
|
|
284
|
-
solidJs.sharedConfig.context.registerFragment = register;
|
|
285
|
-
const rendered = fn();
|
|
286
|
-
if (!registry.size) resolve(rendered);
|
|
287
|
-
function register(key) {
|
|
288
|
-
if (!registry.has(key)) registry.set(key, []);
|
|
289
|
-
return (value = "", error) => {
|
|
290
|
-
if (!registry.has(key)) return;
|
|
291
|
-
cache[key] = value;
|
|
292
|
-
registry.delete(key);
|
|
293
|
-
if (waitForFragments(registry, key)) return;
|
|
294
|
-
if (error) scripts += `_$HY.set("${key}", Promise.resolve(${serializeError(error)}));`;else scripts += `_$HY.set("${key}", null);`;
|
|
295
|
-
if (!registry.size) Promise.resolve().then(() => {
|
|
296
|
-
let source = resolveSSRNode(rendered);
|
|
297
|
-
let final = "";
|
|
298
|
-
let match;
|
|
299
|
-
while (match = source.match(FRAGMENT_REPLACE)) {
|
|
300
|
-
final += source.substring(0, match.index);
|
|
301
|
-
source = cache[match[1]] + source.substring(match.index + match[0].length);
|
|
302
|
-
}
|
|
303
|
-
resolve(final + source);
|
|
304
|
-
});
|
|
305
|
-
return true;
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
return Promise.race([asyncWrap(() => escape(code())), timeout]).then(res => {
|
|
262
|
+
return Promise.race([renderToStream(code, options), timeout]).then(html => {
|
|
311
263
|
clearTimeout(timeoutHandle);
|
|
312
|
-
let html = injectAssets(context.assets, resolveSSRNode(res));
|
|
313
|
-
if (scripts.length) html = injectScripts(html, scripts, nonce);
|
|
314
264
|
return html;
|
|
315
265
|
});
|
|
316
266
|
}
|
|
317
267
|
function renderToStream(code, options = {}) {
|
|
318
|
-
|
|
268
|
+
let {
|
|
319
269
|
nonce,
|
|
320
270
|
onCompleteShell,
|
|
321
271
|
onCompleteAll,
|
|
@@ -340,13 +290,13 @@ function renderToStream(code, options = {}) {
|
|
|
340
290
|
};
|
|
341
291
|
const pushTask = task => {
|
|
342
292
|
tasks.push(task);
|
|
343
|
-
if (!scheduled) {
|
|
293
|
+
if (!scheduled && firstFlushed) {
|
|
344
294
|
Promise.resolve().then(writeTasks);
|
|
345
295
|
scheduled = true;
|
|
346
296
|
}
|
|
347
297
|
};
|
|
348
298
|
const writeTasks = () => {
|
|
349
|
-
if (tasks.length && !completed) {
|
|
299
|
+
if (tasks.length && !completed && firstFlushed) {
|
|
350
300
|
buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>${tasks.join(";")}</script>`);
|
|
351
301
|
tasks.length = 0;
|
|
352
302
|
}
|
|
@@ -366,7 +316,6 @@ function renderToStream(code, options = {}) {
|
|
|
366
316
|
id: renderId || "",
|
|
367
317
|
count: 0,
|
|
368
318
|
async: true,
|
|
369
|
-
streaming: true,
|
|
370
319
|
resources: {},
|
|
371
320
|
suspense: {},
|
|
372
321
|
assets: [],
|
|
@@ -394,7 +343,7 @@ function renderToStream(code, options = {}) {
|
|
|
394
343
|
if ((value !== undefined || error) && !completed) {
|
|
395
344
|
if (!firstFlushed) {
|
|
396
345
|
Promise.resolve().then(() => html = replacePlaceholder(html, key, value !== undefined ? value : ""));
|
|
397
|
-
pushTask(`${keys.length ? keys.map(k => `_$HY.unset("${k}");`) : ""}_$HY.set("${key}",${error ? serializeError(error) : "
|
|
346
|
+
pushTask(`${keys.length ? keys.map(k => `_$HY.unset("${k}");`) : ""}_$HY.set("${key}",${error ? serializeError(error) : '"$$$"'})`);
|
|
398
347
|
} else {
|
|
399
348
|
buffer.write(`<div hidden id="${key}">${value !== undefined ? value : " "}</div>`);
|
|
400
349
|
pushTask(`${keys.length ? keys.map(k => `_$HY.unset("${k}")`).join(";") + ";" : ""}$df("${key}"${error ? "," + serializeError(error) : ""})${!scriptFlushed ? ";" + REPLACE_SCRIPT : ""}`);
|
|
@@ -402,7 +351,7 @@ function renderToStream(code, options = {}) {
|
|
|
402
351
|
}
|
|
403
352
|
}
|
|
404
353
|
}
|
|
405
|
-
|
|
354
|
+
Promise.resolve().then(checkEnd);
|
|
406
355
|
return true;
|
|
407
356
|
};
|
|
408
357
|
}
|
|
@@ -421,6 +370,22 @@ function renderToStream(code, options = {}) {
|
|
|
421
370
|
});
|
|
422
371
|
}
|
|
423
372
|
return {
|
|
373
|
+
then(fn) {
|
|
374
|
+
function complete() {
|
|
375
|
+
doShell();
|
|
376
|
+
let mapped = "";
|
|
377
|
+
for (let i = 0, len = tmp.length; i < len; i++) mapped += tmp[i];
|
|
378
|
+
fn(mapped);
|
|
379
|
+
}
|
|
380
|
+
if (onCompleteAll) {
|
|
381
|
+
ogComplete = onCompleteAll;
|
|
382
|
+
onCompleteAll = options => {
|
|
383
|
+
ogComplete(options);
|
|
384
|
+
complete();
|
|
385
|
+
};
|
|
386
|
+
} else onCompleteAll = complete;
|
|
387
|
+
checkEnd();
|
|
388
|
+
},
|
|
424
389
|
pipe(w) {
|
|
425
390
|
Promise.allSettled(blockingResources).then(() => {
|
|
426
391
|
doShell();
|
|
@@ -517,16 +482,15 @@ function ssrStyle(value) {
|
|
|
517
482
|
}
|
|
518
483
|
return result;
|
|
519
484
|
}
|
|
520
|
-
function
|
|
521
|
-
let result = ""
|
|
522
|
-
if (props == null) return results;
|
|
485
|
+
function ssrElement(tag, props, children, needsId) {
|
|
486
|
+
let result = `<${tag}${needsId ? ssrHydrationKey() : ""} `;
|
|
523
487
|
if (typeof props === "function") props = props();
|
|
524
488
|
const keys = Object.keys(props);
|
|
525
489
|
let classResolved;
|
|
526
490
|
for (let i = 0; i < keys.length; i++) {
|
|
527
491
|
const prop = keys[i];
|
|
528
|
-
if (prop ===
|
|
529
|
-
|
|
492
|
+
if (ChildProperties.has(prop) && children === undefined) {
|
|
493
|
+
children = prop === "innerHTML" ? props[prop] : escape(props[prop]);
|
|
530
494
|
continue;
|
|
531
495
|
}
|
|
532
496
|
const value = props[prop];
|
|
@@ -546,7 +510,9 @@ function ssrSpread(props, isSVG, skipChildren) {
|
|
|
546
510
|
}
|
|
547
511
|
if (i !== keys.length - 1) result += " ";
|
|
548
512
|
}
|
|
549
|
-
return
|
|
513
|
+
return {
|
|
514
|
+
t: result + `>${resolveSSRNode(children)}</${tag}>`
|
|
515
|
+
};
|
|
550
516
|
}
|
|
551
517
|
function ssrAttribute(key, value, isBoolean) {
|
|
552
518
|
return isBoolean ? value ? " " + key : "" : value != null ? ` ${key}="${value}"` : "";
|
|
@@ -618,7 +584,7 @@ function generateHydrationScript({
|
|
|
618
584
|
eventNames = ["click", "input"],
|
|
619
585
|
nonce
|
|
620
586
|
} = {}) {
|
|
621
|
-
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=
|
|
587
|
+
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-->`;
|
|
622
588
|
}
|
|
623
589
|
function injectAssets(assets, html) {
|
|
624
590
|
for (let i = 0; i < assets.length; i++) {
|
|
@@ -722,8 +688,7 @@ function Dynamic(props) {
|
|
|
722
688
|
t = typeof comp;
|
|
723
689
|
if (comp) {
|
|
724
690
|
if (t === "function") return comp(others);else if (t === "string") {
|
|
725
|
-
|
|
726
|
-
return ssr([`<${comp}`, ' ', ">", `</${comp}>`], ssrHydrationKey(), ssrSpread(sOthers), escape(local.children || ""));
|
|
691
|
+
return ssrElement(comp, others, undefined, true);
|
|
727
692
|
}
|
|
728
693
|
}
|
|
729
694
|
}
|
|
@@ -790,6 +755,6 @@ exports.spread = spread;
|
|
|
790
755
|
exports.ssr = ssr;
|
|
791
756
|
exports.ssrAttribute = ssrAttribute;
|
|
792
757
|
exports.ssrClassList = ssrClassList;
|
|
758
|
+
exports.ssrElement = ssrElement;
|
|
793
759
|
exports.ssrHydrationKey = ssrHydrationKey;
|
|
794
|
-
exports.ssrSpread = ssrSpread;
|
|
795
760
|
exports.ssrStyle = ssrStyle;
|