solid-js 1.4.5 → 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 -116
- package/dist/dev.js +113 -116
- package/dist/server.cjs +28 -23
- package/dist/server.js +28 -23
- package/dist/solid.cjs +113 -114
- package/dist/solid.js +113 -114
- 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 +41 -23
- package/store/dist/dev.js +41 -23
- package/store/dist/store.cjs +41 -23
- package/store/dist/store.js +41 -23
- package/store/types/store.d.ts +1 -1
- package/types/index.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 +6 -7
- package/web/dist/dev.js +6 -7
- package/web/dist/server.cjs +35 -69
- package/web/dist/server.js +35 -69
- package/web/dist/web.cjs +6 -7
- package/web/dist/web.js +6 -7
- 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
|
@@ -446,13 +446,12 @@ function normalizeIncomingArray(normalized, array, current, unwrap) {
|
|
|
446
446
|
let dynamic = false;
|
|
447
447
|
for (let i = 0, len = array.length; i < len; i++) {
|
|
448
448
|
let item = array[i],
|
|
449
|
-
prev = current && current[i]
|
|
450
|
-
t;
|
|
449
|
+
prev = current && current[i];
|
|
451
450
|
if (item instanceof Node) {
|
|
452
451
|
normalized.push(item);
|
|
453
452
|
} else if (item == null || item === true || item === false) ; else if (Array.isArray(item)) {
|
|
454
453
|
dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;
|
|
455
|
-
} else if ((
|
|
454
|
+
} else if ((typeof item) === "function") {
|
|
456
455
|
if (unwrap) {
|
|
457
456
|
while (typeof item === "function") item = item();
|
|
458
457
|
dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], prev) || dynamic;
|
|
@@ -461,7 +460,7 @@ function normalizeIncomingArray(normalized, array, current, unwrap) {
|
|
|
461
460
|
dynamic = true;
|
|
462
461
|
}
|
|
463
462
|
} else {
|
|
464
|
-
const value =
|
|
463
|
+
const value = String(item);
|
|
465
464
|
if (prev && prev.nodeType === 3 && prev.data === value) {
|
|
466
465
|
normalized.push(prev);
|
|
467
466
|
} else normalized.push(document.createTextNode(value));
|
|
@@ -520,12 +519,12 @@ function renderToStream(fn, options) {
|
|
|
520
519
|
throwInBrowser(renderToStream);
|
|
521
520
|
}
|
|
522
521
|
function ssr(template, ...nodes) {}
|
|
523
|
-
function
|
|
522
|
+
function ssrElement(name, props, children, needsId) {}
|
|
524
523
|
function ssrClassList(value) {}
|
|
525
524
|
function ssrStyle(value) {}
|
|
526
|
-
function ssrSpread(accessor) {}
|
|
527
525
|
function ssrAttribute(key, value) {}
|
|
528
526
|
function ssrHydrationKey() {}
|
|
527
|
+
function resolveSSRNode(node) {}
|
|
529
528
|
function escape(html) {}
|
|
530
529
|
function generateHydrationScript() {}
|
|
531
530
|
|
|
@@ -686,8 +685,8 @@ exports.spread = spread;
|
|
|
686
685
|
exports.ssr = ssr;
|
|
687
686
|
exports.ssrAttribute = ssrAttribute;
|
|
688
687
|
exports.ssrClassList = ssrClassList;
|
|
688
|
+
exports.ssrElement = ssrElement;
|
|
689
689
|
exports.ssrHydrationKey = ssrHydrationKey;
|
|
690
|
-
exports.ssrSpread = ssrSpread;
|
|
691
690
|
exports.ssrStyle = ssrStyle;
|
|
692
691
|
exports.style = style;
|
|
693
692
|
exports.template = template;
|
package/web/dist/dev.js
CHANGED
|
@@ -443,13 +443,12 @@ function normalizeIncomingArray(normalized, array, current, unwrap) {
|
|
|
443
443
|
let dynamic = false;
|
|
444
444
|
for (let i = 0, len = array.length; i < len; i++) {
|
|
445
445
|
let item = array[i],
|
|
446
|
-
prev = current && current[i]
|
|
447
|
-
t;
|
|
446
|
+
prev = current && current[i];
|
|
448
447
|
if (item instanceof Node) {
|
|
449
448
|
normalized.push(item);
|
|
450
449
|
} else if (item == null || item === true || item === false) ; else if (Array.isArray(item)) {
|
|
451
450
|
dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;
|
|
452
|
-
} else if ((
|
|
451
|
+
} else if ((typeof item) === "function") {
|
|
453
452
|
if (unwrap) {
|
|
454
453
|
while (typeof item === "function") item = item();
|
|
455
454
|
dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], prev) || dynamic;
|
|
@@ -458,7 +457,7 @@ function normalizeIncomingArray(normalized, array, current, unwrap) {
|
|
|
458
457
|
dynamic = true;
|
|
459
458
|
}
|
|
460
459
|
} else {
|
|
461
|
-
const value =
|
|
460
|
+
const value = String(item);
|
|
462
461
|
if (prev && prev.nodeType === 3 && prev.data === value) {
|
|
463
462
|
normalized.push(prev);
|
|
464
463
|
} else normalized.push(document.createTextNode(value));
|
|
@@ -517,12 +516,12 @@ function renderToStream(fn, options) {
|
|
|
517
516
|
throwInBrowser(renderToStream);
|
|
518
517
|
}
|
|
519
518
|
function ssr(template, ...nodes) {}
|
|
520
|
-
function
|
|
519
|
+
function ssrElement(name, props, children, needsId) {}
|
|
521
520
|
function ssrClassList(value) {}
|
|
522
521
|
function ssrStyle(value) {}
|
|
523
|
-
function ssrSpread(accessor) {}
|
|
524
522
|
function ssrAttribute(key, value) {}
|
|
525
523
|
function ssrHydrationKey() {}
|
|
524
|
+
function resolveSSRNode(node) {}
|
|
526
525
|
function escape(html) {}
|
|
527
526
|
function generateHydrationScript() {}
|
|
528
527
|
|
|
@@ -592,4 +591,4 @@ function Dynamic(props) {
|
|
|
592
591
|
});
|
|
593
592
|
}
|
|
594
593
|
|
|
595
|
-
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,69 +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 Set();
|
|
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
|
-
registry.add(key);
|
|
289
|
-
return (value = "", error) => {
|
|
290
|
-
if (!registry.has(key)) return;
|
|
291
|
-
cache[key] = value;
|
|
292
|
-
registry.delete(key);
|
|
293
|
-
if (error) scripts += `_$HY.set("${key}", Promise.resolve(${serializeError(error)}));`;else scripts += `_$HY.set("${key}", null);`;
|
|
294
|
-
if (!registry.size) Promise.resolve().then(() => {
|
|
295
|
-
let source = resolveSSRNode(rendered);
|
|
296
|
-
let final = "";
|
|
297
|
-
let match;
|
|
298
|
-
while (match = source.match(FRAGMENT_REPLACE)) {
|
|
299
|
-
final += source.substring(0, match.index);
|
|
300
|
-
source = cache[match[1]] + source.substring(match.index + match[0].length);
|
|
301
|
-
}
|
|
302
|
-
resolve(final + source);
|
|
303
|
-
});
|
|
304
|
-
return true;
|
|
305
|
-
};
|
|
306
|
-
}
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
return Promise.race([asyncWrap(() => escape(code())), timeout]).then(res => {
|
|
262
|
+
return Promise.race([renderToStream(code, options), timeout]).then(html => {
|
|
310
263
|
clearTimeout(timeoutHandle);
|
|
311
|
-
let html = injectAssets(context.assets, resolveSSRNode(res));
|
|
312
|
-
if (scripts.length) html = injectScripts(html, scripts, nonce);
|
|
313
264
|
return html;
|
|
314
265
|
});
|
|
315
266
|
}
|
|
316
267
|
function renderToStream(code, options = {}) {
|
|
317
|
-
|
|
268
|
+
let {
|
|
318
269
|
nonce,
|
|
319
270
|
onCompleteShell,
|
|
320
271
|
onCompleteAll,
|
|
@@ -339,13 +290,13 @@ function renderToStream(code, options = {}) {
|
|
|
339
290
|
};
|
|
340
291
|
const pushTask = task => {
|
|
341
292
|
tasks.push(task);
|
|
342
|
-
if (!scheduled) {
|
|
293
|
+
if (!scheduled && firstFlushed) {
|
|
343
294
|
Promise.resolve().then(writeTasks);
|
|
344
295
|
scheduled = true;
|
|
345
296
|
}
|
|
346
297
|
};
|
|
347
298
|
const writeTasks = () => {
|
|
348
|
-
if (tasks.length && !completed) {
|
|
299
|
+
if (tasks.length && !completed && firstFlushed) {
|
|
349
300
|
buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>${tasks.join(";")}</script>`);
|
|
350
301
|
tasks.length = 0;
|
|
351
302
|
}
|
|
@@ -365,7 +316,6 @@ function renderToStream(code, options = {}) {
|
|
|
365
316
|
id: renderId || "",
|
|
366
317
|
count: 0,
|
|
367
318
|
async: true,
|
|
368
|
-
streaming: true,
|
|
369
319
|
resources: {},
|
|
370
320
|
suspense: {},
|
|
371
321
|
assets: [],
|
|
@@ -393,15 +343,15 @@ function renderToStream(code, options = {}) {
|
|
|
393
343
|
if ((value !== undefined || error) && !completed) {
|
|
394
344
|
if (!firstFlushed) {
|
|
395
345
|
Promise.resolve().then(() => html = replacePlaceholder(html, key, value !== undefined ? value : ""));
|
|
396
|
-
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) : '"$$$"'})`);
|
|
397
347
|
} else {
|
|
398
348
|
buffer.write(`<div hidden id="${key}">${value !== undefined ? value : " "}</div>`);
|
|
399
|
-
pushTask(`${keys.length ? keys.map(k => `_$HY.unset("${k}")`).join(";") : ""}$df("${key}"${error ? "," + serializeError(error) : ""})${!scriptFlushed ? ";" + REPLACE_SCRIPT : ""}`);
|
|
349
|
+
pushTask(`${keys.length ? keys.map(k => `_$HY.unset("${k}")`).join(";") + ";" : ""}$df("${key}"${error ? "," + serializeError(error) : ""})${!scriptFlushed ? ";" + REPLACE_SCRIPT : ""}`);
|
|
400
350
|
scriptFlushed = true;
|
|
401
351
|
}
|
|
402
352
|
}
|
|
403
353
|
}
|
|
404
|
-
|
|
354
|
+
Promise.resolve().then(checkEnd);
|
|
405
355
|
return true;
|
|
406
356
|
};
|
|
407
357
|
}
|
|
@@ -420,6 +370,22 @@ function renderToStream(code, options = {}) {
|
|
|
420
370
|
});
|
|
421
371
|
}
|
|
422
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
|
+
},
|
|
423
389
|
pipe(w) {
|
|
424
390
|
Promise.allSettled(blockingResources).then(() => {
|
|
425
391
|
doShell();
|
|
@@ -516,16 +482,15 @@ function ssrStyle(value) {
|
|
|
516
482
|
}
|
|
517
483
|
return result;
|
|
518
484
|
}
|
|
519
|
-
function
|
|
520
|
-
let result = ""
|
|
521
|
-
if (props == null) return results;
|
|
485
|
+
function ssrElement(tag, props, children, needsId) {
|
|
486
|
+
let result = `<${tag}${needsId ? ssrHydrationKey() : ""} `;
|
|
522
487
|
if (typeof props === "function") props = props();
|
|
523
488
|
const keys = Object.keys(props);
|
|
524
489
|
let classResolved;
|
|
525
490
|
for (let i = 0; i < keys.length; i++) {
|
|
526
491
|
const prop = keys[i];
|
|
527
|
-
if (prop ===
|
|
528
|
-
|
|
492
|
+
if (ChildProperties.has(prop) && children === undefined) {
|
|
493
|
+
children = prop === "innerHTML" ? props[prop] : escape(props[prop]);
|
|
529
494
|
continue;
|
|
530
495
|
}
|
|
531
496
|
const value = props[prop];
|
|
@@ -545,7 +510,9 @@ function ssrSpread(props, isSVG, skipChildren) {
|
|
|
545
510
|
}
|
|
546
511
|
if (i !== keys.length - 1) result += " ";
|
|
547
512
|
}
|
|
548
|
-
return
|
|
513
|
+
return {
|
|
514
|
+
t: result + `>${resolveSSRNode(children)}</${tag}>`
|
|
515
|
+
};
|
|
549
516
|
}
|
|
550
517
|
function ssrAttribute(key, value, isBoolean) {
|
|
551
518
|
return isBoolean ? value ? " " + key : "" : value != null ? ` ${key}="${value}"` : "";
|
|
@@ -617,7 +584,7 @@ function generateHydrationScript({
|
|
|
617
584
|
eventNames = ["click", "input"],
|
|
618
585
|
nonce
|
|
619
586
|
} = {}) {
|
|
620
|
-
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-->`;
|
|
621
588
|
}
|
|
622
589
|
function injectAssets(assets, html) {
|
|
623
590
|
for (let i = 0; i < assets.length; i++) {
|
|
@@ -721,8 +688,7 @@ function Dynamic(props) {
|
|
|
721
688
|
t = typeof comp;
|
|
722
689
|
if (comp) {
|
|
723
690
|
if (t === "function") return comp(others);else if (t === "string") {
|
|
724
|
-
|
|
725
|
-
return ssr([`<${comp}`, ' ', ">", `</${comp}>`], ssrHydrationKey(), ssrSpread(sOthers), escape(local.children || ""));
|
|
691
|
+
return ssrElement(comp, others, undefined, true);
|
|
726
692
|
}
|
|
727
693
|
}
|
|
728
694
|
}
|
|
@@ -789,6 +755,6 @@ exports.spread = spread;
|
|
|
789
755
|
exports.ssr = ssr;
|
|
790
756
|
exports.ssrAttribute = ssrAttribute;
|
|
791
757
|
exports.ssrClassList = ssrClassList;
|
|
758
|
+
exports.ssrElement = ssrElement;
|
|
792
759
|
exports.ssrHydrationKey = ssrHydrationKey;
|
|
793
|
-
exports.ssrSpread = ssrSpread;
|
|
794
760
|
exports.ssrStyle = ssrStyle;
|