solid-js 1.9.11 → 2.0.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.
Files changed (82) hide show
  1. package/dist/dev.cjs +733 -1678
  2. package/dist/dev.js +598 -1643
  3. package/dist/server.cjs +769 -703
  4. package/dist/server.js +682 -670
  5. package/dist/solid.cjs +699 -1618
  6. package/dist/solid.js +563 -1582
  7. package/package.json +7 -151
  8. package/types/{render → client}/component.d.ts +1 -38
  9. package/types/client/core.d.ts +65 -0
  10. package/types/client/flow.d.ts +100 -0
  11. package/types/client/hydration.d.ts +76 -0
  12. package/types/index.d.ts +11 -14
  13. package/types/jsx.d.ts +1508 -1633
  14. package/types/server/component.d.ts +66 -0
  15. package/types/server/core.d.ts +44 -0
  16. package/types/server/flow.d.ts +60 -0
  17. package/types/server/hydration.d.ts +21 -0
  18. package/types/server/index.d.ts +12 -3
  19. package/types/server/shared.d.ts +45 -0
  20. package/types/server/signals.d.ts +60 -0
  21. package/h/dist/h.cjs +0 -115
  22. package/h/dist/h.js +0 -113
  23. package/h/jsx-dev-runtime/package.json +0 -8
  24. package/h/jsx-runtime/dist/jsx.cjs +0 -15
  25. package/h/jsx-runtime/dist/jsx.js +0 -10
  26. package/h/jsx-runtime/package.json +0 -8
  27. package/h/jsx-runtime/types/index.d.ts +0 -11
  28. package/h/jsx-runtime/types/jsx.d.ts +0 -4242
  29. package/h/package.json +0 -8
  30. package/h/types/hyperscript.d.ts +0 -20
  31. package/h/types/index.d.ts +0 -3
  32. package/html/dist/html.cjs +0 -583
  33. package/html/dist/html.js +0 -581
  34. package/html/package.json +0 -8
  35. package/html/types/index.d.ts +0 -3
  36. package/html/types/lit.d.ts +0 -41
  37. package/store/dist/dev.cjs +0 -458
  38. package/store/dist/dev.js +0 -449
  39. package/store/dist/server.cjs +0 -126
  40. package/store/dist/server.js +0 -114
  41. package/store/dist/store.cjs +0 -438
  42. package/store/dist/store.js +0 -429
  43. package/store/package.json +0 -46
  44. package/store/types/index.d.ts +0 -12
  45. package/store/types/modifiers.d.ts +0 -6
  46. package/store/types/mutable.d.ts +0 -5
  47. package/store/types/server.d.ts +0 -17
  48. package/store/types/store.d.ts +0 -107
  49. package/types/reactive/array.d.ts +0 -44
  50. package/types/reactive/observable.d.ts +0 -36
  51. package/types/reactive/scheduler.d.ts +0 -10
  52. package/types/reactive/signal.d.ts +0 -577
  53. package/types/render/Suspense.d.ts +0 -26
  54. package/types/render/flow.d.ts +0 -118
  55. package/types/render/hydration.d.ts +0 -24
  56. package/types/render/index.d.ts +0 -4
  57. package/types/server/reactive.d.ts +0 -98
  58. package/types/server/rendering.d.ts +0 -159
  59. package/universal/dist/dev.cjs +0 -245
  60. package/universal/dist/dev.js +0 -243
  61. package/universal/dist/universal.cjs +0 -245
  62. package/universal/dist/universal.js +0 -243
  63. package/universal/package.json +0 -20
  64. package/universal/types/index.d.ts +0 -3
  65. package/universal/types/universal.d.ts +0 -30
  66. package/web/dist/dev.cjs +0 -894
  67. package/web/dist/dev.js +0 -782
  68. package/web/dist/server.cjs +0 -892
  69. package/web/dist/server.js +0 -782
  70. package/web/dist/web.cjs +0 -883
  71. package/web/dist/web.js +0 -771
  72. package/web/package.json +0 -46
  73. package/web/storage/dist/storage.cjs +0 -12
  74. package/web/storage/dist/storage.js +0 -10
  75. package/web/storage/package.json +0 -15
  76. package/web/storage/types/index.d.ts +0 -2
  77. package/web/types/client.d.ts +0 -79
  78. package/web/types/core.d.ts +0 -2
  79. package/web/types/index.d.ts +0 -50
  80. package/web/types/jsx.d.ts +0 -1
  81. package/web/types/server-mock.d.ts +0 -65
  82. package/web/types/server.d.ts +0 -177
package/dist/server.cjs CHANGED
@@ -1,813 +1,879 @@
1
1
  'use strict';
2
2
 
3
- const equalFn = (a, b) => a === b;
4
- const $PROXY = Symbol("solid-proxy");
5
- const $TRACK = Symbol("solid-track");
6
- const $DEVCOMP = Symbol("solid-dev-component");
7
- const DEV = undefined;
8
- const ERROR = Symbol("error");
9
- function castError(err) {
10
- if (err instanceof Error) return err;
11
- return new Error(typeof err === "string" ? err : "Unknown error", {
12
- cause: err
13
- });
14
- }
15
- function handleError(err, owner = Owner) {
16
- const fns = owner && owner.context && owner.context[ERROR];
17
- const error = castError(err);
18
- if (!fns) throw error;
19
- try {
20
- for (const f of fns) f(error);
21
- } catch (e) {
22
- handleError(e, owner && owner.owner || null);
3
+ var signals = require('@solidjs/signals');
4
+
5
+ const sharedConfig = {
6
+ getNextContextId() {
7
+ const o = signals.getOwner();
8
+ if (!o) throw new Error(`getNextContextId cannot be used under non-hydrating context`);
9
+ return signals.getNextChildId(o);
23
10
  }
24
- }
25
- const UNOWNED = {
26
- context: null,
27
- owner: null,
28
- owned: null,
29
- cleanups: null
30
11
  };
31
- let Owner = null;
32
- function createOwner() {
33
- const o = {
34
- owner: Owner,
35
- context: Owner ? Owner.context : null,
36
- owned: null,
37
- cleanups: null
38
- };
39
- if (Owner) {
40
- if (!Owner.owned) Owner.owned = [o];else Owner.owned.push(o);
41
- }
42
- return o;
43
- }
44
- function createRoot(fn, detachedOwner) {
45
- const owner = Owner,
46
- current = detachedOwner === undefined ? owner : detachedOwner,
47
- root = fn.length === 0 ? UNOWNED : {
48
- context: current ? current.context : null,
49
- owner: current,
50
- owned: null,
51
- cleanups: null
52
- };
53
- Owner = root;
54
- let result;
12
+
13
+ let Observer = null;
14
+ function runWithObserver(comp, fn) {
15
+ const prev = Observer;
16
+ Observer = comp;
55
17
  try {
56
- result = fn(fn.length === 0 ? () => {} : () => cleanNode(root));
57
- } catch (err) {
58
- handleError(err);
18
+ return fn();
59
19
  } finally {
60
- Owner = owner;
20
+ Observer = prev;
61
21
  }
62
- return result;
63
22
  }
64
- function createSignal(value, options) {
65
- return [() => value, v => {
66
- return value = typeof v === "function" ? v(value) : v;
67
- }];
23
+ function getObserver() {
24
+ return Observer;
68
25
  }
69
- function createComputed(fn, value) {
70
- Owner = createOwner();
71
- try {
72
- fn(value);
73
- } catch (err) {
74
- handleError(err);
75
- } finally {
76
- Owner = Owner.owner;
77
- }
26
+ function createSignal(first, second, third) {
27
+ if (typeof first === "function") {
28
+ const ssrSource = third?.ssrSource;
29
+ if (ssrSource === "initial" || ssrSource === "client") {
30
+ signals.createOwner();
31
+ let value = second;
32
+ return [() => value, v => {
33
+ return value = typeof v === "function" ? v(value) : v;
34
+ }];
35
+ }
36
+ const memoOpts = third?.deferStream || ssrSource ? {
37
+ deferStream: third?.deferStream,
38
+ ssrSource
39
+ } : undefined;
40
+ const memo = createMemo(p => {
41
+ let value = first(p ? p[0]() : second);
42
+ return [() => value, v => {
43
+ return value = typeof v === "function" ? v(value) : v;
44
+ }];
45
+ }, undefined, memoOpts);
46
+ return [() => memo()[0](), v => memo()[1](v)];
47
+ }
48
+ return [() => first, v => {
49
+ return first = typeof v === "function" ? v(first) : v;
50
+ }];
78
51
  }
79
- const createRenderEffect = createComputed;
80
- function createEffect(fn, value) {}
81
- function createReaction(fn) {
82
- return fn => {
83
- fn();
52
+ function createMemo(compute, value, options) {
53
+ const ctx = sharedConfig.context;
54
+ const owner = signals.createOwner();
55
+ const comp = {
56
+ owner,
57
+ value: value,
58
+ compute: compute,
59
+ error: undefined,
60
+ computed: false,
61
+ disposed: false
84
62
  };
85
- }
86
- function createMemo(fn, value) {
87
- Owner = createOwner();
88
- let v;
89
- try {
90
- v = fn(value);
91
- } catch (err) {
92
- handleError(err);
93
- } finally {
94
- Owner = Owner.owner;
63
+ signals.runWithOwner(owner, () => signals.onCleanup(() => {
64
+ comp.disposed = true;
65
+ }));
66
+ function update() {
67
+ if (comp.disposed) return;
68
+ try {
69
+ comp.error = undefined;
70
+ const result = signals.runWithOwner(owner, () => runWithObserver(comp, () => comp.compute(comp.value)));
71
+ comp.computed = true;
72
+ processResult(comp, result, owner, ctx, options?.deferStream, options?.ssrSource);
73
+ } catch (err) {
74
+ if (err instanceof signals.NotReadyError) {
75
+ err.source?.then(() => update());
76
+ }
77
+ comp.error = err;
78
+ comp.computed = true;
79
+ }
80
+ }
81
+ const ssrSource = options?.ssrSource;
82
+ if (ssrSource === "initial" || ssrSource === "client") {
83
+ comp.computed = true;
84
+ } else if (!options?.lazy) {
85
+ update();
95
86
  }
96
- return () => v;
97
- }
98
- function createDeferred(source) {
99
- return source;
100
- }
101
- function createSelector(source, fn = equalFn) {
102
- return k => fn(k, source());
103
- }
104
- function batch(fn) {
105
- return fn();
106
- }
107
- const untrack = batch;
108
- function on(deps, fn, options = {}) {
109
- const isArray = Array.isArray(deps);
110
- const defer = options.defer;
111
87
  return () => {
112
- if (defer) return undefined;
113
- let value;
114
- if (isArray) {
115
- value = [];
116
- for (let i = 0; i < deps.length; i++) value.push(deps[i]());
117
- } else value = deps();
118
- return fn(value);
88
+ if (!comp.computed) {
89
+ update();
90
+ }
91
+ if (comp.error) {
92
+ throw comp.error;
93
+ }
94
+ return comp.value;
119
95
  };
120
96
  }
121
- function onMount(fn) {}
122
- function onCleanup(fn) {
123
- if (Owner) {
124
- if (!Owner.cleanups) Owner.cleanups = [fn];else Owner.cleanups.push(fn);
97
+ function createDeepProxy(target, patches, basePath = []) {
98
+ const childProxies = new Map();
99
+ const handler = {
100
+ get(obj, key, receiver) {
101
+ if (Array.isArray(obj)) {
102
+ if (key === "shift") {
103
+ return function () {
104
+ if (obj.length === 0) return undefined;
105
+ const removed = obj[0];
106
+ Array.prototype.shift.call(obj);
107
+ childProxies.clear();
108
+ patches.push([[...basePath, 0]]);
109
+ return removed;
110
+ };
111
+ }
112
+ if (key === "unshift") {
113
+ return function (...items) {
114
+ const result = Array.prototype.unshift.apply(obj, items);
115
+ childProxies.clear();
116
+ for (let i = 0; i < items.length; i++) {
117
+ patches.push([[...basePath, i], items[i], 1]);
118
+ }
119
+ return result;
120
+ };
121
+ }
122
+ if (key === "splice") {
123
+ return function (start, deleteCount, ...items) {
124
+ const len = obj.length;
125
+ const s = start < 0 ? Math.max(len + start, 0) : Math.min(start, len);
126
+ const d = deleteCount === undefined ? len - s : Math.min(Math.max(deleteCount, 0), len - s);
127
+ const removed = Array.prototype.splice.apply(obj, [s, d, ...items]);
128
+ childProxies.clear();
129
+ for (let i = 0; i < d; i++) patches.push([[...basePath, s]]);
130
+ for (let i = 0; i < items.length; i++) patches.push([[...basePath, s + i], items[i], 1]);
131
+ return removed;
132
+ };
133
+ }
134
+ }
135
+ const value = Reflect.get(obj, key, receiver);
136
+ if (value !== null && typeof value === "object" && typeof key !== "symbol") {
137
+ if (!childProxies.has(key)) {
138
+ childProxies.set(key, createDeepProxy(value, patches, [...basePath, key]));
139
+ }
140
+ return childProxies.get(key);
141
+ }
142
+ return value;
143
+ },
144
+ set(obj, key, value) {
145
+ childProxies.delete(key);
146
+ patches.push([[...basePath, key], value]);
147
+ return Reflect.set(obj, key, value);
148
+ },
149
+ deleteProperty(obj, key) {
150
+ childProxies.delete(key);
151
+ patches.push([[...basePath, key]]);
152
+ return Reflect.deleteProperty(obj, key);
153
+ }
154
+ };
155
+ return new Proxy(target, handler);
156
+ }
157
+ function processResult(comp, result, owner, ctx, deferStream, ssrSource) {
158
+ if (comp.disposed) return;
159
+ const id = owner.id;
160
+ const uninitialized = comp.value === undefined;
161
+ if (result instanceof Promise) {
162
+ result.then(v => {
163
+ result.s = 1;
164
+ result.v = v;
165
+ if (comp.disposed) return;
166
+ comp.value = v;
167
+ comp.error = undefined;
168
+ }, () => {});
169
+ if (ctx?.async && ctx.serialize && id) ctx.serialize(id, result, deferStream);
170
+ if (uninitialized) {
171
+ comp.error = new signals.NotReadyError(result);
172
+ }
173
+ return;
174
+ }
175
+ const iterator = result?.[Symbol.asyncIterator];
176
+ if (typeof iterator === "function") {
177
+ const iter = iterator.call(result);
178
+ if (ssrSource === "hybrid") {
179
+ const promise = iter.next().then(v => {
180
+ promise.s = 1;
181
+ promise.v = v.value;
182
+ if (comp.disposed) return;
183
+ comp.value = v.value;
184
+ comp.error = undefined;
185
+ }, () => {});
186
+ if (ctx?.async && ctx.serialize && id) ctx.serialize(id, promise, deferStream);
187
+ if (uninitialized) {
188
+ comp.error = new signals.NotReadyError(promise);
189
+ }
190
+ } else {
191
+ const firstNext = iter.next();
192
+ const firstReady = firstNext.then(r => {
193
+ if (comp.disposed) return;
194
+ if (!r.done) {
195
+ comp.value = r.value;
196
+ comp.error = undefined;
197
+ }
198
+ }, () => {});
199
+ let servedFirst = false;
200
+ const tapped = {
201
+ [Symbol.asyncIterator]: () => ({
202
+ next() {
203
+ if (!servedFirst) {
204
+ servedFirst = true;
205
+ return firstNext.then(r => {
206
+ if (!r.done && !comp.disposed) comp.value = r.value;
207
+ return r;
208
+ });
209
+ }
210
+ return iter.next().then(r => r);
211
+ }
212
+ })
213
+ };
214
+ if (ctx?.async && ctx.serialize && id) ctx.serialize(id, tapped, deferStream);
215
+ if (uninitialized) {
216
+ comp.error = new signals.NotReadyError(firstReady);
217
+ }
218
+ }
219
+ return;
125
220
  }
126
- return fn;
221
+ comp.value = result;
127
222
  }
128
- function cleanNode(node) {
129
- if (node.owned) {
130
- for (let i = 0; i < node.owned.length; i++) cleanNode(node.owned[i]);
131
- node.owned = null;
223
+ function serverEffect(compute, effectFn, value, options) {
224
+ const ssrSource = options?.ssrSource;
225
+ if (ssrSource === "client" || ssrSource === "initial") {
226
+ signals.createOwner();
227
+ return;
132
228
  }
133
- if (node.cleanups) {
134
- for (let i = 0; i < node.cleanups.length; i++) node.cleanups[i]();
135
- node.cleanups = null;
136
- }
137
- }
138
- function catchError(fn, handler) {
139
- const owner = createOwner();
140
- owner.context = {
141
- ...owner.context,
142
- [ERROR]: [handler]
229
+ const ctx = sharedConfig.context;
230
+ const owner = signals.createOwner();
231
+ const comp = {
232
+ owner,
233
+ value: value,
234
+ compute: compute,
235
+ error: undefined,
236
+ computed: true,
237
+ disposed: false
143
238
  };
144
- Owner = owner;
239
+ if (ssrSource) {
240
+ signals.runWithOwner(owner, () => signals.onCleanup(() => {
241
+ comp.disposed = true;
242
+ }));
243
+ }
145
244
  try {
146
- return fn();
245
+ const result = signals.runWithOwner(owner, () => runWithObserver(comp, () => compute(value)));
246
+ if (ssrSource) {
247
+ processResult(comp, result, owner, ctx, options?.deferStream, ssrSource);
248
+ }
249
+ effectFn?.(ssrSource ? comp.value ?? result : result, value);
147
250
  } catch (err) {
148
- handleError(err);
149
- } finally {
150
- Owner = Owner.owner;
151
251
  }
152
252
  }
153
- function getListener() {
154
- return null;
155
- }
156
- function createContext(defaultValue) {
157
- const id = Symbol("context");
158
- return {
159
- id,
160
- Provider: createProvider(id),
161
- defaultValue
162
- };
253
+ function createEffect(compute, effect, value, options) {
254
+ serverEffect(compute, undefined, value, options);
163
255
  }
164
- function useContext(context) {
165
- return Owner && Owner.context && Owner.context[context.id] !== undefined ? Owner.context[context.id] : context.defaultValue;
256
+ function createRenderEffect(compute, effectFn, value, options) {
257
+ serverEffect(compute, effectFn, value, options);
166
258
  }
167
- function getOwner() {
168
- return Owner;
259
+ function createTrackedEffect(compute, options) {
260
+ const o = signals.getOwner();
261
+ if (o?.id != null) signals.getNextChildId(o);
169
262
  }
170
- function children(fn) {
171
- const memo = createMemo(() => resolveChildren(fn()));
172
- memo.toArray = () => {
173
- const c = memo();
174
- return Array.isArray(c) ? c : c != null ? [c] : [];
263
+ function createReaction(effectFn, options) {
264
+ return tracking => {
265
+ tracking();
175
266
  };
176
- return memo;
177
- }
178
- function runWithOwner(o, fn) {
179
- const prev = Owner;
180
- Owner = o;
181
- try {
182
- return fn();
183
- } catch (err) {
184
- handleError(err);
185
- } finally {
186
- Owner = prev;
187
- }
188
267
  }
189
- function resolveChildren(children) {
190
- if (typeof children === "function" && !children.length) return resolveChildren(children());
191
- if (Array.isArray(children)) {
192
- const results = [];
193
- for (let i = 0; i < children.length; i++) {
194
- const result = resolveChildren(children[i]);
195
- Array.isArray(result) ? results.push.apply(results, result) : results.push(result);
268
+ function createOptimistic(first, second, third) {
269
+ return createSignal(first, second, third);
270
+ }
271
+ function setProperty(state, property, value) {
272
+ if (state[property] === value) return;
273
+ if (value === undefined) {
274
+ delete state[property];
275
+ } else state[property] = value;
276
+ }
277
+ function createStore(first, second) {
278
+ if (typeof first === "function") {
279
+ const store = createProjection(first, second ?? {});
280
+ return [store, fn => fn(store)];
281
+ }
282
+ const state = first;
283
+ return [state, fn => fn(state)];
284
+ }
285
+ const createOptimisticStore = createStore;
286
+ function createPendingProxy(state, source) {
287
+ let pending = true;
288
+ let readTarget = state;
289
+ const proxy = new Proxy(state, {
290
+ get(obj, key, receiver) {
291
+ if (pending && typeof key !== "symbol") {
292
+ throw new signals.NotReadyError(source);
293
+ }
294
+ return Reflect.get(readTarget, key);
196
295
  }
197
- return results;
198
- }
199
- return children;
296
+ });
297
+ return [proxy, frozen => {
298
+ if (frozen) readTarget = frozen;
299
+ pending = false;
300
+ }];
200
301
  }
201
- function createProvider(id) {
202
- return function provider(props) {
203
- return createMemo(() => {
204
- Owner.context = {
205
- ...Owner.context,
206
- [id]: props.value
302
+ function createProjection(fn, initialValue = {}, options) {
303
+ const ctx = sharedConfig.context;
304
+ const owner = signals.createOwner();
305
+ const [state] = createStore(initialValue);
306
+ if (options?.ssrSource === "initial" || options?.ssrSource === "client") {
307
+ return state;
308
+ }
309
+ let disposed = false;
310
+ signals.runWithOwner(owner, () => signals.onCleanup(() => {
311
+ disposed = true;
312
+ }));
313
+ const ssrSource = options?.ssrSource;
314
+ const useProxy = ssrSource !== "hybrid";
315
+ const patches = [];
316
+ const draft = useProxy ? createDeepProxy(state, patches) : state;
317
+ const result = signals.runWithOwner(owner, () => fn(draft));
318
+ const iteratorFn = result?.[Symbol.asyncIterator];
319
+ if (typeof iteratorFn === "function") {
320
+ const iter = iteratorFn.call(result);
321
+ if (ssrSource === "hybrid") {
322
+ const promise = iter.next().then(r => {
323
+ promise.s = 1;
324
+ if (disposed) {
325
+ promise.v = state;
326
+ return;
327
+ }
328
+ if (r.value !== undefined && r.value !== state) {
329
+ Object.assign(state, r.value);
330
+ }
331
+ promise.v = state;
332
+ markReady();
333
+ }, () => {});
334
+ if (ctx?.async && !ctx.noHydrate && owner.id) ctx.serialize(owner.id, promise, options?.deferStream);
335
+ const [pending, markReady] = createPendingProxy(state, promise);
336
+ return pending;
337
+ } else {
338
+ const firstNext = iter.next();
339
+ const firstReady = firstNext.then(r => {
340
+ if (disposed) return;
341
+ patches.length = 0;
342
+ if (!r.done) {
343
+ if (r.value !== undefined && r.value !== draft) {
344
+ Object.assign(state, r.value);
345
+ }
346
+ }
347
+ markReady(JSON.parse(JSON.stringify(state)));
348
+ }, () => {
349
+ markReady();
350
+ });
351
+ let servedFirst = false;
352
+ const tapped = {
353
+ [Symbol.asyncIterator]: () => ({
354
+ next() {
355
+ if (!servedFirst) {
356
+ servedFirst = true;
357
+ return firstNext.then(r => {
358
+ if (!r.done && !disposed) return {
359
+ done: false,
360
+ value: state
361
+ };
362
+ return {
363
+ done: r.done,
364
+ value: undefined
365
+ };
366
+ });
367
+ }
368
+ return iter.next().then(r => {
369
+ if (disposed) return {
370
+ done: true,
371
+ value: undefined
372
+ };
373
+ const flushed = patches.splice(0);
374
+ if (!r.done) {
375
+ if (r.value !== undefined && r.value !== draft) {
376
+ Object.assign(state, r.value);
377
+ }
378
+ return {
379
+ done: false,
380
+ value: flushed
381
+ };
382
+ }
383
+ return {
384
+ done: true,
385
+ value: undefined
386
+ };
387
+ });
388
+ }
389
+ })
207
390
  };
208
- return children(() => props.children);
209
- });
391
+ if (ctx?.async && !ctx.noHydrate && owner.id) ctx.serialize(owner.id, tapped, options?.deferStream);
392
+ const [pending, markReady] = createPendingProxy(state, firstReady);
393
+ return pending;
394
+ }
395
+ }
396
+ if (result instanceof Promise) {
397
+ const promise = result.then(v => {
398
+ promise.s = 1;
399
+ if (disposed) {
400
+ promise.v = state;
401
+ return;
402
+ }
403
+ if (v !== undefined && v !== state) {
404
+ Object.assign(state, v);
405
+ }
406
+ promise.v = state;
407
+ markReady();
408
+ }, () => {});
409
+ if (ctx?.async && !ctx.noHydrate && owner.id) ctx.serialize(owner.id, promise, options?.deferStream);
410
+ const [pending, markReady] = createPendingProxy(state, promise);
411
+ return pending;
412
+ }
413
+ if (result !== undefined && result !== state && result !== draft) {
414
+ Object.assign(state, result);
415
+ }
416
+ return state;
417
+ }
418
+ function reconcile(value) {
419
+ return state => {
420
+ if (!signals.isWrappable(state) || !signals.isWrappable(value)) return value;
421
+ const targetKeys = Object.keys(value);
422
+ const previousKeys = Object.keys(state);
423
+ for (let i = 0, len = targetKeys.length; i < len; i++) {
424
+ const key = targetKeys[i];
425
+ setProperty(state, key, value[key]);
426
+ }
427
+ for (let i = 0, len = previousKeys.length; i < len; i++) {
428
+ if (value[previousKeys[i]] === undefined) setProperty(state, previousKeys[i], undefined);
429
+ }
430
+ return state;
210
431
  };
211
432
  }
212
- function requestCallback(fn, options) {
213
- return {
214
- id: 0,
215
- fn: () => {},
216
- startTime: 0,
217
- expirationTime: 0
218
- };
433
+ function deep(store) {
434
+ return store;
219
435
  }
220
436
  function mapArray(list, mapFn, options = {}) {
221
- const items = list();
222
- let s = [];
223
- if (items && items.length) {
224
- for (let i = 0, len = items.length; i < len; i++) s.push(mapFn(items[i], () => i));
225
- } else if (options.fallback) s = [options.fallback()];
226
- return () => s;
227
- }
228
- function indexArray(list, mapFn, options = {}) {
229
- const items = list();
230
- let s = [];
231
- if (items && items.length) {
232
- for (let i = 0, len = items.length; i < len; i++) s.push(mapFn(() => items[i], i));
233
- } else if (options.fallback) s = [options.fallback()];
234
- return () => s;
235
- }
236
- function observable(input) {
237
- return {
238
- subscribe(observer) {
239
- if (!(observer instanceof Object) || observer == null) {
240
- throw new TypeError("Expected the observer to be an object.");
241
- }
242
- const handler = typeof observer === "function" ? observer : observer.next && observer.next.bind(observer);
243
- if (!handler) {
244
- return {
245
- unsubscribe() {}
246
- };
247
- }
248
- const dispose = createRoot(disposer => {
249
- createEffect(() => {
250
- const v = input();
251
- untrack(() => handler(v));
437
+ const root = signals.getOwner();
438
+ const id = signals.getNextChildId(root);
439
+ return () => {
440
+ const items = list();
441
+ let s = [];
442
+ if (items && items.length) {
443
+ for (let i = 0, len = items.length; i < len; i++) {
444
+ const o = signals.createOwner({
445
+ id: id + i
252
446
  });
253
- return disposer;
254
- });
255
- if (getOwner()) onCleanup(dispose);
256
- return {
257
- unsubscribe() {
258
- dispose();
259
- }
260
- };
261
- },
262
- [Symbol.observable || "@@observable"]() {
263
- return this;
264
- }
447
+ s.push(signals.runWithOwner(o, () => mapFn(() => items[i], () => i)));
448
+ }
449
+ } else if (options.fallback) s = [options.fallback()];
450
+ return s;
265
451
  };
266
452
  }
267
- function from(producer) {
268
- const [s, set] = createSignal(undefined);
269
- if ("subscribe" in producer) {
270
- const unsub = producer.subscribe(v => set(() => v));
271
- onCleanup(() => "unsubscribe" in unsub ? unsub.unsubscribe() : unsub());
272
- } else {
273
- const clean = producer(set);
274
- onCleanup(clean);
275
- }
276
- return s;
277
- }
278
- function enableExternalSource(factory) {}
279
- function onError(fn) {
280
- if (Owner) {
281
- if (Owner.context === null || !Owner.context[ERROR]) {
282
- Owner.context = {
283
- ...Owner.context,
284
- [ERROR]: [fn]
285
- };
286
- mutateContext(Owner, ERROR, [fn]);
287
- } else Owner.context[ERROR].push(fn);
288
- }
289
- }
290
- function mutateContext(o, key, value) {
291
- if (o.owned) {
292
- for (let i = 0; i < o.owned.length; i++) {
293
- if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);
294
- if (!o.owned[i].context) {
295
- o.owned[i].context = o.context;
296
- mutateContext(o.owned[i], key, value);
297
- } else if (!o.owned[i].context[key]) {
298
- o.owned[i].context[key] = value;
299
- mutateContext(o.owned[i], key, value);
453
+ function repeat(count, mapFn, options = {}) {
454
+ const owner = signals.createOwner();
455
+ const len = count();
456
+ const offset = options.from?.() || 0;
457
+ let s = [];
458
+ if (len) {
459
+ signals.runWithOwner(owner, () => {
460
+ for (let i = 0; i < len; i++) {
461
+ const itemOwner = signals.createOwner();
462
+ s.push(signals.runWithOwner(itemOwner, () => mapFn(i + offset)));
300
463
  }
301
- }
464
+ });
465
+ } else if (options.fallback) {
466
+ s = [signals.runWithOwner(owner, () => {
467
+ const fo = signals.createOwner();
468
+ return signals.runWithOwner(fo, () => options.fallback());
469
+ })];
302
470
  }
471
+ return () => s;
303
472
  }
304
-
305
- function escape(s, attr) {
306
- const t = typeof s;
307
- if (t !== "string") {
308
- if (t === "function") return escape(s());
309
- if (Array.isArray(s)) {
310
- for (let i = 0; i < s.length; i++) s[i] = escape(s[i]);
311
- return s;
312
- }
313
- return s;
314
- }
315
- const delim = "<";
316
- const escDelim = "&lt;";
317
- let iDelim = s.indexOf(delim);
318
- let iAmp = s.indexOf("&");
319
- if (iDelim < 0 && iAmp < 0) return s;
320
- let left = 0,
321
- out = "";
322
- while (iDelim >= 0 && iAmp >= 0) {
323
- if (iDelim < iAmp) {
324
- if (left < iDelim) out += s.substring(left, iDelim);
325
- out += escDelim;
326
- left = iDelim + 1;
327
- iDelim = s.indexOf(delim, left);
328
- } else {
329
- if (left < iAmp) out += s.substring(left, iAmp);
330
- out += "&amp;";
331
- left = iAmp + 1;
332
- iAmp = s.indexOf("&", left);
333
- }
334
- }
335
- if (iDelim >= 0) {
336
- do {
337
- if (left < iDelim) out += s.substring(left, iDelim);
338
- out += escDelim;
339
- left = iDelim + 1;
340
- iDelim = s.indexOf(delim, left);
341
- } while (iDelim >= 0);
342
- } else while (iAmp >= 0) {
343
- if (left < iAmp) out += s.substring(left, iAmp);
344
- out += "&amp;";
345
- left = iAmp + 1;
346
- iAmp = s.indexOf("&", left);
347
- }
348
- return left < s.length ? out + s.substring(left) : out;
349
- }
350
- function resolveSSRNode(node) {
351
- const t = typeof node;
352
- if (t === "string") return node;
353
- if (node == null || t === "boolean") return "";
354
- if (Array.isArray(node)) {
355
- let prev = {};
356
- let mapped = "";
357
- for (let i = 0, len = node.length; i < len; i++) {
358
- if (typeof prev !== "object" && typeof node[i] !== "object") mapped += `<!--!$-->`;
359
- mapped += resolveSSRNode(prev = node[i]);
473
+ const ErrorContext = {
474
+ id: Symbol("ErrorContext"),
475
+ defaultValue: null
476
+ };
477
+ function createErrorBoundary(fn, fallback) {
478
+ const ctx = sharedConfig.context;
479
+ const owner = signals.createOwner();
480
+ const parent = signals.getOwner();
481
+ if (parent?.id != null) signals.getNextChildId(parent);
482
+ owner.id = owner.id + "0";
483
+ return signals.runWithOwner(owner, () => {
484
+ let result;
485
+ signals.setContext(ErrorContext, err => {
486
+ if (ctx && !ctx.noHydrate && owner.id) ctx.serialize(owner.id, err);
487
+ result = fallback(err, () => {});
488
+ });
489
+ try {
490
+ result = fn();
491
+ } catch (err) {
492
+ if (ctx && !ctx.noHydrate && owner.id) ctx.serialize(owner.id, err);
493
+ result = fallback(err, () => {});
360
494
  }
361
- return mapped;
362
- }
363
- if (t === "object") return node.t;
364
- if (t === "function") return resolveSSRNode(node());
365
- return String(node);
495
+ return () => result;
496
+ });
366
497
  }
367
- const sharedConfig = {
368
- context: undefined,
369
- getContextId() {
370
- if (!this.context) throw new Error(`getContextId cannot be used under non-hydrating context`);
371
- return getContextId(this.context.count);
372
- },
373
- getNextContextId() {
374
- if (!this.context) throw new Error(`getNextContextId cannot be used under non-hydrating context`);
375
- return getContextId(this.context.count++);
498
+ function createLoadBoundary(fn, fallback) {
499
+ try {
500
+ const result = fn();
501
+ return () => result;
502
+ } catch (err) {
503
+ if (err instanceof signals.NotReadyError) {
504
+ return () => fallback();
505
+ }
506
+ throw err;
376
507
  }
377
- };
378
- function getContextId(count) {
379
- const num = String(count),
380
- len = num.length - 1;
381
- return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : "") + num;
382
- }
383
- function setHydrateContext(context) {
384
- sharedConfig.context = context;
385
508
  }
386
- function nextHydrateContext() {
387
- return sharedConfig.context ? {
388
- ...sharedConfig.context,
389
- id: sharedConfig.getNextContextId(),
390
- count: 0
391
- } : undefined;
509
+ function untrack(fn) {
510
+ return fn();
392
511
  }
393
- function createUniqueId() {
394
- return sharedConfig.getNextContextId();
512
+ function flush() {}
513
+ function resolve(fn) {
514
+ throw new Error("resolve is not implemented on the server");
395
515
  }
396
- function createComponent(Comp, props) {
397
- if (sharedConfig.context && !sharedConfig.context.noHydrate) {
398
- const c = sharedConfig.context;
399
- setHydrateContext(nextHydrateContext());
400
- const r = Comp(props || {});
401
- setHydrateContext(c);
402
- return r;
403
- }
404
- return Comp(props || {});
405
- }
406
- function mergeProps(...sources) {
407
- const target = {};
408
- for (let i = 0; i < sources.length; i++) {
409
- let source = sources[i];
410
- if (typeof source === "function") source = source();
411
- if (source) {
412
- const descriptors = Object.getOwnPropertyDescriptors(source);
413
- for (const key in descriptors) {
414
- if (key in target) continue;
415
- Object.defineProperty(target, key, {
416
- enumerable: true,
417
- get() {
418
- for (let i = sources.length - 1; i >= 0; i--) {
419
- let v,
420
- s = sources[i];
421
- if (typeof s === "function") s = s();
422
- v = (s || {})[key];
423
- if (v !== undefined) return v;
424
- }
425
- }
426
- });
427
- }
516
+ function isPending(fn, fallback) {
517
+ try {
518
+ fn();
519
+ return false;
520
+ } catch (err) {
521
+ if (err instanceof signals.NotReadyError && arguments.length > 1) {
522
+ return fallback;
428
523
  }
524
+ throw err;
429
525
  }
430
- return target;
431
- }
432
- function splitProps(props, ...keys) {
433
- const descriptors = Object.getOwnPropertyDescriptors(props),
434
- split = k => {
435
- const clone = {};
436
- for (let i = 0; i < k.length; i++) {
437
- const key = k[i];
438
- if (descriptors[key]) {
439
- Object.defineProperty(clone, key, descriptors[key]);
440
- delete descriptors[key];
441
- }
442
- }
443
- return clone;
444
- };
445
- return keys.map(split).concat(split(Object.keys(descriptors)));
446
526
  }
447
- function simpleMap(props, wrap) {
448
- const list = props.each || [],
449
- len = list.length,
450
- fn = props.children;
451
- if (len) {
452
- let mapped = Array(len);
453
- for (let i = 0; i < len; i++) mapped[i] = wrap(fn, list[i], i);
454
- return mapped;
455
- }
456
- return props.fallback;
457
- }
458
- function For(props) {
459
- return simpleMap(props, (fn, item, i) => fn(item, () => i));
527
+ function latest(fn) {
528
+ return fn();
460
529
  }
461
- function Index(props) {
462
- return simpleMap(props, (fn, item, i) => fn(() => item, i));
530
+ function isRefreshing() {
531
+ return false;
463
532
  }
464
- function Show(props) {
465
- let c;
466
- return props.when ? typeof (c = props.children) === "function" ? c(props.keyed ? props.when : () => props.when) : c : props.fallback || "";
533
+ function refresh(fn) {
534
+ return fn();
467
535
  }
468
- function Switch(props) {
469
- let conditions = props.children;
470
- Array.isArray(conditions) || (conditions = [conditions]);
471
- for (let i = 0; i < conditions.length; i++) {
472
- const w = conditions[i].when;
473
- if (w) {
474
- const c = conditions[i].children;
475
- return typeof c === "function" ? c(conditions[i].keyed ? w : () => w) : c;
476
- }
477
- }
478
- return props.fallback || "";
536
+ function action(fn) {
537
+ return fn;
479
538
  }
480
- function Match(props) {
481
- return props;
539
+ function onSettled(callback) {
540
+ const o = signals.getOwner();
541
+ if (o?.id != null) signals.getNextChildId(o);
482
542
  }
483
- function resetErrorBoundaries() {}
484
- function ErrorBoundary(props) {
485
- let error,
486
- res,
487
- clean,
488
- sync = true;
489
- const ctx = sharedConfig.context;
490
- const id = sharedConfig.getContextId();
491
- function displayFallback() {
492
- cleanNode(clean);
493
- ctx.serialize(id, error);
494
- setHydrateContext({
495
- ...ctx,
496
- count: 0
543
+
544
+ const $DEVCOMP = Symbol("solid-dev-component");
545
+ function createContext(defaultValue, options) {
546
+ const id = Symbol(options && options.name || "");
547
+ function provider(props) {
548
+ return signals.createRoot(() => {
549
+ signals.setContext(provider, props.value);
550
+ return children(() => props.children);
497
551
  });
498
- const f = props.fallback;
499
- return typeof f === "function" && f.length ? f(error, () => {}) : f;
500
552
  }
501
- createMemo(() => {
502
- clean = Owner;
503
- return catchError(() => res = props.children, err => {
504
- error = err;
505
- !sync && ctx.replace("e" + id, displayFallback);
506
- sync = true;
507
- });
553
+ provider.id = id;
554
+ provider.defaultValue = defaultValue;
555
+ return provider;
556
+ }
557
+ function useContext(context) {
558
+ return signals.getContext(context);
559
+ }
560
+ function children(fn) {
561
+ const c = createMemo(fn, undefined, {
562
+ lazy: true
508
563
  });
509
- if (error) return displayFallback();
510
- sync = false;
511
- return {
512
- t: `<!--!$e${id}-->${resolveSSRNode(escape(res))}<!--!$/e${id}-->`
564
+ const memo = createMemo(() => signals.flatten(c()), undefined, {
565
+ lazy: true
566
+ });
567
+ memo.toArray = () => {
568
+ const v = memo();
569
+ return Array.isArray(v) ? v : v != null ? [v] : [];
513
570
  };
571
+ return memo;
514
572
  }
515
- const SuspenseContext = createContext();
516
- let resourceContext = null;
517
- function createResource(source, fetcher, options = {}) {
518
- if (typeof fetcher !== "function") {
519
- options = fetcher || {};
520
- fetcher = source;
521
- source = true;
522
- }
523
- const contexts = new Set();
524
- const id = sharedConfig.getNextContextId();
525
- let resource = {};
526
- let value = options.storage ? options.storage(options.initialValue)[0]() : options.initialValue;
527
- let p;
528
- let error;
529
- if (sharedConfig.context.async && options.ssrLoadFrom !== "initial") {
530
- resource = sharedConfig.context.resources[id] || (sharedConfig.context.resources[id] = {});
531
- if (resource.ref) {
532
- if (!resource.data && !resource.ref[0]._loading && !resource.ref[0].error) resource.ref[1].refetch();
533
- return resource.ref;
534
- }
535
- }
536
- const prepareResource = () => {
537
- if (error) throw error;
538
- const resolved = options.ssrLoadFrom !== "initial" && sharedConfig.context.async && "data" in sharedConfig.context.resources[id];
539
- if (!resolved && resourceContext) resourceContext.push(id);
540
- if (!resolved && read._loading) {
541
- const ctx = useContext(SuspenseContext);
542
- if (ctx) {
543
- ctx.resources.set(id, read);
544
- contexts.add(ctx);
545
- }
546
- }
547
- return resolved;
548
- };
549
- const read = () => {
550
- return prepareResource() ? sharedConfig.context.resources[id].data : value;
551
- };
552
- const loading = () => {
553
- prepareResource();
554
- return read._loading;
555
- };
556
- read._loading = false;
557
- read.error = undefined;
558
- read.state = "initialValue" in options ? "ready" : "unresolved";
559
- Object.defineProperties(read, {
560
- latest: {
561
- get() {
562
- return read();
563
- }
564
- },
565
- loading: {
566
- get() {
567
- return loading();
568
- }
569
- }
570
- });
571
- function load() {
572
- const ctx = sharedConfig.context;
573
- if (!ctx.async) return read._loading = !!(typeof source === "function" ? source() : source);
574
- if (ctx.resources && id in ctx.resources && "data" in ctx.resources[id]) {
575
- value = ctx.resources[id].data;
576
- return;
577
- }
578
- let lookup;
579
- try {
580
- resourceContext = [];
581
- lookup = typeof source === "function" ? source() : source;
582
- if (resourceContext.length) return;
583
- } finally {
584
- resourceContext = null;
585
- }
586
- if (!p) {
587
- if (lookup == null || lookup === false) return;
588
- p = fetcher(lookup, {
589
- value
590
- });
591
- }
592
- if (p != undefined && typeof p === "object" && "then" in p) {
593
- read._loading = true;
594
- read.state = "pending";
595
- p = p.then(res => {
596
- read._loading = false;
597
- read.state = "ready";
598
- ctx.resources[id].data = res;
599
- p = null;
600
- notifySuspense(contexts);
601
- return res;
602
- }).catch(err => {
603
- read._loading = false;
604
- read.state = "errored";
605
- read.error = error = castError(err);
606
- p = null;
607
- notifySuspense(contexts);
608
- throw error;
609
- });
610
- if (ctx.serialize) ctx.serialize(id, p, options.deferStream);
611
- return p;
612
- }
613
- ctx.resources[id].data = p;
614
- if (ctx.serialize) ctx.serialize(id, p);
615
- p = null;
616
- return ctx.resources[id].data;
617
- }
618
- if (options.ssrLoadFrom !== "initial") load();
619
- const ref = [read, {
620
- refetch: load,
621
- mutate: v => value = v
622
- }];
623
- if (p) resource.ref = ref;
624
- return ref;
573
+ function ssrRunInScope(fn) {
574
+ return fn;
575
+ }
576
+
577
+ function enableHydration() {}
578
+ function createComponent(Comp, props) {
579
+ return Comp(props || {});
625
580
  }
626
- function lazy(fn) {
581
+ function lazy(fn, moduleUrl) {
627
582
  let p;
628
- let load = id => {
583
+ let load = () => {
629
584
  if (!p) {
630
585
  p = fn();
631
- p.then(mod => p.resolved = mod.default);
632
- if (id) sharedConfig.context.lazy[id] = p;
586
+ p.then(mod => {
587
+ p.v = mod.default;
588
+ });
633
589
  }
634
590
  return p;
635
591
  };
636
- const contexts = new Set();
637
592
  const wrap = props => {
638
- const id = sharedConfig.context.id;
639
- let ref = sharedConfig.context.lazy[id];
640
- if (ref) p = ref;else load(id);
641
- if (p.resolved) return p.resolved(props);
642
- const ctx = useContext(SuspenseContext);
643
- const track = {
644
- _loading: true,
645
- error: undefined
646
- };
647
- if (ctx) {
648
- ctx.resources.set(id, track);
649
- contexts.add(ctx);
593
+ if (!moduleUrl) {
594
+ throw new Error("lazy() used in SSR without a moduleUrl. " + "All lazy() components require a moduleUrl for correct hydration. " + "This is typically injected by the bundler plugin.");
595
+ }
596
+ if (!sharedConfig.context?.resolveAssets) {
597
+ throw new Error(`lazy() called with moduleUrl "${moduleUrl}" but no asset manifest is set. ` + "Pass a manifest option to renderToStream/renderToString.");
598
+ }
599
+ load();
600
+ const ctx = sharedConfig.context;
601
+ if (!ctx?.registerAsset || !ctx.resolveAssets) return;
602
+ const assets = ctx.resolveAssets(moduleUrl);
603
+ if (assets) {
604
+ for (let i = 0; i < assets.css.length; i++) ctx.registerAsset("style", assets.css[i]);
605
+ for (let i = 0; i < assets.js.length; i++) ctx.registerAsset("module", assets.js[i]);
606
+ ctx.registerModule?.(moduleUrl, assets.js[0]);
650
607
  }
651
- if (sharedConfig.context.async) {
652
- sharedConfig.context.block(p.then(() => {
653
- track._loading = false;
654
- notifySuspense(contexts);
608
+ if (ctx?.async) {
609
+ ctx.block(p.then(() => {
610
+ p.s = "success";
655
611
  }));
656
612
  }
657
- return "";
613
+ return createMemo(() => {
614
+ if (!p.v) throw new signals.NotReadyError(p);
615
+ return p.v(props);
616
+ });
658
617
  };
659
618
  wrap.preload = load;
660
619
  return wrap;
661
620
  }
662
- function suspenseComplete(c) {
663
- for (const r of c.resources.values()) {
664
- if (r._loading) return false;
665
- }
666
- return true;
621
+ function createUniqueId() {
622
+ return sharedConfig.getNextContextId();
623
+ }
624
+
625
+ function For(props) {
626
+ const options = "fallback" in props ? {
627
+ keyed: props.keyed,
628
+ fallback: () => props.fallback
629
+ } : {
630
+ keyed: props.keyed
631
+ };
632
+ return createMemo(mapArray(() => props.each, props.children, options));
667
633
  }
668
- function notifySuspense(contexts) {
669
- for (const c of contexts) {
670
- if (!suspenseComplete(c)) {
671
- continue;
634
+ function Repeat(props) {
635
+ const options = "fallback" in props ? {
636
+ fallback: () => props.fallback
637
+ } : {};
638
+ options.from = () => props.from;
639
+ return repeat(() => props.count, index => typeof props.children === "function" ? props.children(index) : props.children, options);
640
+ }
641
+ function Show(props) {
642
+ const o = signals.getOwner();
643
+ if (o?.id != null) {
644
+ signals.getNextChildId(o);
645
+ if (!props.keyed) signals.getNextChildId(o);
646
+ }
647
+ return createMemo(() => {
648
+ const when = props.when;
649
+ if (when) {
650
+ const child = props.children;
651
+ if (typeof child === "function" && child.length > 0) {
652
+ return child(() => when);
653
+ }
654
+ return child;
672
655
  }
673
- c.completed();
674
- contexts.delete(c);
675
- }
656
+ return props.fallback;
657
+ });
676
658
  }
677
- function enableScheduling() {}
678
- function enableHydration() {}
679
- function startTransition(fn) {
680
- fn();
659
+ function Switch(props) {
660
+ const chs = children(() => props.children);
661
+ const o = signals.getOwner();
662
+ if (o?.id != null) signals.getNextChildId(o);
663
+ return createMemo(() => {
664
+ let conds = chs();
665
+ if (!Array.isArray(conds)) conds = [conds];
666
+ for (let i = 0; i < conds.length; i++) {
667
+ const w = conds[i].when;
668
+ if (w) {
669
+ const c = conds[i].children;
670
+ return typeof c === "function" && c.length > 0 ? c(() => w) : c;
671
+ }
672
+ }
673
+ return props.fallback;
674
+ });
681
675
  }
682
- function useTransition() {
683
- return [() => false, fn => {
684
- fn();
685
- }];
676
+ function Match(props) {
677
+ return props;
686
678
  }
687
- function SuspenseList(props) {
688
- if (sharedConfig.context && !sharedConfig.context.noHydrate) {
689
- const c = sharedConfig.context;
690
- setHydrateContext(nextHydrateContext());
691
- const result = props.children;
692
- setHydrateContext(c);
693
- return result;
679
+ function Errored(props) {
680
+ return createErrorBoundary(() => props.children, (err, reset) => {
681
+ const f = props.fallback;
682
+ return typeof f === "function" && f.length ? f(err, reset) : f;
683
+ });
684
+ }
685
+
686
+ function ssrHandleError(err) {
687
+ if (err instanceof signals.NotReadyError) {
688
+ return err.source;
689
+ }
690
+ const handler = signals.getContext(ErrorContext);
691
+ if (handler) {
692
+ handler(err);
693
+ return;
694
694
  }
695
- return props.children;
695
+ throw err;
696
696
  }
697
- function Suspense(props) {
698
- let done;
697
+ function Loading(props) {
699
698
  const ctx = sharedConfig.context;
700
- const id = sharedConfig.getContextId();
701
- const o = createOwner();
702
- const value = ctx.suspense[id] || (ctx.suspense[id] = {
703
- resources: new Map(),
704
- completed: () => {
705
- const res = runSuspense();
706
- if (suspenseComplete(value)) {
707
- done(resolveSSRNode(escape(res)));
699
+ if (!ctx) {
700
+ return createLoadBoundary(() => props.children, () => props.fallback);
701
+ }
702
+ const o = signals.createOwner();
703
+ const id = o.id;
704
+ o.id = id + "00";
705
+ let runPromise;
706
+ let serializeBuffer = [];
707
+ const origSerialize = ctx.serialize;
708
+ function runInitially() {
709
+ o.dispose(false);
710
+ serializeBuffer = [];
711
+ ctx.serialize = (id, p, deferStream) => {
712
+ serializeBuffer.push([id, p, deferStream]);
713
+ };
714
+ const prevBoundary = ctx._currentBoundaryId;
715
+ ctx._currentBoundaryId = id;
716
+ const result = signals.runWithOwner(o, () => {
717
+ try {
718
+ return ctx.resolve(props.children);
719
+ } catch (err) {
720
+ runPromise = ssrHandleError(err);
708
721
  }
709
- }
710
- });
711
- function suspenseError(err) {
712
- if (!done || !done(undefined, err)) {
713
- runWithOwner(o.owner, () => {
714
- throw err;
715
- });
716
- }
717
- }
718
- function runSuspense() {
719
- setHydrateContext({
720
- ...ctx,
721
- count: 0
722
722
  });
723
- cleanNode(o);
724
- return runWithOwner(o, () => createComponent(SuspenseContext.Provider, {
725
- value,
726
- get children() {
727
- return catchError(() => props.children, suspenseError);
728
- }
729
- }));
723
+ ctx._currentBoundaryId = prevBoundary;
724
+ ctx.serialize = origSerialize;
725
+ return result;
730
726
  }
731
- const res = runSuspense();
732
- if (suspenseComplete(value)) {
733
- delete ctx.suspense[id];
734
- return res;
727
+ let ret = runInitially();
728
+ if (!(runPromise || ret?.p?.length)) {
729
+ for (const args of serializeBuffer) origSerialize(args[0], args[1], args[2]);
730
+ serializeBuffer = [];
731
+ const modules = ctx.getBoundaryModules?.(id);
732
+ if (modules) ctx.serialize(id + "_assets", modules);
733
+ return ret;
735
734
  }
736
- done = ctx.async ? ctx.registerFragment(id) : undefined;
737
- return catchError(() => {
738
- if (ctx.async) {
739
- setHydrateContext({
740
- ...ctx,
741
- count: 0,
742
- id: ctx.id + "0F",
743
- noHydrate: true
744
- });
745
- const res = {
746
- t: `<template id="pl-${id}"></template>${resolveSSRNode(escape(props.fallback))}<!--pl-${id}-->`
747
- };
748
- setHydrateContext(ctx);
749
- return res;
750
- }
751
- setHydrateContext({
752
- ...ctx,
753
- count: 0,
754
- id: ctx.id + "0F"
755
- });
756
- ctx.serialize(id, "$$f");
757
- return props.fallback;
758
- }, suspenseError);
735
+ const fallbackOwner = signals.createOwner({
736
+ id
737
+ });
738
+ signals.getNextChildId(fallbackOwner);
739
+ if (ctx.async) {
740
+ const done = ctx.registerFragment(id);
741
+ (async () => {
742
+ try {
743
+ while (runPromise) {
744
+ o.dispose(false);
745
+ await runPromise;
746
+ runPromise = undefined;
747
+ ret = runInitially();
748
+ }
749
+ for (const args of serializeBuffer) origSerialize(args[0], args[1], args[2]);
750
+ serializeBuffer = [];
751
+ while (ret.p.length) {
752
+ await Promise.all(ret.p);
753
+ ret = signals.runWithOwner(o, () => ctx.ssr(ret.t, ...ret.h));
754
+ }
755
+ done(ret.t[0]);
756
+ } catch (err) {
757
+ done(undefined, err);
758
+ }
759
+ })();
760
+ return signals.runWithOwner(fallbackOwner, () => ctx.ssr([`<template id="pl-${id}"></template>`, `<!--pl-${id}-->`], ctx.escape(props.fallback)));
761
+ }
762
+ for (const args of serializeBuffer) origSerialize(args[0], args[1], args[2]);
763
+ serializeBuffer = [];
764
+ const modules = ctx.getBoundaryModules?.(id);
765
+ if (modules) ctx.serialize(id + "_assets", modules);
766
+ ctx.serialize(id, "$$f");
767
+ return signals.runWithOwner(fallbackOwner, () => props.fallback);
759
768
  }
760
769
 
770
+ const DEV = undefined;
771
+
772
+ Object.defineProperty(exports, "$PROXY", {
773
+ enumerable: true,
774
+ get: function () { return signals.$PROXY; }
775
+ });
776
+ Object.defineProperty(exports, "$TRACK", {
777
+ enumerable: true,
778
+ get: function () { return signals.$TRACK; }
779
+ });
780
+ Object.defineProperty(exports, "NotReadyError", {
781
+ enumerable: true,
782
+ get: function () { return signals.NotReadyError; }
783
+ });
784
+ Object.defineProperty(exports, "createOwner", {
785
+ enumerable: true,
786
+ get: function () { return signals.createOwner; }
787
+ });
788
+ Object.defineProperty(exports, "createRoot", {
789
+ enumerable: true,
790
+ get: function () { return signals.createRoot; }
791
+ });
792
+ Object.defineProperty(exports, "flatten", {
793
+ enumerable: true,
794
+ get: function () { return signals.flatten; }
795
+ });
796
+ Object.defineProperty(exports, "getNextChildId", {
797
+ enumerable: true,
798
+ get: function () { return signals.getNextChildId; }
799
+ });
800
+ Object.defineProperty(exports, "getOwner", {
801
+ enumerable: true,
802
+ get: function () { return signals.getOwner; }
803
+ });
804
+ Object.defineProperty(exports, "isEqual", {
805
+ enumerable: true,
806
+ get: function () { return signals.isEqual; }
807
+ });
808
+ Object.defineProperty(exports, "isWrappable", {
809
+ enumerable: true,
810
+ get: function () { return signals.isWrappable; }
811
+ });
812
+ Object.defineProperty(exports, "merge", {
813
+ enumerable: true,
814
+ get: function () { return signals.merge; }
815
+ });
816
+ Object.defineProperty(exports, "omit", {
817
+ enumerable: true,
818
+ get: function () { return signals.omit; }
819
+ });
820
+ Object.defineProperty(exports, "onCleanup", {
821
+ enumerable: true,
822
+ get: function () { return signals.onCleanup; }
823
+ });
824
+ Object.defineProperty(exports, "runWithOwner", {
825
+ enumerable: true,
826
+ get: function () { return signals.runWithOwner; }
827
+ });
828
+ Object.defineProperty(exports, "snapshot", {
829
+ enumerable: true,
830
+ get: function () { return signals.snapshot; }
831
+ });
832
+ Object.defineProperty(exports, "storePath", {
833
+ enumerable: true,
834
+ get: function () { return signals.storePath; }
835
+ });
761
836
  exports.$DEVCOMP = $DEVCOMP;
762
- exports.$PROXY = $PROXY;
763
- exports.$TRACK = $TRACK;
764
837
  exports.DEV = DEV;
765
- exports.ErrorBoundary = ErrorBoundary;
838
+ exports.Errored = Errored;
766
839
  exports.For = For;
767
- exports.Index = Index;
840
+ exports.Loading = Loading;
768
841
  exports.Match = Match;
842
+ exports.Repeat = Repeat;
769
843
  exports.Show = Show;
770
- exports.Suspense = Suspense;
771
- exports.SuspenseList = SuspenseList;
772
844
  exports.Switch = Switch;
773
- exports.batch = batch;
774
- exports.catchError = catchError;
845
+ exports.action = action;
775
846
  exports.children = children;
776
847
  exports.createComponent = createComponent;
777
- exports.createComputed = createComputed;
778
848
  exports.createContext = createContext;
779
- exports.createDeferred = createDeferred;
849
+ exports.createDeepProxy = createDeepProxy;
780
850
  exports.createEffect = createEffect;
781
851
  exports.createMemo = createMemo;
852
+ exports.createOptimistic = createOptimistic;
853
+ exports.createOptimisticStore = createOptimisticStore;
854
+ exports.createProjection = createProjection;
782
855
  exports.createReaction = createReaction;
783
856
  exports.createRenderEffect = createRenderEffect;
784
- exports.createResource = createResource;
785
- exports.createRoot = createRoot;
786
- exports.createSelector = createSelector;
787
857
  exports.createSignal = createSignal;
858
+ exports.createStore = createStore;
859
+ exports.createTrackedEffect = createTrackedEffect;
788
860
  exports.createUniqueId = createUniqueId;
789
- exports.enableExternalSource = enableExternalSource;
861
+ exports.deep = deep;
790
862
  exports.enableHydration = enableHydration;
791
- exports.enableScheduling = enableScheduling;
792
- exports.equalFn = equalFn;
793
- exports.from = from;
794
- exports.getListener = getListener;
795
- exports.getOwner = getOwner;
796
- exports.indexArray = indexArray;
863
+ exports.flush = flush;
864
+ exports.getObserver = getObserver;
865
+ exports.isPending = isPending;
866
+ exports.isRefreshing = isRefreshing;
867
+ exports.latest = latest;
797
868
  exports.lazy = lazy;
798
869
  exports.mapArray = mapArray;
799
- exports.mergeProps = mergeProps;
800
- exports.observable = observable;
801
- exports.on = on;
802
- exports.onCleanup = onCleanup;
803
- exports.onError = onError;
804
- exports.onMount = onMount;
805
- exports.requestCallback = requestCallback;
806
- exports.resetErrorBoundaries = resetErrorBoundaries;
807
- exports.runWithOwner = runWithOwner;
870
+ exports.onSettled = onSettled;
871
+ exports.reconcile = reconcile;
872
+ exports.refresh = refresh;
873
+ exports.repeat = repeat;
874
+ exports.resolve = resolve;
808
875
  exports.sharedConfig = sharedConfig;
809
- exports.splitProps = splitProps;
810
- exports.startTransition = startTransition;
876
+ exports.ssrHandleError = ssrHandleError;
877
+ exports.ssrRunInScope = ssrRunInScope;
811
878
  exports.untrack = untrack;
812
879
  exports.useContext = useContext;
813
- exports.useTransition = useTransition;