solid-js 2.0.0-experimental.5 → 2.0.0-experimental.7

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/solid.cjs CHANGED
@@ -76,7 +76,7 @@ function from(producer, initialValue = undefined) {
76
76
  }
77
77
 
78
78
  const sharedConfig = {
79
- context: undefined,
79
+ hydrating: false,
80
80
  registry: undefined,
81
81
  done: false,
82
82
  getNextContextId() {
@@ -85,8 +85,90 @@ const sharedConfig = {
85
85
  return o.getNextChildId();
86
86
  }
87
87
  };
88
- function setHydrateContext(context) {
89
- sharedConfig.context = context;
88
+ function Suspense(props) {
89
+ if (!sharedConfig.hydrating) return signals.createSuspense(() => props.children, () => props.fallback);
90
+ return signals.createMemo(() => {
91
+ const o = signals.getOwner();
92
+ const id = o.id;
93
+ if (sharedConfig.hydrating && sharedConfig.has(id)) {
94
+ let ref = sharedConfig.load(id);
95
+ let p;
96
+ if (ref) {
97
+ if (typeof ref !== "object" || ref.s !== "success") p = ref;else sharedConfig.gather(id);
98
+ }
99
+ if (p) {
100
+ const [s, set] = signals.createSignal(undefined, {
101
+ equals: false
102
+ });
103
+ s();
104
+ if (p !== "$$f") {
105
+ p.then(() => {
106
+ sharedConfig.gather(id);
107
+ sharedConfig.hydrating = true;
108
+ set();
109
+ signals.flush();
110
+ sharedConfig.hydrating = false;
111
+ }, err => signals.runWithObserver(o, () => {
112
+ throw err;
113
+ }));
114
+ } else queueMicrotask(set);
115
+ return props.fallback;
116
+ }
117
+ }
118
+ return signals.createSuspense(() => props.children, () => props.fallback);
119
+ });
120
+ }
121
+ function createAsync(compute, value, options) {
122
+ if (!sharedConfig.hydrating) return signals.createAsync(compute, value, options);
123
+ return signals.createAsync(prev => {
124
+ if (!sharedConfig.hydrating) return compute(prev);
125
+ const o = signals.getOwner();
126
+ let initP;
127
+ if (sharedConfig.has(o.id)) initP = sharedConfig.load(o.id);
128
+ const init = initP?.value || initP;
129
+ return init ? (subFetch(compute, prev), init) : compute(prev);
130
+ }, value, options);
131
+ }
132
+ class MockPromise {
133
+ static all() {
134
+ return new MockPromise();
135
+ }
136
+ static allSettled() {
137
+ return new MockPromise();
138
+ }
139
+ static any() {
140
+ return new MockPromise();
141
+ }
142
+ static race() {
143
+ return new MockPromise();
144
+ }
145
+ static reject() {
146
+ return new MockPromise();
147
+ }
148
+ static resolve() {
149
+ return new MockPromise();
150
+ }
151
+ catch() {
152
+ return new MockPromise();
153
+ }
154
+ then() {
155
+ return new MockPromise();
156
+ }
157
+ finally() {
158
+ return new MockPromise();
159
+ }
160
+ }
161
+ function subFetch(fn, prev) {
162
+ const ogFetch = fetch;
163
+ const ogPromise = Promise;
164
+ try {
165
+ window.fetch = () => new MockPromise();
166
+ Promise = MockPromise;
167
+ return fn(prev);
168
+ } finally {
169
+ window.fetch = ogFetch;
170
+ Promise = ogPromise;
171
+ }
90
172
  }
91
173
 
92
174
  function enableHydration() {
@@ -98,30 +180,13 @@ function lazy(fn) {
98
180
  let comp;
99
181
  let p;
100
182
  const wrap = props => {
101
- const ctx = sharedConfig.context;
102
- if (ctx) {
103
- const [s, set] = signals.createSignal();
104
- sharedConfig.count || (sharedConfig.count = 0);
105
- sharedConfig.count++;
106
- (p || (p = fn())).then(mod => {
107
- !sharedConfig.done && setHydrateContext(ctx);
108
- sharedConfig.count--;
109
- set(() => mod.default);
110
- setHydrateContext();
111
- });
112
- comp = s;
113
- } else if (!comp) {
183
+ if (!comp) {
114
184
  const s = signals.createAsync(() => (p || (p = fn())).then(mod => mod.default));
115
185
  comp = s;
116
186
  }
117
187
  let Comp;
118
188
  return signals.createMemo(() => (Comp = comp()) ? signals.untrack(() => {
119
- if (!ctx || sharedConfig.done) return Comp(props);
120
- const c = sharedConfig.context;
121
- setHydrateContext(ctx);
122
- const r = Comp(props);
123
- setHydrateContext(c);
124
- return r;
189
+ return Comp(props);
125
190
  }) : "");
126
191
  };
127
192
  wrap.preload = () => p || ((p = fn()).then(mod => comp = () => mod.default), p);
@@ -129,8 +194,7 @@ function lazy(fn) {
129
194
  }
130
195
  let counter = 0;
131
196
  function createUniqueId() {
132
- const ctx = sharedConfig.context;
133
- return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;
197
+ return sharedConfig.hydrating ? sharedConfig.getNextContextId() : `cl-${counter++}`;
134
198
  }
135
199
 
136
200
  const narrowedError = name => `Stale read from <${name}>.`;
@@ -208,9 +272,6 @@ function ErrorBoundary(props) {
208
272
  return typeof f === "function" && f.length ? f(err, reset) : f;
209
273
  });
210
274
  }
211
- function Suspense(props) {
212
- return signals.createSuspense(() => props.children, () => props.fallback);
213
- }
214
275
  function Boundary(props) {
215
276
  return signals.createBoundary(() => props.children, () => props.mode);
216
277
  }
@@ -223,18 +284,10 @@ Object.defineProperty(exports, "$PROXY", {
223
284
  enumerable: true,
224
285
  get: function () { return signals.$PROXY; }
225
286
  });
226
- Object.defineProperty(exports, "$RAW", {
227
- enumerable: true,
228
- get: function () { return signals.$RAW; }
229
- });
230
287
  Object.defineProperty(exports, "$TRACK", {
231
288
  enumerable: true,
232
289
  get: function () { return signals.$TRACK; }
233
290
  });
234
- Object.defineProperty(exports, "createAsync", {
235
- enumerable: true,
236
- get: function () { return signals.createAsync; }
237
- });
238
291
  Object.defineProperty(exports, "createEffect", {
239
292
  enumerable: true,
240
293
  get: function () { return signals.createEffect; }
@@ -243,6 +296,10 @@ Object.defineProperty(exports, "createMemo", {
243
296
  enumerable: true,
244
297
  get: function () { return signals.createMemo; }
245
298
  });
299
+ Object.defineProperty(exports, "createOptimistic", {
300
+ enumerable: true,
301
+ get: function () { return signals.createOptimistic; }
302
+ });
246
303
  Object.defineProperty(exports, "createProjection", {
247
304
  enumerable: true,
248
305
  get: function () { return signals.createProjection; }
@@ -263,13 +320,17 @@ Object.defineProperty(exports, "createStore", {
263
320
  enumerable: true,
264
321
  get: function () { return signals.createStore; }
265
322
  });
323
+ Object.defineProperty(exports, "deep", {
324
+ enumerable: true,
325
+ get: function () { return signals.deep; }
326
+ });
266
327
  Object.defineProperty(exports, "flatten", {
267
328
  enumerable: true,
268
329
  get: function () { return signals.flatten; }
269
330
  });
270
- Object.defineProperty(exports, "flushSync", {
331
+ Object.defineProperty(exports, "flush", {
271
332
  enumerable: true,
272
- get: function () { return signals.flushSync; }
333
+ get: function () { return signals.flush; }
273
334
  });
274
335
  Object.defineProperty(exports, "getObserver", {
275
336
  enumerable: true,
@@ -331,6 +392,14 @@ Object.defineProperty(exports, "runWithOwner", {
331
392
  enumerable: true,
332
393
  get: function () { return signals.runWithOwner; }
333
394
  });
395
+ Object.defineProperty(exports, "snapshot", {
396
+ enumerable: true,
397
+ get: function () { return signals.snapshot; }
398
+ });
399
+ Object.defineProperty(exports, "transition", {
400
+ enumerable: true,
401
+ get: function () { return signals.transition; }
402
+ });
334
403
  Object.defineProperty(exports, "tryCatch", {
335
404
  enumerable: true,
336
405
  get: function () { return signals.tryCatch; }
@@ -339,10 +408,6 @@ Object.defineProperty(exports, "untrack", {
339
408
  enumerable: true,
340
409
  get: function () { return signals.untrack; }
341
410
  });
342
- Object.defineProperty(exports, "unwrap", {
343
- enumerable: true,
344
- get: function () { return signals.unwrap; }
345
- });
346
411
  exports.$DEVCOMP = $DEVCOMP;
347
412
  exports.Boundary = Boundary;
348
413
  exports.DEV = DEV;
@@ -354,6 +419,7 @@ exports.Show = Show;
354
419
  exports.Suspense = Suspense;
355
420
  exports.Switch = Switch;
356
421
  exports.children = children;
422
+ exports.createAsync = createAsync;
357
423
  exports.createComponent = createComponent;
358
424
  exports.createContext = createContext;
359
425
  exports.createUniqueId = createUniqueId;
package/dist/solid.js CHANGED
@@ -1,5 +1,5 @@
1
- import { createEffect, getContext, createMemo, flatten, createRoot, setContext, getOwner, onCleanup, createSignal, untrack, createAsync, mapArray, repeat, createErrorBoundary, createSuspense, createBoundary } from '@solidjs/signals';
2
- export { $PROXY, $RAW, $TRACK, createAsync, createEffect, createMemo, createProjection, createRenderEffect, createRoot, createSignal, createStore, flatten, flushSync, getObserver, getOwner, isEqual, isPending, isWrappable, latest, mapArray, merge, omit, onCleanup, reconcile, repeat, resolve, runWithObserver, runWithOwner, tryCatch, untrack, unwrap } from '@solidjs/signals';
1
+ import { createEffect, getContext, createMemo, flatten, createRoot, setContext, getOwner, onCleanup, createSignal, createSuspense, flush, runWithObserver, createAsync as createAsync$1, untrack, mapArray, repeat, createErrorBoundary, createBoundary } from '@solidjs/signals';
2
+ export { $PROXY, $TRACK, createEffect, createMemo, createOptimistic, createProjection, createRenderEffect, createRoot, createSignal, createStore, deep, flatten, flush, getObserver, getOwner, isEqual, isPending, isWrappable, latest, mapArray, merge, omit, onCleanup, reconcile, repeat, resolve, runWithObserver, runWithOwner, snapshot, transition, tryCatch, untrack } from '@solidjs/signals';
3
3
 
4
4
  const $DEVCOMP = Symbol(0);
5
5
  function onMount(fn) {
@@ -75,7 +75,7 @@ function from(producer, initialValue = undefined) {
75
75
  }
76
76
 
77
77
  const sharedConfig = {
78
- context: undefined,
78
+ hydrating: false,
79
79
  registry: undefined,
80
80
  done: false,
81
81
  getNextContextId() {
@@ -84,8 +84,90 @@ const sharedConfig = {
84
84
  return o.getNextChildId();
85
85
  }
86
86
  };
87
- function setHydrateContext(context) {
88
- sharedConfig.context = context;
87
+ function Suspense(props) {
88
+ if (!sharedConfig.hydrating) return createSuspense(() => props.children, () => props.fallback);
89
+ return createMemo(() => {
90
+ const o = getOwner();
91
+ const id = o.id;
92
+ if (sharedConfig.hydrating && sharedConfig.has(id)) {
93
+ let ref = sharedConfig.load(id);
94
+ let p;
95
+ if (ref) {
96
+ if (typeof ref !== "object" || ref.s !== "success") p = ref;else sharedConfig.gather(id);
97
+ }
98
+ if (p) {
99
+ const [s, set] = createSignal(undefined, {
100
+ equals: false
101
+ });
102
+ s();
103
+ if (p !== "$$f") {
104
+ p.then(() => {
105
+ sharedConfig.gather(id);
106
+ sharedConfig.hydrating = true;
107
+ set();
108
+ flush();
109
+ sharedConfig.hydrating = false;
110
+ }, err => runWithObserver(o, () => {
111
+ throw err;
112
+ }));
113
+ } else queueMicrotask(set);
114
+ return props.fallback;
115
+ }
116
+ }
117
+ return createSuspense(() => props.children, () => props.fallback);
118
+ });
119
+ }
120
+ function createAsync(compute, value, options) {
121
+ if (!sharedConfig.hydrating) return createAsync$1(compute, value, options);
122
+ return createAsync$1(prev => {
123
+ if (!sharedConfig.hydrating) return compute(prev);
124
+ const o = getOwner();
125
+ let initP;
126
+ if (sharedConfig.has(o.id)) initP = sharedConfig.load(o.id);
127
+ const init = initP?.value || initP;
128
+ return init ? (subFetch(compute, prev), init) : compute(prev);
129
+ }, value, options);
130
+ }
131
+ class MockPromise {
132
+ static all() {
133
+ return new MockPromise();
134
+ }
135
+ static allSettled() {
136
+ return new MockPromise();
137
+ }
138
+ static any() {
139
+ return new MockPromise();
140
+ }
141
+ static race() {
142
+ return new MockPromise();
143
+ }
144
+ static reject() {
145
+ return new MockPromise();
146
+ }
147
+ static resolve() {
148
+ return new MockPromise();
149
+ }
150
+ catch() {
151
+ return new MockPromise();
152
+ }
153
+ then() {
154
+ return new MockPromise();
155
+ }
156
+ finally() {
157
+ return new MockPromise();
158
+ }
159
+ }
160
+ function subFetch(fn, prev) {
161
+ const ogFetch = fetch;
162
+ const ogPromise = Promise;
163
+ try {
164
+ window.fetch = () => new MockPromise();
165
+ Promise = MockPromise;
166
+ return fn(prev);
167
+ } finally {
168
+ window.fetch = ogFetch;
169
+ Promise = ogPromise;
170
+ }
89
171
  }
90
172
 
91
173
  function enableHydration() {
@@ -97,30 +179,13 @@ function lazy(fn) {
97
179
  let comp;
98
180
  let p;
99
181
  const wrap = props => {
100
- const ctx = sharedConfig.context;
101
- if (ctx) {
102
- const [s, set] = createSignal();
103
- sharedConfig.count || (sharedConfig.count = 0);
104
- sharedConfig.count++;
105
- (p || (p = fn())).then(mod => {
106
- !sharedConfig.done && setHydrateContext(ctx);
107
- sharedConfig.count--;
108
- set(() => mod.default);
109
- setHydrateContext();
110
- });
111
- comp = s;
112
- } else if (!comp) {
113
- const s = createAsync(() => (p || (p = fn())).then(mod => mod.default));
182
+ if (!comp) {
183
+ const s = createAsync$1(() => (p || (p = fn())).then(mod => mod.default));
114
184
  comp = s;
115
185
  }
116
186
  let Comp;
117
187
  return createMemo(() => (Comp = comp()) ? untrack(() => {
118
- if (!ctx || sharedConfig.done) return Comp(props);
119
- const c = sharedConfig.context;
120
- setHydrateContext(ctx);
121
- const r = Comp(props);
122
- setHydrateContext(c);
123
- return r;
188
+ return Comp(props);
124
189
  }) : "");
125
190
  };
126
191
  wrap.preload = () => p || ((p = fn()).then(mod => comp = () => mod.default), p);
@@ -128,8 +193,7 @@ function lazy(fn) {
128
193
  }
129
194
  let counter = 0;
130
195
  function createUniqueId() {
131
- const ctx = sharedConfig.context;
132
- return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;
196
+ return sharedConfig.hydrating ? sharedConfig.getNextContextId() : `cl-${counter++}`;
133
197
  }
134
198
 
135
199
  const narrowedError = name => `Stale read from <${name}>.`;
@@ -207,9 +271,6 @@ function ErrorBoundary(props) {
207
271
  return typeof f === "function" && f.length ? f(err, reset) : f;
208
272
  });
209
273
  }
210
- function Suspense(props) {
211
- return createSuspense(() => props.children, () => props.fallback);
212
- }
213
274
  function Boundary(props) {
214
275
  return createBoundary(() => props.children, () => props.mode);
215
276
  }
@@ -218,4 +279,4 @@ function ssrHandleError() {}
218
279
  function ssrRunInScope() {}
219
280
  const DEV = undefined;
220
281
 
221
- export { $DEVCOMP, Boundary, DEV, ErrorBoundary, For, Match, Repeat, Show, Suspense, Switch, children, createComponent, createContext, createUniqueId, enableHydration, from, lazy, observable, onMount, sharedConfig, ssrHandleError, ssrRunInScope, useContext };
282
+ export { $DEVCOMP, Boundary, DEV, ErrorBoundary, For, Match, Repeat, Show, Suspense, Switch, children, createAsync, createComponent, createContext, createUniqueId, enableHydration, from, lazy, observable, onMount, sharedConfig, ssrHandleError, ssrRunInScope, useContext };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "solid-js",
3
3
  "description": "A declarative JavaScript library for building user interfaces.",
4
- "version": "2.0.0-experimental.5",
4
+ "version": "2.0.0-experimental.7",
5
5
  "author": "Ryan Carniato",
6
6
  "license": "MIT",
7
7
  "homepage": "https://solidjs.com",
@@ -79,8 +79,10 @@
79
79
  "performance"
80
80
  ],
81
81
  "dependencies": {
82
- "@solidjs/signals": "^0.3.1",
83
- "csstype": "^3.1.0"
82
+ "@solidjs/signals": "^0.4.1",
83
+ "csstype": "^3.1.0",
84
+ "seroval": "~1.3.0",
85
+ "seroval-plugins": "~1.3.0"
84
86
  },
85
87
  "scripts": {
86
88
  "build": "npm-run-all -nl build:*",
@@ -21,7 +21,7 @@ export type VoidProps<P extends Record<string, any> = {}> = P & {
21
21
  export type VoidComponent<P extends Record<string, any> = {}> = Component<VoidProps<P>>;
22
22
  /**
23
23
  * Extend props to allow an optional `children` prop with the usual
24
- * type in JSX, `JSX.Element` (which allows elements, arrays, functions, etc.).
24
+ * type in JSX, `JSX.Element` (which allows elements, arrays, strings, etc.).
25
25
  * Use this for components that you want to accept children.
26
26
  */
27
27
  export type ParentProps<P extends Record<string, any> = {}> = P & {
@@ -29,7 +29,7 @@ export type ParentProps<P extends Record<string, any> = {}> = P & {
29
29
  };
30
30
  /**
31
31
  * `ParentComponent` allows an optional `children` prop with the usual
32
- * type in JSX, `JSX.Element` (which allows elements, arrays, functions, etc.).
32
+ * type in JSX, `JSX.Element` (which allows elements, arrays, strings, etc.).
33
33
  * Use this for components that you want to accept children.
34
34
  */
35
35
  export type ParentComponent<P extends Record<string, any> = {}> = Component<ParentProps<P>>;
@@ -15,7 +15,7 @@ import type { JSX } from "../jsx.js";
15
15
  export declare function For<T extends readonly any[], U extends JSX.Element>(props: {
16
16
  each: T | undefined | null | false;
17
17
  fallback?: JSX.Element;
18
- keyed?: boolean | ((item: T) => any);
18
+ keyed?: boolean | ((item: T[number]) => any);
19
19
  children: (item: Accessor<T[number]>, index: Accessor<number>) => U;
20
20
  }): JSX.Element;
21
21
  /**
@@ -98,21 +98,6 @@ export declare function ErrorBoundary(props: {
98
98
  fallback: JSX.Element | ((err: any, reset: () => void) => JSX.Element);
99
99
  children: JSX.Element;
100
100
  }): JSX.Element;
101
- /**
102
- * Tracks all resources inside a component and renders a fallback until they are all resolved
103
- * ```typescript
104
- * const AsyncComponent = lazy(() => import('./component'));
105
- *
106
- * <Suspense fallback={<LoadingIndicator />}>
107
- * <AsyncComponent />
108
- * </Suspense>
109
- * ```
110
- * @description https://docs.solidjs.com/reference/components/suspense
111
- */
112
- export declare function Suspense(props: {
113
- fallback?: JSX.Element;
114
- children: JSX.Element;
115
- }): JSX.Element;
116
101
  export declare function Boundary(props: {
117
102
  mode: BoundaryMode;
118
103
  children: JSX.Element;
@@ -1,6 +1,8 @@
1
+ import { MemoOptions, Accessor } from "@solidjs/signals";
2
+ import { JSX } from "../jsx.js";
1
3
  export type HydrationContext = {};
2
4
  type SharedConfig = {
3
- context?: HydrationContext;
5
+ hydrating: boolean;
4
6
  resources?: {
5
7
  [key: string]: any;
6
8
  };
@@ -8,11 +10,39 @@ type SharedConfig = {
8
10
  has?: (id: string) => boolean;
9
11
  gather?: (key: string) => void;
10
12
  registry?: Map<string, Element>;
11
- done?: boolean;
12
- count?: number;
13
+ done: boolean;
13
14
  getNextContextId(): string;
14
15
  };
15
16
  export declare const sharedConfig: SharedConfig;
16
- export declare function setHydrateContext(context?: HydrationContext): void;
17
- export declare function nextHydrateContext(): HydrationContext | undefined;
17
+ /**
18
+ * Tracks all resources inside a component and renders a fallback until they are all resolved
19
+ * ```typescript
20
+ * const AsyncComponent = lazy(() => import('./component'));
21
+ *
22
+ * <Suspense fallback={<LoadingIndicator />}>
23
+ * <AsyncComponent />
24
+ * </Suspense>
25
+ * ```
26
+ * @description https://docs.solidjs.com/reference/components/suspense
27
+ */
28
+ export declare function Suspense(props: {
29
+ fallback?: JSX.Element;
30
+ children: JSX.Element;
31
+ }): JSX.Element;
32
+ /**
33
+ * Creates a readonly derived async reactive memoized signal
34
+ * ```typescript
35
+ * export function createAsync<T>(
36
+ * compute: (v: T) => Promise<T> | T,
37
+ * value?: T,
38
+ * options?: { name?: string, equals?: false | ((prev: T, next: T) => boolean) }
39
+ * ): () => T;
40
+ * ```
41
+ * @param compute a function that receives its previous or the initial value, if set, and returns a new value used to react on a computation
42
+ * @param value an optional initial value for the computation; if set, fn will never receive undefined as first argument
43
+ * @param options allows to set a name in dev mode for debugging purposes and use a custom comparison function in equals
44
+ *
45
+ * @description https://docs.solidjs.com/reference/basic-reactivity/create-async
46
+ */
47
+ export declare function createAsync<T>(compute: (prev?: T) => Promise<T> | AsyncIterable<T> | T, value?: T, options?: MemoOptions<T>): Accessor<T>;
18
48
  export {};
package/types/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- export { $PROXY, $TRACK, $RAW, createAsync, createEffect, createMemo, createProjection, createRenderEffect, createRoot, createSignal, createStore, flatten, flushSync, getObserver, getOwner, isEqual, isPending, isWrappable, latest, mapArray, merge, omit, onCleanup, reconcile, repeat, resolve, runWithObserver, runWithOwner, tryCatch, untrack, unwrap } from "@solidjs/signals";
1
+ export { $PROXY, $TRACK, createEffect, createMemo, createOptimistic, createProjection, createRenderEffect, createRoot, createSignal, createStore, flatten, flush, getObserver, getOwner, isEqual, isPending, isWrappable, latest, mapArray, merge, omit, onCleanup, reconcile, repeat, resolve, runWithObserver, runWithOwner, snapshot, tryCatch, untrack, deep, transition } from "@solidjs/signals";
2
2
  export type { Accessor, BoundaryMode, ComputeFunction, EffectFunction, EffectOptions, Merge, NoInfer, NotWrappable, Omit, Owner, Signal, SignalOptions, Setter, Store, SolidStore, StoreNode, StoreSetter, TryCatchResult } from "@solidjs/signals";
3
3
  export { $DEVCOMP, children, createContext, onMount, useContext } from "./client/core.js";
4
4
  export type { ChildrenReturn, Context, ContextProviderComponent, ResolvedChildren, ResolvedJSXElement } from "./client/core.js";
5
5
  export * from "./client/observable.js";
6
6
  export * from "./client/component.js";
7
7
  export * from "./client/flow.js";
8
- export { sharedConfig } from "./client/hydration.js";
8
+ export { sharedConfig, createAsync, Suspense } from "./client/hydration.js";
9
9
  export declare function ssrHandleError(): void;
10
10
  export declare function ssrRunInScope(): void;
11
11
  import type { JSX } from "./jsx.js";