ripple 0.2.80 → 0.2.82

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.
@@ -2,29 +2,29 @@
2
2
  /** @import { TrackOptions } from '#public' */
3
3
 
4
4
  import {
5
- destroy_block,
6
- destroy_non_branch_children,
7
- effect,
8
- is_destroyed,
9
- render,
5
+ destroy_block,
6
+ destroy_non_branch_children,
7
+ effect,
8
+ is_destroyed,
9
+ render,
10
10
  } from './blocks.js';
11
11
  import {
12
- ASYNC_BLOCK,
13
- BLOCK_HAS_RUN,
14
- BRANCH_BLOCK,
15
- DERIVED,
16
- COMPUTED_PROPERTY,
17
- CONTAINS_TEARDOWN,
18
- CONTAINS_UPDATE,
19
- DEFERRED,
20
- DESTROYED,
21
- EFFECT_BLOCK,
22
- PAUSED,
23
- ROOT_BLOCK,
24
- TRACKED,
25
- TRY_BLOCK,
26
- UNINITIALIZED,
27
- REF_PROP,
12
+ ASYNC_BLOCK,
13
+ BLOCK_HAS_RUN,
14
+ BRANCH_BLOCK,
15
+ DERIVED,
16
+ COMPUTED_PROPERTY,
17
+ CONTAINS_TEARDOWN,
18
+ CONTAINS_UPDATE,
19
+ DEFERRED,
20
+ DESTROYED,
21
+ EFFECT_BLOCK,
22
+ PAUSED,
23
+ ROOT_BLOCK,
24
+ TRACKED,
25
+ TRY_BLOCK,
26
+ UNINITIALIZED,
27
+ REF_PROP,
28
28
  } from './constants.js';
29
29
  import { capture, suspend } from './try.js';
30
30
  import { define_property, get_descriptors, is_array, is_tracked_object } from './utils.js';
@@ -60,124 +60,124 @@ export let tracking = false;
60
60
  export let teardown = false;
61
61
 
62
62
  function increment_clock() {
63
- return ++clock;
63
+ return ++clock;
64
64
  }
65
65
 
66
66
  /**
67
67
  * @param {Block | null} block
68
68
  */
69
69
  export function set_active_block(block) {
70
- active_block = block;
70
+ active_block = block;
71
71
  }
72
72
 
73
73
  /**
74
74
  * @param {Block | Derived | null} reaction
75
75
  */
76
76
  export function set_active_reaction(reaction) {
77
- active_reaction = reaction;
77
+ active_reaction = reaction;
78
78
  }
79
79
 
80
80
  /**
81
81
  * @param {Component | null} component
82
82
  */
83
83
  export function set_active_component(component) {
84
- active_component = component;
84
+ active_component = component;
85
85
  }
86
86
 
87
87
  /**
88
88
  * @param {boolean} value
89
89
  */
90
90
  export function set_tracking(value) {
91
- tracking = value;
91
+ tracking = value;
92
92
  }
93
93
 
94
94
  /**
95
95
  * @param {Block} block
96
96
  */
97
97
  export function run_teardown(block) {
98
- var fn = block.t;
99
- if (fn !== null) {
100
- var previous_block = active_block;
101
- var previous_reaction = active_reaction;
102
- var previous_tracking = tracking;
103
- var previous_teardown = teardown;
104
-
105
- try {
106
- active_block = null;
107
- active_reaction = null;
108
- tracking = false;
109
- teardown = true;
110
- fn.call(null);
111
- } finally {
112
- active_block = previous_block;
113
- active_reaction = previous_reaction;
114
- tracking = previous_tracking;
115
- teardown = previous_teardown;
116
- }
117
- }
98
+ var fn = block.t;
99
+ if (fn !== null) {
100
+ var previous_block = active_block;
101
+ var previous_reaction = active_reaction;
102
+ var previous_tracking = tracking;
103
+ var previous_teardown = teardown;
104
+
105
+ try {
106
+ active_block = null;
107
+ active_reaction = null;
108
+ tracking = false;
109
+ teardown = true;
110
+ fn.call(null);
111
+ } finally {
112
+ active_block = previous_block;
113
+ active_reaction = previous_reaction;
114
+ tracking = previous_tracking;
115
+ teardown = previous_teardown;
116
+ }
117
+ }
118
118
  }
119
119
 
120
120
  /**
121
121
  * @param {Derived} computed
122
122
  */
123
123
  function update_derived(computed) {
124
- var value = computed.v;
124
+ var value = computed.v;
125
125
 
126
- if (value === UNINITIALIZED || is_tracking_dirty(computed.d)) {
127
- value = run_derived(computed);
126
+ if (value === UNINITIALIZED || is_tracking_dirty(computed.d)) {
127
+ value = run_derived(computed);
128
128
 
129
- if (value !== computed.v) {
130
- computed.v = value;
131
- computed.c = increment_clock();
132
- }
133
- }
129
+ if (value !== computed.v) {
130
+ computed.v = value;
131
+ computed.c = increment_clock();
132
+ }
133
+ }
134
134
  }
135
135
 
136
136
  /**
137
137
  * @param {Derived} computed
138
138
  */
139
139
  function destroy_computed_children(computed) {
140
- var blocks = computed.blocks;
141
-
142
- if (blocks !== null) {
143
- computed.blocks = null;
144
- for (var i = 0; i < blocks.length; i++) {
145
- destroy_block(blocks[i]);
146
- }
147
- }
140
+ var blocks = computed.blocks;
141
+
142
+ if (blocks !== null) {
143
+ computed.blocks = null;
144
+ for (var i = 0; i < blocks.length; i++) {
145
+ destroy_block(blocks[i]);
146
+ }
147
+ }
148
148
  }
149
149
 
150
150
  /**
151
151
  * @param {Derived} computed
152
152
  */
153
153
  function run_derived(computed) {
154
- var previous_block = active_block;
155
- var previous_reaction = active_reaction;
156
- var previous_tracking = tracking;
157
- var previous_dependency = active_dependency;
158
- var previous_component = active_component;
159
-
160
- try {
161
- active_block = computed.b;
162
- active_reaction = computed;
163
- tracking = true;
164
- active_dependency = null;
165
- active_component = computed.co;
166
-
167
- destroy_computed_children(computed);
168
-
169
- var value = computed.fn();
170
-
171
- computed.d = active_dependency;
172
-
173
- return value;
174
- } finally {
175
- active_block = previous_block;
176
- active_reaction = previous_reaction;
177
- tracking = previous_tracking;
178
- active_dependency = previous_dependency;
179
- active_component = previous_component;
180
- }
154
+ var previous_block = active_block;
155
+ var previous_reaction = active_reaction;
156
+ var previous_tracking = tracking;
157
+ var previous_dependency = active_dependency;
158
+ var previous_component = active_component;
159
+
160
+ try {
161
+ active_block = computed.b;
162
+ active_reaction = computed;
163
+ tracking = true;
164
+ active_dependency = null;
165
+ active_component = computed.co;
166
+
167
+ destroy_computed_children(computed);
168
+
169
+ var value = computed.fn();
170
+
171
+ computed.d = active_dependency;
172
+
173
+ return value;
174
+ } finally {
175
+ active_block = previous_block;
176
+ active_reaction = previous_reaction;
177
+ tracking = previous_tracking;
178
+ active_dependency = previous_dependency;
179
+ active_component = previous_component;
180
+ }
181
181
  }
182
182
 
183
183
  /**
@@ -185,157 +185,172 @@ function run_derived(computed) {
185
185
  * @param {Block} block
186
186
  */
187
187
  export function handle_error(error, block) {
188
- /** @type {Block | null} */
189
- var current = block;
190
-
191
- while (current !== null) {
192
- var state = current.s;
193
- if ((current.f & TRY_BLOCK) !== 0 && state.c !== null) {
194
- state.c(error);
195
- return;
196
- }
197
- current = current.p;
198
- }
199
-
200
- throw error;
188
+ /** @type {Block | null} */
189
+ var current = block;
190
+
191
+ while (current !== null) {
192
+ var state = current.s;
193
+ if ((current.f & TRY_BLOCK) !== 0 && state.c !== null) {
194
+ state.c(error);
195
+ return;
196
+ }
197
+ current = current.p;
198
+ }
199
+
200
+ throw error;
201
201
  }
202
202
 
203
203
  /**
204
204
  * @param {Block} block
205
205
  */
206
206
  export function run_block(block) {
207
- var previous_block = active_block;
208
- var previous_reaction = active_reaction;
209
- var previous_tracking = tracking;
210
- var previous_dependency = active_dependency;
211
- var previous_component = active_component;
212
-
213
- try {
214
- active_block = block;
215
- active_reaction = block;
216
- active_component = block.co;
217
-
218
- destroy_non_branch_children(block);
219
- run_teardown(block);
220
-
221
- tracking = (block.f & (ROOT_BLOCK | BRANCH_BLOCK)) === 0;
222
- active_dependency = null;
223
- var res = block.fn();
224
-
225
- if (typeof res === 'function') {
226
- block.t = res;
227
- /** @type {Block | null} */
228
- let current = block;
229
-
230
- while (current !== null && (current.f & CONTAINS_TEARDOWN) === 0) {
231
- current.f ^= CONTAINS_TEARDOWN;
232
- current = current.p;
233
- }
234
- }
235
-
236
- block.d = active_dependency;
237
- } catch (error) {
238
- handle_error(error, block);
239
- } finally {
240
- active_block = previous_block;
241
- active_reaction = previous_reaction;
242
- tracking = previous_tracking;
243
- active_dependency = previous_dependency;
244
- active_component = previous_component;
245
- }
207
+ var previous_block = active_block;
208
+ var previous_reaction = active_reaction;
209
+ var previous_tracking = tracking;
210
+ var previous_dependency = active_dependency;
211
+ var previous_component = active_component;
212
+
213
+ try {
214
+ active_block = block;
215
+ active_reaction = block;
216
+ active_component = block.co;
217
+
218
+ destroy_non_branch_children(block);
219
+ run_teardown(block);
220
+
221
+ tracking = (block.f & (ROOT_BLOCK | BRANCH_BLOCK)) === 0;
222
+ active_dependency = null;
223
+ var res = block.fn();
224
+
225
+ if (typeof res === 'function') {
226
+ block.t = res;
227
+ /** @type {Block | null} */
228
+ let current = block;
229
+
230
+ while (current !== null && (current.f & CONTAINS_TEARDOWN) === 0) {
231
+ current.f ^= CONTAINS_TEARDOWN;
232
+ current = current.p;
233
+ }
234
+ }
235
+
236
+ block.d = active_dependency;
237
+ } catch (error) {
238
+ handle_error(error, block);
239
+ } finally {
240
+ active_block = previous_block;
241
+ active_reaction = previous_reaction;
242
+ tracking = previous_tracking;
243
+ active_dependency = previous_dependency;
244
+ active_component = previous_component;
245
+ }
246
246
  }
247
247
 
248
+ var empty_get_set = { get: undefined, set: undefined };
249
+
248
250
  /**
249
251
  *
250
252
  * @param {any} v
251
253
  * @param {Block} b
254
+ * @param {Function} [get]
255
+ * @param {Function} [set]
252
256
  * @returns {Tracked}
253
257
  */
254
- export function tracked(v, b) {
255
- // TODO: now we expose tracked, we should likely block access in DEV somehow
256
- return {
257
- b,
258
- c: 0,
259
- f: TRACKED,
260
- v,
261
- };
258
+ export function tracked(v, b, get, set) {
259
+ // TODO: now we expose tracked, we should likely block access in DEV somehow
260
+ return {
261
+ a: get || set ? { get, set } : empty_get_set,
262
+ b,
263
+ c: 0,
264
+ f: TRACKED,
265
+ v,
266
+ };
262
267
  }
263
268
 
264
269
  /**
265
270
  * @param {any} fn
266
271
  * @param {any} block
272
+ * @param {Function} [get]
273
+ * @param {Function} [set]
267
274
  * @returns {Derived}
268
275
  */
269
- export function derived(fn, block) {
270
- return {
271
- b: block,
272
- blocks: null,
273
- c: 0,
274
- co: active_component,
275
- d: null,
276
- f: TRACKED | DERIVED,
277
- fn,
278
- v: UNINITIALIZED,
279
- };
276
+ export function derived(fn, block, get, set) {
277
+ return {
278
+ a: get || set ? { get, set } : empty_get_set,
279
+ b: block,
280
+ blocks: null,
281
+ c: 0,
282
+ co: active_component,
283
+ d: null,
284
+ f: TRACKED | DERIVED,
285
+ fn,
286
+ v: UNINITIALIZED,
287
+ };
280
288
  }
281
289
 
282
290
  /**
283
291
  * @param {any} v
284
- * @param {TrackOptions | undefined} o
292
+ * @param {TrackOptions<any> | undefined} o
285
293
  * @param {Block} b
286
294
  * @returns {Tracked | Derived | Tracked[]}
287
295
  */
288
296
  export function track(v, o, b) {
289
- var is_tracked = is_tracked_object(v);
290
-
291
- if (o === undefined) {
292
- if (is_tracked) {
293
- return v;
294
- }
295
-
296
- if (typeof v === 'function') {
297
- return derived(v, b);
298
- }
299
- return tracked(v, b);
300
- }
301
-
302
- if (is_tracked || typeof v !== "object" || v === null || is_array(v)) {
303
- throw new TypeError('Invalid value: expected a non-tracked object');
304
- }
305
-
306
- var list = o.split ?? [];
307
- /** @type {Tracked[]} */
308
- var out = [];
309
- /** @type {Record<string|symbol, any>} */
310
- var rest = {};
311
- /** @type {Record<PropertyKey, any | null>} */
312
- var descriptors = get_descriptors(v);
313
-
314
- for (let i = 0, key, t; i < list.length; i++) {
315
- key = list[i];
316
-
317
- if (is_tracked_object(v[key])) {
318
- t = v[key];
319
- } else {
320
- t = define_property(tracked(undefined, b), 'v', descriptors[key]);
321
- }
322
-
323
- out[i] = t;
324
- descriptors[key] = null;
325
- }
326
-
327
- var props = Reflect.ownKeys(descriptors);
328
- for (let i = 0, key; i < props.length; i++) {
329
- key = props[i];
330
- if (descriptors[key] === null) {
331
- continue;
332
- }
333
- define_property(rest, key, descriptors[key]);
334
- }
335
-
336
- out.push(tracked(rest, b));
337
-
338
- return out;
297
+ var is_tracked = is_tracked_object(v);
298
+ var get;
299
+ var set;
300
+
301
+ if (o !== undefined) {
302
+ get = o.get;
303
+ set = o.set;
304
+ }
305
+
306
+ if (o === undefined || get || set) {
307
+ if (is_tracked) {
308
+ return v;
309
+ }
310
+
311
+ if (typeof v === 'function') {
312
+ return derived(v, b, get, set);
313
+ }
314
+ return tracked(v, b, get, set);
315
+ }
316
+
317
+ if (is_tracked || typeof v !== 'object' || v === null || is_array(v)) {
318
+ throw new TypeError('Invalid value: expected a non-tracked object');
319
+ }
320
+
321
+ var list = o.split ?? [];
322
+ /** @type {Tracked[]} */
323
+ var out = [];
324
+ /** @type {Record<string|symbol, any>} */
325
+ var rest = {};
326
+ /** @type {Record<PropertyKey, any | null>} */
327
+ var descriptors = get_descriptors(v);
328
+
329
+ for (let i = 0, key, t; i < list.length; i++) {
330
+ key = list[i];
331
+
332
+ if (is_tracked_object(v[key])) {
333
+ t = v[key];
334
+ } else {
335
+ t = define_property(tracked(undefined, b), 'v', descriptors[key]);
336
+ }
337
+
338
+ out[i] = t;
339
+ descriptors[key] = null;
340
+ }
341
+
342
+ var props = Reflect.ownKeys(descriptors);
343
+ for (let i = 0, key; i < props.length; i++) {
344
+ key = props[i];
345
+ if (descriptors[key] === null) {
346
+ continue;
347
+ }
348
+ define_property(rest, key, descriptors[key]);
349
+ }
350
+
351
+ out.push(tracked(rest, b));
352
+
353
+ return out;
339
354
  }
340
355
 
341
356
  /**
@@ -343,412 +358,420 @@ export function track(v, o, b) {
343
358
  * @returns {Dependency}
344
359
  */
345
360
  function create_dependency(tracked) {
346
- var reaction = /** @type {Derived | Block} **/ (active_reaction);
347
- var existing = reaction.d;
348
-
349
- // Recycle tracking entries
350
- if (existing !== null) {
351
- reaction.d = existing.n;
352
- existing.c = tracked.c;
353
- existing.t = tracked;
354
- existing.n = null;
355
- return existing;
356
- }
357
-
358
- return {
359
- c: tracked.c,
360
- t: tracked,
361
- n: null,
362
- };
361
+ var reaction = /** @type {Derived | Block} **/ (active_reaction);
362
+ var existing = reaction.d;
363
+
364
+ // Recycle tracking entries
365
+ if (existing !== null) {
366
+ reaction.d = existing.n;
367
+ existing.c = tracked.c;
368
+ existing.t = tracked;
369
+ existing.n = null;
370
+ return existing;
371
+ }
372
+
373
+ return {
374
+ c: tracked.c,
375
+ t: tracked,
376
+ n: null,
377
+ };
363
378
  }
364
379
 
365
380
  /**
366
381
  * @param {Dependency | null} tracking
367
382
  */
368
383
  function is_tracking_dirty(tracking) {
369
- if (tracking === null) {
370
- return false;
371
- }
372
- while (tracking !== null) {
373
- var tracked = tracking.t;
374
-
375
- if ((tracked.f & DERIVED) !== 0) {
376
- update_derived(/** @type {Derived} **/ (tracked));
377
- }
378
-
379
- if (tracked.c > tracking.c) {
380
- return true;
381
- }
382
- tracking = tracking.n;
383
- }
384
-
385
- return false;
384
+ if (tracking === null) {
385
+ return false;
386
+ }
387
+ while (tracking !== null) {
388
+ var tracked = tracking.t;
389
+
390
+ if ((tracked.f & DERIVED) !== 0) {
391
+ update_derived(/** @type {Derived} **/ (tracked));
392
+ }
393
+
394
+ if (tracked.c > tracking.c) {
395
+ return true;
396
+ }
397
+ tracking = tracking.n;
398
+ }
399
+
400
+ return false;
386
401
  }
387
402
 
388
403
  /**
389
404
  * @param {Block} block
390
405
  */
391
406
  export function is_block_dirty(block) {
392
- var flags = block.f;
407
+ var flags = block.f;
393
408
 
394
- if ((flags & (ROOT_BLOCK | BRANCH_BLOCK)) !== 0) {
395
- return false;
396
- }
397
- if ((flags & BLOCK_HAS_RUN) === 0) {
398
- block.f ^= BLOCK_HAS_RUN;
399
- return true;
400
- }
409
+ if ((flags & (ROOT_BLOCK | BRANCH_BLOCK)) !== 0) {
410
+ return false;
411
+ }
412
+ if ((flags & BLOCK_HAS_RUN) === 0) {
413
+ block.f ^= BLOCK_HAS_RUN;
414
+ return true;
415
+ }
401
416
 
402
- return is_tracking_dirty(block.d);
417
+ return is_tracking_dirty(block.d);
403
418
  }
404
419
 
405
420
  export function async_computed(fn, block) {
406
- let parent = active_reaction;
407
- var t = tracked(UNINITIALIZED, block);
408
- var promise;
409
- var new_values = new Map();
410
-
411
- render(() => {
412
- var [current, deferred] = capture_deferred(() => (promise = fn()));
413
-
414
- var restore = capture();
415
- var unuspend;
416
-
417
- if (deferred === null) {
418
- unuspend = suspend();
419
- } else {
420
- for (var i = 0; i < deferred.length; i++) {
421
- var tracked = deferred[i];
422
- new_values.set(tracked, { v: tracked.v, c: tracked.c });
423
- }
424
- }
425
-
426
- promise.then((v) => {
427
- if (is_destroyed(parent)) {
428
- return;
429
- }
430
- if (promise === current && t.v !== v) {
431
- restore();
432
-
433
- if (t.v === UNINITIALIZED) {
434
- t.v = v;
435
- } else {
436
- set(t, v, block);
437
- }
438
- }
439
-
440
- if (deferred === null) {
441
- unuspend();
442
- } else if (promise === current) {
443
- for (var i = 0; i < deferred.length; i++) {
444
- var tracked = deferred[i];
445
- var { v, c } = new_values.get(tracked);
446
- tracked.v = v;
447
- tracked.c = c;
448
- schedule_update(tracked.b);
449
- }
450
- new_values.clear();
451
- }
452
- });
453
- }, ASYNC_BLOCK);
454
-
455
- return new Promise(async (resolve) => {
456
- var p;
457
- while (p !== (p = promise)) await p;
458
- return resolve(t);
459
- });
421
+ let parent = active_reaction;
422
+ var t = tracked(UNINITIALIZED, block);
423
+ var promise;
424
+ var new_values = new Map();
425
+
426
+ render(() => {
427
+ var [current, deferred] = capture_deferred(() => (promise = fn()));
428
+
429
+ var restore = capture();
430
+ var unuspend;
431
+
432
+ if (deferred === null) {
433
+ unuspend = suspend();
434
+ } else {
435
+ for (var i = 0; i < deferred.length; i++) {
436
+ var tracked = deferred[i];
437
+ new_values.set(tracked, { v: tracked.v, c: tracked.c });
438
+ }
439
+ }
440
+
441
+ promise.then((v) => {
442
+ if (is_destroyed(parent)) {
443
+ return;
444
+ }
445
+ if (promise === current && t.v !== v) {
446
+ restore();
447
+
448
+ if (t.v === UNINITIALIZED) {
449
+ t.v = v;
450
+ } else {
451
+ set(t, v, block);
452
+ }
453
+ }
454
+
455
+ if (deferred === null) {
456
+ unuspend();
457
+ } else if (promise === current) {
458
+ for (var i = 0; i < deferred.length; i++) {
459
+ var tracked = deferred[i];
460
+ var { v, c } = new_values.get(tracked);
461
+ tracked.v = v;
462
+ tracked.c = c;
463
+ schedule_update(tracked.b);
464
+ }
465
+ new_values.clear();
466
+ }
467
+ });
468
+ }, ASYNC_BLOCK);
469
+
470
+ return new Promise(async (resolve) => {
471
+ var p;
472
+ while (p !== (p = promise)) await p;
473
+ return resolve(t);
474
+ });
460
475
  }
461
476
 
462
477
  export function deferred(fn) {
463
- // var parent = active_block;
464
- // var block = active_scope;
465
- // var res = [UNINITIALIZED];
466
- // // TODO implement DEFERRED flag on tracked
467
- // var t = tracked(UNINITIALIZED, block, DEFERRED);
468
- // var tracked_properties = [t];
469
- // var prev_value = UNINITIALIZED;
470
- // define_property(res, TRACKED_OBJECT, {
471
- // value: tracked_properties,
472
- // enumerable: false,
473
- // });
474
- // render(() => {
475
- // if (prev_value !== UNINITIALIZED) {
476
- // t.v = prev_value;
477
- // } else {
478
- // prev_value = t.v;
479
- // }
480
- // var prev_version = t.c;
481
- // var value = fn();
482
- // res[0] = value;
483
- // old_set_property(res, 0, value, block);
484
- // if (prev_value !== UNINITIALIZED) {
485
- // if ((t.f & DEFERRED) === 0) {
486
- // t.f ^= DEFERRED;
487
- // }
488
- // var is_awaited = flush_deferred_upodates(parent);
489
- // if ((t.f & DEFERRED) !== 0) {
490
- // t.f ^= DEFERRED;
491
- // }
492
- // if (is_awaited) {
493
- // t.c = prev_version;
494
- // t.v = prev_value;
495
- // prev_value = value;
496
- // }
497
- // }
498
- // });
499
- // return res;
478
+ // var parent = active_block;
479
+ // var block = active_scope;
480
+ // var res = [UNINITIALIZED];
481
+ // // TODO implement DEFERRED flag on tracked
482
+ // var t = tracked(UNINITIALIZED, block, DEFERRED);
483
+ // var tracked_properties = [t];
484
+ // var prev_value = UNINITIALIZED;
485
+ // define_property(res, TRACKED_OBJECT, {
486
+ // value: tracked_properties,
487
+ // enumerable: false,
488
+ // });
489
+ // render(() => {
490
+ // if (prev_value !== UNINITIALIZED) {
491
+ // t.v = prev_value;
492
+ // } else {
493
+ // prev_value = t.v;
494
+ // }
495
+ // var prev_version = t.c;
496
+ // var value = fn();
497
+ // res[0] = value;
498
+ // old_set_property(res, 0, value, block);
499
+ // if (prev_value !== UNINITIALIZED) {
500
+ // if ((t.f & DEFERRED) === 0) {
501
+ // t.f ^= DEFERRED;
502
+ // }
503
+ // var is_awaited = flush_deferred_upodates(parent);
504
+ // if ((t.f & DEFERRED) !== 0) {
505
+ // t.f ^= DEFERRED;
506
+ // }
507
+ // if (is_awaited) {
508
+ // t.c = prev_version;
509
+ // t.v = prev_value;
510
+ // prev_value = value;
511
+ // }
512
+ // }
513
+ // });
514
+ // return res;
500
515
  }
501
516
 
502
517
  function capture_deferred(fn) {
503
- var value = fn();
504
- var deferred = null;
505
- var depedency = active_dependency;
506
-
507
- while (depedency !== null) {
508
- var tracked = depedency.t;
509
- if ((tracked.f & DEFERRED) !== 0) {
510
- deferred ??= [];
511
- deferred.push(tracked);
512
- break;
513
- }
514
- depedency = depedency.n;
515
- }
516
-
517
- return [value, deferred];
518
+ var value = fn();
519
+ var deferred = null;
520
+ var depedency = active_dependency;
521
+
522
+ while (depedency !== null) {
523
+ var tracked = depedency.t;
524
+ if ((tracked.f & DEFERRED) !== 0) {
525
+ deferred ??= [];
526
+ deferred.push(tracked);
527
+ break;
528
+ }
529
+ depedency = depedency.n;
530
+ }
531
+
532
+ return [value, deferred];
518
533
  }
519
534
 
520
535
  /**
521
536
  * @param {Block} block
522
537
  */
523
538
  function flush_deferred_upodates(block) {
524
- var current = block.first;
525
- var is_awaited = false;
526
-
527
- main_loop: while (current !== null) {
528
- var flags = current.f;
529
-
530
- if ((flags & ASYNC_BLOCK) !== 0 && is_block_dirty(current)) {
531
- is_awaited = true;
532
- run_block(current);
533
- }
534
-
535
- var parent = current.p;
536
- current = current.next;
537
-
538
- while (current === null && parent !== null) {
539
- if (parent === block) {
540
- break main_loop;
541
- }
542
- current = parent.next;
543
- parent = parent.p;
544
- }
545
- }
546
-
547
- return is_awaited;
539
+ var current = block.first;
540
+ var is_awaited = false;
541
+
542
+ main_loop: while (current !== null) {
543
+ var flags = current.f;
544
+
545
+ if ((flags & ASYNC_BLOCK) !== 0 && is_block_dirty(current)) {
546
+ is_awaited = true;
547
+ run_block(current);
548
+ }
549
+
550
+ var parent = current.p;
551
+ current = current.next;
552
+
553
+ while (current === null && parent !== null) {
554
+ if (parent === block) {
555
+ break main_loop;
556
+ }
557
+ current = parent.next;
558
+ parent = parent.p;
559
+ }
560
+ }
561
+
562
+ return is_awaited;
548
563
  }
549
564
 
550
565
  /**
551
566
  * @param {Block} root_block
552
567
  */
553
568
  function flush_updates(root_block) {
554
- /** @type {Block | null} */
555
- var current = root_block;
556
- var containing_update = null;
557
- var effects = [];
558
-
559
- while (current !== null) {
560
- var flags = current.f;
561
-
562
- if ((flags & CONTAINS_UPDATE) !== 0) {
563
- current.f ^= CONTAINS_UPDATE;
564
- containing_update = current;
565
- }
566
-
567
- if ((flags & PAUSED) === 0 && containing_update !== null) {
568
- if ((flags & EFFECT_BLOCK) !== 0) {
569
- effects.push(current);
570
- } else {
571
- try {
572
- if (is_block_dirty(current)) {
573
- run_block(current);
574
- }
575
- } catch (error) {
576
- handle_error(error, current);
577
- }
578
- }
579
- /** @type {Block | null} */
580
- var child = current.first;
581
-
582
- if (child !== null) {
583
- current = child;
584
- continue;
585
- }
586
- }
587
-
588
- /** @type {Block | null} */
589
- var parent = current.p;
590
- current = current.next;
591
-
592
- while (current === null && parent !== null) {
593
- if (parent === containing_update) {
594
- containing_update = null;
595
- }
596
- current = parent.next;
597
- parent = parent.p;
598
- }
599
- }
600
-
601
- var length = effects.length;
602
-
603
- for (var i = 0; i < length; i++) {
604
- var effect = effects[i];
605
- var flags = effect.f;
606
-
607
- try {
608
- if ((flags & (PAUSED | DESTROYED)) === 0 && is_block_dirty(effect)) {
609
- run_block(effect);
610
- }
611
- } catch (error) {
612
- handle_error(error, effect);
613
- }
614
- }
569
+ /** @type {Block | null} */
570
+ var current = root_block;
571
+ var containing_update = null;
572
+ var effects = [];
573
+
574
+ while (current !== null) {
575
+ var flags = current.f;
576
+
577
+ if ((flags & CONTAINS_UPDATE) !== 0) {
578
+ current.f ^= CONTAINS_UPDATE;
579
+ containing_update = current;
580
+ }
581
+
582
+ if ((flags & PAUSED) === 0 && containing_update !== null) {
583
+ if ((flags & EFFECT_BLOCK) !== 0) {
584
+ effects.push(current);
585
+ } else {
586
+ try {
587
+ if (is_block_dirty(current)) {
588
+ run_block(current);
589
+ }
590
+ } catch (error) {
591
+ handle_error(error, current);
592
+ }
593
+ }
594
+ /** @type {Block | null} */
595
+ var child = current.first;
596
+
597
+ if (child !== null) {
598
+ current = child;
599
+ continue;
600
+ }
601
+ }
602
+
603
+ /** @type {Block | null} */
604
+ var parent = current.p;
605
+ current = current.next;
606
+
607
+ while (current === null && parent !== null) {
608
+ if (parent === containing_update) {
609
+ containing_update = null;
610
+ }
611
+ current = parent.next;
612
+ parent = parent.p;
613
+ }
614
+ }
615
+
616
+ var length = effects.length;
617
+
618
+ for (var i = 0; i < length; i++) {
619
+ var effect = effects[i];
620
+ var flags = effect.f;
621
+
622
+ try {
623
+ if ((flags & (PAUSED | DESTROYED)) === 0 && is_block_dirty(effect)) {
624
+ run_block(effect);
625
+ }
626
+ } catch (error) {
627
+ handle_error(error, effect);
628
+ }
629
+ }
615
630
  }
616
631
 
617
632
  /**
618
633
  * @param {Block[]} root_blocks
619
634
  */
620
635
  function flush_queued_root_blocks(root_blocks) {
621
- for (let i = 0; i < root_blocks.length; i++) {
622
- flush_updates(root_blocks[i]);
623
- }
636
+ for (let i = 0; i < root_blocks.length; i++) {
637
+ flush_updates(root_blocks[i]);
638
+ }
624
639
  }
625
640
 
626
641
  function flush_microtasks() {
627
- is_micro_task_queued = false;
628
-
629
- if (queued_microtasks.length > 0) {
630
- var microtasks = queued_microtasks;
631
- queued_microtasks = [];
632
- for (var i = 0; i < microtasks.length; i++) {
633
- microtasks[i]();
634
- }
635
- }
636
-
637
- if (flush_count > 1001) {
638
- return;
639
- }
640
- var previous_queued_root_blocks = queued_root_blocks;
641
- queued_root_blocks = [];
642
- flush_queued_root_blocks(previous_queued_root_blocks);
643
-
644
- if (!is_micro_task_queued) {
645
- flush_count = 0;
646
- }
647
- old_values.clear();
642
+ is_micro_task_queued = false;
643
+
644
+ if (queued_microtasks.length > 0) {
645
+ var microtasks = queued_microtasks;
646
+ queued_microtasks = [];
647
+ for (var i = 0; i < microtasks.length; i++) {
648
+ microtasks[i]();
649
+ }
650
+ }
651
+
652
+ if (flush_count > 1001) {
653
+ return;
654
+ }
655
+ var previous_queued_root_blocks = queued_root_blocks;
656
+ queued_root_blocks = [];
657
+ flush_queued_root_blocks(previous_queued_root_blocks);
658
+
659
+ if (!is_micro_task_queued) {
660
+ flush_count = 0;
661
+ }
662
+ old_values.clear();
648
663
  }
649
664
 
650
665
  /**
651
666
  * @param { (() => void) } [fn]
652
667
  */
653
668
  export function queue_microtask(fn) {
654
- if (!is_micro_task_queued) {
655
- is_micro_task_queued = true;
656
- queueMicrotask(flush_microtasks);
657
- }
658
- if (fn !== undefined) {
659
- queued_microtasks.push(fn);
660
- }
669
+ if (!is_micro_task_queued) {
670
+ is_micro_task_queued = true;
671
+ queueMicrotask(flush_microtasks);
672
+ }
673
+ if (fn !== undefined) {
674
+ queued_microtasks.push(fn);
675
+ }
661
676
  }
662
677
 
663
678
  /**
664
679
  * @param {Block} block
665
680
  */
666
681
  export function schedule_update(block) {
667
- if (scheduler_mode === FLUSH_MICROTASK) {
668
- queue_microtask();
669
- }
670
- let current = block;
671
-
672
- while (current !== null) {
673
- var flags = current.f;
674
- if ((flags & CONTAINS_UPDATE) !== 0) return;
675
- current.f ^= CONTAINS_UPDATE;
676
- if ((flags & ROOT_BLOCK) !== 0) {
677
- break;
678
- }
679
- current = /** @type {Block} */ (current.p);
680
- }
681
-
682
- queued_root_blocks.push(current);
682
+ if (scheduler_mode === FLUSH_MICROTASK) {
683
+ queue_microtask();
684
+ }
685
+ let current = block;
686
+
687
+ while (current !== null) {
688
+ var flags = current.f;
689
+ if ((flags & CONTAINS_UPDATE) !== 0) return;
690
+ current.f ^= CONTAINS_UPDATE;
691
+ if ((flags & ROOT_BLOCK) !== 0) {
692
+ break;
693
+ }
694
+ current = /** @type {Block} */ (current.p);
695
+ }
696
+
697
+ queued_root_blocks.push(current);
683
698
  }
684
699
 
685
700
  /**
686
701
  * @param {Tracked} tracked
687
702
  */
688
703
  function register_dependency(tracked) {
689
- var dependency = active_dependency;
690
-
691
- if (dependency === null) {
692
- dependency = create_dependency(tracked);
693
- active_dependency = dependency;
694
- } else {
695
- var current = dependency;
696
-
697
- while (current !== null) {
698
- if (current.t === tracked) {
699
- current.c = tracked.c;
700
- return;
701
- }
702
- var next = current.n;
703
- if (next === null) {
704
- break;
705
- }
706
- current = next;
707
- }
708
-
709
- dependency = create_dependency(tracked);
710
- current.n = dependency;
711
- }
704
+ var dependency = active_dependency;
705
+
706
+ if (dependency === null) {
707
+ dependency = create_dependency(tracked);
708
+ active_dependency = dependency;
709
+ } else {
710
+ var current = dependency;
711
+
712
+ while (current !== null) {
713
+ if (current.t === tracked) {
714
+ current.c = tracked.c;
715
+ return;
716
+ }
717
+ var next = current.n;
718
+ if (next === null) {
719
+ break;
720
+ }
721
+ current = next;
722
+ }
723
+
724
+ dependency = create_dependency(tracked);
725
+ current.n = dependency;
726
+ }
712
727
  }
713
728
 
714
729
  /**
715
730
  * @param {Derived} computed
716
731
  */
717
732
  export function get_derived(computed) {
718
- update_derived(computed);
719
- if (tracking) {
720
- register_dependency(computed);
721
- }
722
-
723
- return computed.v;
733
+ update_derived(computed);
734
+ if (tracking) {
735
+ register_dependency(computed);
736
+ }
737
+ var get = computed.a.get;
738
+ if (get) {
739
+ computed.v = get(computed.v);
740
+ }
741
+
742
+ return computed.v;
724
743
  }
725
744
 
726
745
  /**
727
746
  * @param {Derived | Tracked} tracked
728
747
  */
729
748
  export function get(tracked) {
730
- // reflect back the value if it's not boxed
731
- if (!is_tracked_object(tracked)) {
732
- return tracked;
733
- }
734
-
735
- return (tracked.f & DERIVED) !== 0
736
- ? get_derived(/** @type {Derived} */ (tracked))
737
- : get_tracked(tracked);
749
+ // reflect back the value if it's not boxed
750
+ if (!is_tracked_object(tracked)) {
751
+ return tracked;
752
+ }
753
+
754
+ return (tracked.f & DERIVED) !== 0
755
+ ? get_derived(/** @type {Derived} */ (tracked))
756
+ : get_tracked(tracked);
738
757
  }
739
758
 
740
759
  /**
741
760
  * @param {Tracked} tracked
742
761
  */
743
762
  export function get_tracked(tracked) {
744
- var value = tracked.v;
745
- if (tracking) {
746
- register_dependency(tracked);
747
- }
748
- if (teardown && old_values.has(tracked)) {
749
- return old_values.get(tracked);
750
- }
751
- return value;
763
+ var value = tracked.v;
764
+ if (tracking) {
765
+ register_dependency(tracked);
766
+ }
767
+ if (teardown && old_values.has(tracked)) {
768
+ value = old_values.get(tracked);
769
+ }
770
+ var get = tracked.a.get;
771
+ if (get) {
772
+ tracked.v = get(value);
773
+ }
774
+ return value;
752
775
  }
753
776
 
754
777
  /**
@@ -757,27 +780,32 @@ export function get_tracked(tracked) {
757
780
  * @param {Block} block
758
781
  */
759
782
  export function set(tracked, value, block) {
760
- var old_value = tracked.v;
761
-
762
- if (value !== old_value) {
763
- var tracked_block = tracked.b;
764
-
765
- if (!tracked_block) {
766
- debugger;
767
- }
768
-
769
- if ((block.f & CONTAINS_TEARDOWN) !== 0) {
770
- if (teardown) {
771
- old_values.set(tracked, value);
772
- } else {
773
- old_values.set(tracked, old_value);
774
- }
775
- }
776
-
777
- tracked.v = value;
778
- tracked.c = increment_clock();
779
- schedule_update(tracked_block);
780
- }
783
+ var old_value = tracked.v;
784
+
785
+ if (value !== old_value) {
786
+ var tracked_block = tracked.b;
787
+
788
+ if (!tracked_block) {
789
+ debugger;
790
+ }
791
+
792
+ if ((block.f & CONTAINS_TEARDOWN) !== 0) {
793
+ if (teardown) {
794
+ old_values.set(tracked, value);
795
+ } else {
796
+ old_values.set(tracked, old_value);
797
+ }
798
+ }
799
+
800
+ var set = tracked.a.set;
801
+ if (set) {
802
+ value = set(value);
803
+ }
804
+
805
+ tracked.v = value;
806
+ tracked.c = increment_clock();
807
+ schedule_update(tracked_block);
808
+ }
781
809
  }
782
810
 
783
811
  /**
@@ -786,16 +814,16 @@ export function set(tracked, value, block) {
786
814
  * @returns {T}
787
815
  */
788
816
  export function untrack(fn) {
789
- var previous_tracking = tracking;
790
- var previous_dependency = active_dependency;
791
- tracking = false;
792
- active_dependency = null;
793
- try {
794
- return fn();
795
- } finally {
796
- tracking = previous_tracking;
797
- active_dependency = previous_dependency;
798
- }
817
+ var previous_tracking = tracking;
818
+ var previous_dependency = active_dependency;
819
+ tracking = false;
820
+ active_dependency = null;
821
+ try {
822
+ return fn();
823
+ } finally {
824
+ tracking = previous_tracking;
825
+ active_dependency = previous_dependency;
826
+ }
799
827
  }
800
828
 
801
829
  /**
@@ -804,32 +832,32 @@ export function untrack(fn) {
804
832
  * @returns {T}
805
833
  */
806
834
  export function flush_sync(fn) {
807
- var previous_scheduler_mode = scheduler_mode;
808
- var previous_queued_root_blocks = queued_root_blocks;
835
+ var previous_scheduler_mode = scheduler_mode;
836
+ var previous_queued_root_blocks = queued_root_blocks;
809
837
 
810
- try {
811
- /** @type {Block[]} */
812
- var root_blocks = [];
838
+ try {
839
+ /** @type {Block[]} */
840
+ var root_blocks = [];
813
841
 
814
- scheduler_mode = FLUSH_SYNC;
815
- queued_root_blocks = root_blocks;
816
- is_micro_task_queued = false;
842
+ scheduler_mode = FLUSH_SYNC;
843
+ queued_root_blocks = root_blocks;
844
+ is_micro_task_queued = false;
817
845
 
818
- flush_queued_root_blocks(previous_queued_root_blocks);
846
+ flush_queued_root_blocks(previous_queued_root_blocks);
819
847
 
820
- var result = fn?.();
848
+ var result = fn?.();
821
849
 
822
- if (queued_root_blocks.length > 0 || root_blocks.length > 0) {
823
- flush_sync();
824
- }
850
+ if (queued_root_blocks.length > 0 || root_blocks.length > 0) {
851
+ flush_sync();
852
+ }
825
853
 
826
- flush_count = 0;
854
+ flush_count = 0;
827
855
 
828
- return /** @type {T} */ (result);
829
- } finally {
830
- scheduler_mode = previous_scheduler_mode;
831
- queued_root_blocks = previous_queued_root_blocks;
832
- }
856
+ return /** @type {T} */ (result);
857
+ } finally {
858
+ scheduler_mode = previous_scheduler_mode;
859
+ queued_root_blocks = previous_queued_root_blocks;
860
+ }
833
861
  }
834
862
 
835
863
  /**
@@ -838,17 +866,17 @@ export function flush_sync(fn) {
838
866
  * @returns {Object}
839
867
  */
840
868
  export function spread_props(fn, block) {
841
- let computed = derived(fn, block);
842
-
843
- return new Proxy(
844
- {},
845
- {
846
- get(target, property) {
847
- const obj = get_derived(computed);
848
- return obj[property];
849
- },
850
- },
851
- );
869
+ let computed = derived(fn, block);
870
+
871
+ return new Proxy(
872
+ {},
873
+ {
874
+ get(target, property) {
875
+ const obj = get_derived(computed);
876
+ return obj[property];
877
+ },
878
+ },
879
+ );
852
880
  }
853
881
 
854
882
  /**
@@ -857,11 +885,11 @@ export function spread_props(fn, block) {
857
885
  * @returns {() => T}
858
886
  */
859
887
  export function computed_property(fn) {
860
- define_property(fn, COMPUTED_PROPERTY, {
861
- value: true,
862
- enumerable: false,
863
- });
864
- return fn;
888
+ define_property(fn, COMPUTED_PROPERTY, {
889
+ value: true,
890
+ enumerable: false,
891
+ });
892
+ return fn;
865
893
  }
866
894
 
867
895
  /**
@@ -873,17 +901,17 @@ export function computed_property(fn) {
873
901
  * @returns {any}
874
902
  */
875
903
  export function call_property(obj, property, chain_obj, chain_prop, ...args) {
876
- // don't swallow errors if either the object or property is nullish,
877
- // respect optional chaining as provided
878
- if (!chain_obj && !chain_prop) {
879
- return obj[property].call(obj, ...args);
880
- } else if (chain_obj && chain_prop) {
881
- return obj?.[property]?.call(obj, ...args);
882
- } else if (chain_obj) {
883
- return obj?.[property].call(obj, ...args);
884
- } else if (chain_prop) {
885
- return obj[property]?.call(obj, ...args);
886
- }
904
+ // don't swallow errors if either the object or property is nullish,
905
+ // respect optional chaining as provided
906
+ if (!chain_obj && !chain_prop) {
907
+ return obj[property].call(obj, ...args);
908
+ } else if (chain_obj && chain_prop) {
909
+ return obj?.[property]?.call(obj, ...args);
910
+ } else if (chain_obj) {
911
+ return obj?.[property].call(obj, ...args);
912
+ } else if (chain_prop) {
913
+ return obj[property]?.call(obj, ...args);
914
+ }
887
915
  }
888
916
 
889
917
  /**
@@ -893,19 +921,19 @@ export function call_property(obj, property, chain_obj, chain_prop, ...args) {
893
921
  * @returns {any}
894
922
  */
895
923
  export function get_property(obj, property, chain = false) {
896
- if (chain && obj == null) {
897
- return undefined;
898
- }
899
- var tracked = obj[property];
900
- if (tracked == null) {
901
- return tracked;
902
- }
903
- return get(tracked);
924
+ if (chain && obj == null) {
925
+ return undefined;
926
+ }
927
+ var tracked = obj[property];
928
+ if (tracked == null) {
929
+ return tracked;
930
+ }
931
+ return get(tracked);
904
932
  }
905
933
 
906
934
  export function set_property(obj, property, value, block) {
907
- var tracked = obj[property];
908
- set(tracked, value, block);
935
+ var tracked = obj[property];
936
+ set(tracked, value, block);
909
937
  }
910
938
 
911
939
  /**
@@ -915,10 +943,10 @@ export function set_property(obj, property, value, block) {
915
943
  * @returns {number}
916
944
  */
917
945
  export function update(tracked, block, d = 1) {
918
- var value = get(tracked);
919
- var result = d === 1 ? value++ : value--;
920
- set(tracked, value, block);
921
- return result;
946
+ var value = get(tracked);
947
+ var result = d === 1 ? value++ : value--;
948
+ set(tracked, value, block);
949
+ return result;
922
950
  }
923
951
 
924
952
  /**
@@ -927,7 +955,7 @@ export function update(tracked, block, d = 1) {
927
955
  * @returns {void}
928
956
  */
929
957
  export function increment(tracked, block) {
930
- set(tracked, tracked.v + 1, block);
958
+ set(tracked, tracked.v + 1, block);
931
959
  }
932
960
 
933
961
  /**
@@ -936,7 +964,7 @@ export function increment(tracked, block) {
936
964
  * @returns {void}
937
965
  */
938
966
  export function decrement(tracked, block) {
939
- set(tracked, tracked.v - 1, block);
967
+ set(tracked, tracked.v - 1, block);
940
968
  }
941
969
 
942
970
  /**
@@ -946,26 +974,26 @@ export function decrement(tracked, block) {
946
974
  * @returns {number}
947
975
  */
948
976
  export function update_pre(tracked, block, d = 1) {
949
- var value = get(tracked);
950
- var new_value = d === 1 ? ++value : --value;
951
- set(tracked, new_value, block);
952
- return new_value;
977
+ var value = get(tracked);
978
+ var new_value = d === 1 ? ++value : --value;
979
+ set(tracked, new_value, block);
980
+ return new_value;
953
981
  }
954
982
 
955
983
  export function update_property(obj, property, block, d = 1) {
956
- var tracked = obj[property];
957
- var value = get(tracked);
958
- var new_value = d === 1 ? value++ : value--;
959
- set(tracked, value, block);
960
- return new_value;
984
+ var tracked = obj[property];
985
+ var value = get(tracked);
986
+ var new_value = d === 1 ? value++ : value--;
987
+ set(tracked, value, block);
988
+ return new_value;
961
989
  }
962
990
 
963
991
  export function update_pre_property(obj, property, block, d = 1) {
964
- var tracked = obj[property];
965
- var value = get(tracked);
966
- var new_value = d === 1 ? ++value : --value;
967
- set(tracked, new_value, block);
968
- return new_value;
992
+ var tracked = obj[property];
993
+ var value = get(tracked);
994
+ var new_value = d === 1 ? ++value : --value;
995
+ set(tracked, new_value, block);
996
+ return new_value;
969
997
  }
970
998
 
971
999
  /**
@@ -975,20 +1003,20 @@ export function update_pre_property(obj, property, block, d = 1) {
975
1003
  * @returns {T}
976
1004
  */
977
1005
  export function with_scope(block, fn) {
978
- var previous_scope = active_scope;
979
- try {
980
- active_scope = block;
981
- return fn();
982
- } finally {
983
- active_scope = previous_scope;
984
- }
1006
+ var previous_scope = active_scope;
1007
+ try {
1008
+ active_scope = block;
1009
+ return fn();
1010
+ } finally {
1011
+ active_scope = previous_scope;
1012
+ }
985
1013
  }
986
1014
 
987
1015
  /**
988
1016
  * @returns {Block | null}
989
1017
  */
990
1018
  export function scope() {
991
- return active_scope;
1019
+ return active_scope;
992
1020
  }
993
1021
 
994
1022
  /**
@@ -996,49 +1024,49 @@ export function scope() {
996
1024
  * @returns {Block | never}
997
1025
  */
998
1026
  export function safe_scope(err = 'Cannot access outside of a component context') {
999
- if (active_scope === null) {
1000
- throw new Error(err);
1001
- }
1027
+ if (active_scope === null) {
1028
+ throw new Error(err);
1029
+ }
1002
1030
 
1003
- return /** @type {Block} */ (active_scope);
1031
+ return /** @type {Block} */ (active_scope);
1004
1032
  }
1005
1033
 
1006
1034
  export function push_component() {
1007
- var component = {
1008
- c: null,
1009
- e: null,
1010
- m: false,
1011
- p: active_component,
1012
- };
1013
- active_component = component;
1035
+ var component = {
1036
+ c: null,
1037
+ e: null,
1038
+ m: false,
1039
+ p: active_component,
1040
+ };
1041
+ active_component = component;
1014
1042
  }
1015
1043
 
1016
1044
  export function pop_component() {
1017
- var component = /** @type {Component} */ (active_component);
1018
- component.m = true;
1019
- var effects = component.e;
1020
- if (effects !== null) {
1021
- var length = effects.length;
1022
- for (var i = 0; i < length; i++) {
1023
- var { b: block, fn, r: reaction } = effects[i];
1024
- var previous_block = active_block;
1025
- var previous_reaction = active_reaction;
1026
-
1027
- try {
1028
- active_block = block;
1029
- active_reaction = reaction;
1030
- effect(fn);
1031
- } finally {
1032
- active_block = previous_block;
1033
- active_reaction = previous_reaction;
1034
- }
1035
- }
1036
- }
1037
- active_component = component.p;
1045
+ var component = /** @type {Component} */ (active_component);
1046
+ component.m = true;
1047
+ var effects = component.e;
1048
+ if (effects !== null) {
1049
+ var length = effects.length;
1050
+ for (var i = 0; i < length; i++) {
1051
+ var { b: block, fn, r: reaction } = effects[i];
1052
+ var previous_block = active_block;
1053
+ var previous_reaction = active_reaction;
1054
+
1055
+ try {
1056
+ active_block = block;
1057
+ active_reaction = reaction;
1058
+ effect(fn);
1059
+ } finally {
1060
+ active_block = previous_block;
1061
+ active_reaction = previous_reaction;
1062
+ }
1063
+ }
1064
+ }
1065
+ active_component = component.p;
1038
1066
  }
1039
1067
 
1040
1068
  export function ref_prop() {
1041
- return Symbol(REF_PROP);
1069
+ return Symbol(REF_PROP);
1042
1070
  }
1043
1071
 
1044
1072
  /**
@@ -1048,7 +1076,7 @@ export function ref_prop() {
1048
1076
  * @returns {T}
1049
1077
  */
1050
1078
  export function fallback(value, fallback) {
1051
- return value === undefined ? fallback : value;
1079
+ return value === undefined ? fallback : value;
1052
1080
  }
1053
1081
 
1054
1082
  /**
@@ -1057,35 +1085,35 @@ export function fallback(value, fallback) {
1057
1085
  * @returns {Record<string, unknown>}
1058
1086
  */
1059
1087
  export function exclude_from_object(obj, keys) {
1060
- obj = { ...obj };
1061
- let key;
1062
- for (key of keys) {
1063
- delete obj[key];
1064
- }
1065
- return obj;
1088
+ obj = { ...obj };
1089
+ let key;
1090
+ for (key of keys) {
1091
+ delete obj[key];
1092
+ }
1093
+ return obj;
1066
1094
  }
1067
1095
 
1068
1096
  /**
1069
1097
  * @param {any} v
1070
1098
  */
1071
1099
  export async function maybe_tracked(v) {
1072
- var restore = capture();
1073
- let value;
1074
-
1075
- if (is_tracked_object(v)) {
1076
- if ((v.f & DERIVED) !== 0) {
1077
- value = await async_computed(v.fn, v.b);
1078
- } else {
1079
- value = await async_computed(async () => {
1080
- return await get_tracked(v);
1081
- }, /** @type {Block} */ (active_block));
1082
- }
1083
- } else {
1084
- value = await v;
1085
- }
1086
-
1087
- return () => {
1088
- restore();
1089
- return value;
1090
- };
1100
+ var restore = capture();
1101
+ let value;
1102
+
1103
+ if (is_tracked_object(v)) {
1104
+ if ((v.f & DERIVED) !== 0) {
1105
+ value = await async_computed(v.fn, v.b);
1106
+ } else {
1107
+ value = await async_computed(async () => {
1108
+ return await get_tracked(v);
1109
+ }, /** @type {Block} */ (active_block));
1110
+ }
1111
+ } else {
1112
+ value = await v;
1113
+ }
1114
+
1115
+ return () => {
1116
+ restore();
1117
+ return value;
1118
+ };
1091
1119
  }