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.
@@ -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: (v: T) => void;
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
- export interface Resource<T> extends Accessor<T> {
202
- loading: boolean;
203
- error: any;
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, O extends ResourceOptions<T | undefined> | undefined, K = 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, typeof options>;
257
- export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T, typeof options>;
258
- export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined>): ResourceReturn<T | undefined, typeof options>;
259
- export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T, typeof options>;
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 keyof JSX.IntrinsicElements | Component<any>> = T extends Component<infer P> ? P : T extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[T] : {};
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 ? undefined extends U[K] ? Exclude<U[K], undefined> | T[K] : U[K] : T[K];
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 ? undefined extends U[K] ? Exclude<U[K], undefined> | T[K] : U[K] : U[K];
74
+ [K in keyof U]: K extends keyof T ? DistributeOverride<U[K], T[K]> : U[K];
73
75
  } : T & U : T & U;
74
- export declare type MergeProps<T extends unknown[], Curr = {}> = T extends [
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
- ] ? MergeProps<Rest, Override<Curr, Next>> : Curr;
78
- export declare function mergeProps<T extends [unknown, ...unknown[]]>(...sources: T): MergeProps<T>;
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 ComponentProps<T extends keyof JSX.IntrinsicElements | Component> = T extends Component<infer P> ? P : T extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[T] : {};
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 resolveSSRNode(node) {}
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 resolveSSRNode(node) {}
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, ssrHydrationKey, ssrSpread, ssrStyle, style, template };
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 };
@@ -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||null)}`;
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
- function asyncWrap(fn) {
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
- const {
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) : "null"})`);
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
- if (firstFlushed) checkEnd();
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 ssrSpread(props, isSVG, skipChildren) {
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 === "children") {
529
- !skipChildren && console.warn(`SSR currently does not support spread children.`);
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 result;
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=(t,o)=>{if(o=e.r[t])return o[0]};</script><!--xs-->`;
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
- const [local, sOthers] = solidJs.splitProps(others, ["children"]);
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;