ripple 0.2.45 → 0.2.47

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