ripple 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +56 -24
  3. package/src/ai.js +292 -0
  4. package/src/compiler/errors.js +26 -0
  5. package/src/compiler/index.js +26 -0
  6. package/src/compiler/phases/1-parse/index.js +543 -0
  7. package/src/compiler/phases/1-parse/style.js +566 -0
  8. package/src/compiler/phases/2-analyze/index.js +509 -0
  9. package/src/compiler/phases/2-analyze/prune.js +572 -0
  10. package/src/compiler/phases/3-transform/index.js +1572 -0
  11. package/src/compiler/phases/3-transform/segments.js +91 -0
  12. package/src/compiler/phases/3-transform/stylesheet.js +372 -0
  13. package/src/compiler/scope.js +421 -0
  14. package/src/compiler/utils.js +552 -0
  15. package/src/constants.js +4 -0
  16. package/src/jsx-runtime.d.ts +94 -0
  17. package/src/jsx-runtime.js +46 -0
  18. package/src/runtime/array.js +215 -0
  19. package/src/runtime/index.js +39 -0
  20. package/src/runtime/internal/client/blocks.js +247 -0
  21. package/src/runtime/internal/client/constants.js +23 -0
  22. package/src/runtime/internal/client/events.js +223 -0
  23. package/src/runtime/internal/client/for.js +388 -0
  24. package/src/runtime/internal/client/if.js +35 -0
  25. package/src/runtime/internal/client/index.js +53 -0
  26. package/src/runtime/internal/client/operations.js +72 -0
  27. package/src/runtime/internal/client/portal.js +33 -0
  28. package/src/runtime/internal/client/render.js +156 -0
  29. package/src/runtime/internal/client/runtime.js +909 -0
  30. package/src/runtime/internal/client/template.js +51 -0
  31. package/src/runtime/internal/client/try.js +139 -0
  32. package/src/runtime/internal/client/utils.js +16 -0
  33. package/src/utils/ast.js +214 -0
  34. package/src/utils/builders.js +733 -0
  35. package/src/utils/patterns.js +23 -0
  36. package/src/utils/sanitize_template_string.js +7 -0
  37. package/test-mappings.js +0 -0
  38. package/types/index.d.ts +2 -0
  39. package/.npmignore +0 -2
  40. package/History.md +0 -3
  41. package/Readme.md +0 -151
  42. package/lib/exec/index.js +0 -60
  43. package/ripple.js +0 -645
@@ -0,0 +1,909 @@
1
+ import {
2
+ destroy_block,
3
+ destroy_non_branch_children,
4
+ effect,
5
+ is_destroyed,
6
+ render
7
+ } from './blocks.js';
8
+ import {
9
+ ASYNC_BLOCK,
10
+ BLOCK_HAS_RUN,
11
+ BRANCH_BLOCK,
12
+ COMPUTED,
13
+ COMPUTED_PROPERTY,
14
+ CONTAINS_TEARDOWN,
15
+ CONTAINS_UPDATE,
16
+ DEFERRED,
17
+ DESTROYED,
18
+ EFFECT_BLOCK,
19
+ PAUSED,
20
+ ROOT_BLOCK,
21
+ TRACKED,
22
+ TRACKED_OBJECT,
23
+ TRY_BLOCK,
24
+ UNINITIALIZED
25
+ } from './constants';
26
+ import { capture, suspend } from './try.js';
27
+ import { define_property, is_array } from './utils';
28
+ import {
29
+ object_keys as original_object_keys,
30
+ object_values as original_object_values,
31
+ object_entries as original_object_entries,
32
+ structured_clone as original_structured_clone
33
+ } from './utils.js';
34
+
35
+ const FLUSH_MICROTASK = 0;
36
+ const FLUSH_SYNC = 1;
37
+
38
+ export let active_block = null;
39
+ export let active_reaction = null;
40
+ export let active_scope = null;
41
+ export let active_component = null;
42
+
43
+ var old_values = new Map();
44
+
45
+ // Used for controlling the flush of blocks
46
+ let scheduler_mode = FLUSH_MICROTASK;
47
+ // Used for handling scheduling
48
+ let is_micro_task_queued = false;
49
+ let clock = 0;
50
+ let queued_root_blocks = [];
51
+ let queued_microtasks = [];
52
+ let flush_count = 0;
53
+ let active_dependency = null;
54
+
55
+ export let tracking = false;
56
+ export let teardown = false;
57
+
58
+ function increment_clock() {
59
+ return ++clock;
60
+ }
61
+
62
+ export function set_active_block(block) {
63
+ active_block = block;
64
+ }
65
+
66
+ export function set_active_reaction(reaction) {
67
+ active_reaction = reaction;
68
+ }
69
+
70
+ export function set_active_component(component) {
71
+ active_component = component;
72
+ }
73
+
74
+ export function set_tracking(value) {
75
+ tracking = value;
76
+ }
77
+
78
+ export function run_teardown(block) {
79
+ var fn = block.t;
80
+ if (fn !== null) {
81
+ var previous_block = active_block;
82
+ var previous_reaction = active_reaction;
83
+ var previous_tracking = tracking;
84
+ var previous_teardown = teardown;
85
+
86
+ try {
87
+ active_block = null;
88
+ active_reaction = null;
89
+ tracking = false;
90
+ teardown = true;
91
+ fn.call(null);
92
+ } finally {
93
+ active_block = previous_block;
94
+ active_reaction = previous_reaction;
95
+ tracking = previous_tracking;
96
+ teardown = previous_teardown;
97
+ }
98
+ }
99
+ }
100
+
101
+ function update_computed(computed) {
102
+ var value = computed.v;
103
+
104
+ if (value === UNINITIALIZED || is_tracking_dirty(computed.d)) {
105
+ value = run_computed(computed);
106
+
107
+ if (value !== computed.v) {
108
+ computed.v = value;
109
+ computed.c = increment_clock();
110
+ }
111
+ }
112
+ }
113
+
114
+ function destroy_computed_children(computed) {
115
+ var blocks = computed.blocks;
116
+
117
+ if (blocks !== null) {
118
+ computed.blocks = null;
119
+ for (var i = 0; i < blocks.length; i++) {
120
+ destroy_block(blocks[i]);
121
+ }
122
+ }
123
+ }
124
+
125
+ function run_computed(computed) {
126
+ var previous_block = active_block;
127
+ var previous_reaction = active_reaction;
128
+ var previous_tracking = tracking;
129
+ var previous_dependency = active_dependency;
130
+ var previous_component = active_component;
131
+
132
+ try {
133
+ active_block = computed.b;
134
+ active_reaction = computed;
135
+ tracking = true;
136
+ active_dependency = null;
137
+ active_component = active_block.c;
138
+
139
+ destroy_computed_children(computed);
140
+
141
+ var value = computed.fn();
142
+
143
+ computed.d = active_dependency;
144
+
145
+ return value;
146
+ } finally {
147
+ active_block = previous_block;
148
+ active_reaction = previous_reaction;
149
+ tracking = previous_tracking;
150
+ active_dependency = previous_dependency;
151
+ active_component = previous_component;
152
+ }
153
+ }
154
+
155
+ export function handle_error(error, block) {
156
+ var current = block;
157
+
158
+ while (current !== null) {
159
+ var state = current.s;
160
+ if ((current.f & TRY_BLOCK) !== 0 && state.c !== null) {
161
+ state.c(error);
162
+ return;
163
+ }
164
+ current = current.p;
165
+ }
166
+
167
+ throw error;
168
+ }
169
+
170
+ export function run_block(block) {
171
+ var previous_block = active_block;
172
+ var previous_reaction = active_reaction;
173
+ var previous_tracking = tracking;
174
+ var previous_dependency = active_dependency;
175
+ var previous_component = active_component;
176
+
177
+ try {
178
+ active_block = block;
179
+ active_reaction = block;
180
+ active_component = block.c;
181
+
182
+ destroy_non_branch_children(block);
183
+ run_teardown(block);
184
+
185
+ tracking = (block.f & (ROOT_BLOCK | BRANCH_BLOCK)) === 0;
186
+ active_dependency = null;
187
+ var res = block.fn();
188
+
189
+ if (typeof res === 'function') {
190
+ block.t = res;
191
+ let current = block;
192
+
193
+ while (current !== null && (current.f & CONTAINS_TEARDOWN) === 0) {
194
+ current.f ^= CONTAINS_TEARDOWN;
195
+ current = current.p;
196
+ }
197
+ }
198
+
199
+ block.d = active_dependency;
200
+ } catch (error) {
201
+ handle_error(error, block);
202
+ } finally {
203
+ active_block = previous_block;
204
+ active_reaction = previous_reaction;
205
+ tracking = previous_tracking;
206
+ active_dependency = previous_dependency;
207
+ active_component = previous_component;
208
+ }
209
+ }
210
+
211
+ export function tracked(v, b) {
212
+ return {
213
+ b,
214
+ c: 0,
215
+ f: TRACKED,
216
+ v
217
+ };
218
+ }
219
+
220
+ export function computed(fn, b) {
221
+ return {
222
+ b,
223
+ blocks: null,
224
+ c: 0,
225
+ d: null,
226
+ f: TRACKED | COMPUTED,
227
+ fn,
228
+ v: UNINITIALIZED
229
+ };
230
+ }
231
+
232
+ function create_dependency(tracked) {
233
+ var existing = active_reaction.d;
234
+
235
+ // Recycle tracking entries
236
+ if (existing !== null) {
237
+ active_reaction.d = existing.n;
238
+ existing.c = tracked.c;
239
+ existing.t = tracked;
240
+ existing.n = null;
241
+ return existing;
242
+ }
243
+
244
+ return {
245
+ c: tracked.c,
246
+ t: tracked,
247
+ n: null
248
+ };
249
+ }
250
+
251
+ function is_tracking_dirty(tracking) {
252
+ if (tracking === null) {
253
+ return false;
254
+ }
255
+ while (tracking !== null) {
256
+ var tracked = tracking.t;
257
+
258
+ if ((tracked.f & COMPUTED) !== 0) {
259
+ update_computed(tracked);
260
+ }
261
+
262
+ if (tracked.c > tracking.c) {
263
+ return true;
264
+ }
265
+ tracking = tracking.n;
266
+ }
267
+
268
+ return false;
269
+ }
270
+
271
+ function is_block_dirty(block) {
272
+ var flags = block.f;
273
+
274
+ if ((flags & (ROOT_BLOCK | BRANCH_BLOCK)) !== 0) {
275
+ return false;
276
+ }
277
+ if ((flags & BLOCK_HAS_RUN) === 0) {
278
+ block.f ^= BLOCK_HAS_RUN;
279
+ return true;
280
+ }
281
+
282
+ return is_tracking_dirty(block.d);
283
+ }
284
+
285
+ export function async_computed(fn, block) {
286
+ let parent = active_reaction;
287
+ var t = tracked(UNINITIALIZED, block);
288
+ var promise;
289
+ var new_values = new Map();
290
+
291
+ render(() => {
292
+ var [current, deferred] = capture_deferred(() => (promise = fn()));
293
+
294
+ var restore = capture();
295
+ var unuspend;
296
+
297
+ if (deferred === null) {
298
+ unuspend = suspend();
299
+ } else {
300
+ for (var i = 0; i < deferred.length; i++) {
301
+ var tracked = deferred[i];
302
+ new_values.set(tracked, { v: tracked.v, c: tracked.c });
303
+ }
304
+ }
305
+
306
+ promise.then((v) => {
307
+ if (is_destroyed(parent)) {
308
+ return;
309
+ }
310
+ if (promise === current && t.v !== v) {
311
+ restore();
312
+
313
+ if (t.v === UNINITIALIZED) {
314
+ t.v = v;
315
+ } else {
316
+ set(t, v, block);
317
+ }
318
+ }
319
+
320
+ if (deferred === null) {
321
+ unuspend();
322
+ } else if (promise === current) {
323
+ for (var i = 0; i < deferred.length; i++) {
324
+ var tracked = deferred[i];
325
+ var { v, c } = new_values.get(tracked);
326
+ tracked.v = v;
327
+ tracked.c = c;
328
+ schedule_update(tracked.b);
329
+ }
330
+ new_values.clear();
331
+ }
332
+ });
333
+ }, ASYNC_BLOCK);
334
+
335
+ return new Promise(async (resolve) => {
336
+ var p;
337
+ while (p !== (p = promise)) await p;
338
+ return resolve(t);
339
+ });
340
+ }
341
+
342
+ export function deferred(fn) {
343
+ var parent = active_block;
344
+ var block = active_scope;
345
+ var res = [UNINITIALIZED];
346
+ var t = tracked(UNINITIALIZED, block, DEFERRED);
347
+ var tracked_properties = [t];
348
+ var prev_value = UNINITIALIZED;
349
+
350
+ define_property(res, TRACKED_OBJECT, {
351
+ value: tracked_properties,
352
+ enumerable: false
353
+ });
354
+
355
+ render(() => {
356
+ if (prev_value !== UNINITIALIZED) {
357
+ t.v = prev_value;
358
+ } else {
359
+ prev_value = t.v;
360
+ }
361
+ var prev_version = t.c;
362
+ var value = fn();
363
+
364
+ res[0] = value;
365
+ set_property(res, 0, value, block);
366
+
367
+ if (prev_value !== UNINITIALIZED) {
368
+ if ((t.f & DEFERRED) === 0) {
369
+ t.f ^= DEFERRED;
370
+ }
371
+
372
+ var is_awaited = flush_deferred_upodates(parent);
373
+ if ((t.f & DEFERRED) !== 0) {
374
+ t.f ^= DEFERRED;
375
+ }
376
+
377
+ if (is_awaited) {
378
+ t.c = prev_version;
379
+ t.v = prev_value;
380
+ prev_value = value;
381
+ }
382
+ }
383
+ });
384
+
385
+ return res;
386
+ }
387
+
388
+ function capture_deferred(fn) {
389
+ var value = fn();
390
+ var deferred = null;
391
+ var depedency = active_dependency;
392
+
393
+ while (depedency !== null) {
394
+ var tracked = depedency.t;
395
+ if ((tracked.f & DEFERRED) !== 0) {
396
+ deferred ??= [];
397
+ deferred.push(tracked);
398
+ break;
399
+ }
400
+ depedency = depedency.n;
401
+ }
402
+
403
+ return [value, deferred];
404
+ }
405
+
406
+ function flush_deferred_upodates(block) {
407
+ var current = block.first;
408
+ var is_awaited = false;
409
+
410
+ main_loop: while (current !== null) {
411
+ var flags = current.f;
412
+
413
+ if ((flags & ASYNC_BLOCK) !== 0 && is_block_dirty(current)) {
414
+ is_awaited = true;
415
+ run_block(current);
416
+ }
417
+
418
+ var parent = current.p;
419
+ current = current.next;
420
+
421
+ while (current === null && parent !== null) {
422
+ if (parent === block) {
423
+ break main_loop;
424
+ }
425
+ current = parent.next;
426
+ parent = parent.p;
427
+ }
428
+ }
429
+
430
+ return is_awaited;
431
+ }
432
+
433
+ function flush_updates(root_block) {
434
+ var current = root_block;
435
+ var containing_update = null;
436
+ var effects = [];
437
+
438
+ while (current !== null) {
439
+ var flags = current.f;
440
+
441
+ if ((flags & CONTAINS_UPDATE) !== 0) {
442
+ current.f ^= CONTAINS_UPDATE;
443
+ containing_update = current;
444
+ }
445
+
446
+ if ((flags & PAUSED) === 0 && containing_update !== null) {
447
+ if ((flags & EFFECT_BLOCK) !== 0) {
448
+ effects.push(current);
449
+ } else {
450
+ try {
451
+ if (is_block_dirty(current)) {
452
+ run_block(current);
453
+ }
454
+ } catch (error) {
455
+ handle_error(error, current);
456
+ }
457
+ }
458
+ var child = current.first;
459
+
460
+ if (child !== null) {
461
+ current = child;
462
+ continue;
463
+ }
464
+ }
465
+
466
+ var parent = current.p;
467
+ current = current.next;
468
+
469
+ while (current === null && parent !== null) {
470
+ if (parent === containing_update) {
471
+ containing_update = null;
472
+ }
473
+ current = parent.next;
474
+ parent = parent.p;
475
+ }
476
+ }
477
+
478
+ var length = effects.length;
479
+
480
+ for (var i = 0; i < length; i++) {
481
+ var effect = effects[i];
482
+ var flags = effect.f;
483
+
484
+ try {
485
+ if ((flags & (PAUSED | DESTROYED)) === 0 && is_block_dirty(effect)) {
486
+ run_block(effect);
487
+ }
488
+ } catch (error) {
489
+ handle_error(error, effect);
490
+ }
491
+ }
492
+ }
493
+
494
+ function flush_queued_root_blocks(root_blocks) {
495
+ for (let i = 0; i < root_blocks.length; i++) {
496
+ flush_updates(root_blocks[i]);
497
+ }
498
+ }
499
+
500
+ function flush_microtasks() {
501
+ is_micro_task_queued = false;
502
+
503
+ if (queued_microtasks.length > 0) {
504
+ var microtasks = queued_microtasks;
505
+ queued_microtasks = [];
506
+ for (var i = 0; i < microtasks.length; i++) {
507
+ microtasks[i]();
508
+ }
509
+ }
510
+
511
+ if (flush_count > 1001) {
512
+ return;
513
+ }
514
+ var previous_queued_root_blocks = queued_root_blocks;
515
+ queued_root_blocks = [];
516
+ flush_queued_root_blocks(previous_queued_root_blocks);
517
+
518
+ if (!is_micro_task_queued) {
519
+ flush_count = 0;
520
+ }
521
+ old_values.clear();
522
+ }
523
+
524
+ export function queue_microtask(fn) {
525
+ if (!is_micro_task_queued) {
526
+ is_micro_task_queued = true;
527
+ queueMicrotask(flush_microtasks);
528
+ }
529
+ if (fn !== undefined) {
530
+ queued_microtasks.push(fn);
531
+ }
532
+ }
533
+
534
+ export function schedule_update(block) {
535
+ if (scheduler_mode === FLUSH_MICROTASK) {
536
+ queue_microtask();
537
+ }
538
+ let current = block;
539
+
540
+ while (current !== null) {
541
+ var flags = current.f;
542
+ if ((flags & CONTAINS_UPDATE) !== 0) return;
543
+ current.f ^= CONTAINS_UPDATE;
544
+ if ((flags & ROOT_BLOCK) !== 0) {
545
+ break;
546
+ }
547
+ current = current.p;
548
+ }
549
+
550
+ queued_root_blocks.push(current);
551
+ }
552
+
553
+ function register_dependency(tracked) {
554
+ var depedency = active_dependency;
555
+
556
+ if (depedency === null) {
557
+ depedency = create_dependency(tracked);
558
+ active_dependency = depedency;
559
+ } else {
560
+ var current = depedency;
561
+
562
+ while (current !== null) {
563
+ if (current.t === tracked) {
564
+ current.c = tracked.c;
565
+ return;
566
+ }
567
+ var next = current.n;
568
+ if (next === null) {
569
+ break;
570
+ }
571
+ current = next;
572
+ }
573
+
574
+ depedency = create_dependency(tracked);
575
+ current.n = depedency;
576
+ }
577
+ }
578
+
579
+ export function get_computed(computed) {
580
+ update_computed(computed);
581
+ if (tracking) {
582
+ register_dependency(computed);
583
+ }
584
+
585
+ return computed.v;
586
+ }
587
+
588
+ export function get(tracked) {
589
+ return (tracked.f & COMPUTED) !== 0 ? get_computed(tracked) : get_tracked(tracked);
590
+ }
591
+
592
+ export function get_tracked(tracked) {
593
+ var value = tracked.v;
594
+ if (tracking) {
595
+ register_dependency(tracked);
596
+ }
597
+ if (teardown && old_values.has(tracked)) {
598
+ return old_values.get(tracked);
599
+ }
600
+ return value;
601
+ }
602
+
603
+ export function set(tracked, value, block) {
604
+ var old_value = tracked.v;
605
+
606
+ if (value !== old_value) {
607
+ var tracked_block = tracked.b;
608
+
609
+ if ((block.f & CONTAINS_TEARDOWN) !== 0) {
610
+ if (teardown) {
611
+ old_values.set(tracked, value);
612
+ } else {
613
+ old_values.set(tracked, old_value);
614
+ }
615
+ }
616
+
617
+ tracked.v = value;
618
+ tracked.c = increment_clock();
619
+
620
+ if (tracked_block !== block) {
621
+ throw new Error(
622
+ 'Tracked state can only be updated within the same component context that it was created in (that includes effects or event handler within that component).'
623
+ );
624
+ }
625
+ schedule_update(tracked_block);
626
+ }
627
+ }
628
+
629
+ export function untrack(fn) {
630
+ var previous_tracking = tracking;
631
+ var previous_dependency = active_dependency;
632
+ tracking = false;
633
+ active_dependency = null;
634
+ try {
635
+ return fn();
636
+ } finally {
637
+ tracking = previous_tracking;
638
+ active_dependency = previous_dependency;
639
+ }
640
+ }
641
+
642
+ export function flush_sync(fn) {
643
+ var previous_scheduler_mode = scheduler_mode;
644
+ var previous_queued_root_blocks = queued_root_blocks;
645
+
646
+ try {
647
+ const root_blocks = [];
648
+
649
+ scheduler_mode = FLUSH_SYNC;
650
+ queued_root_blocks = root_blocks;
651
+ is_micro_task_queued = false;
652
+
653
+ flush_queued_root_blocks(previous_queued_root_blocks);
654
+
655
+ var result = fn?.();
656
+
657
+ if (queued_root_blocks.length > 0 || root_blocks.length > 0) {
658
+ flush_sync();
659
+ }
660
+
661
+ flush_count = 0;
662
+
663
+ return result;
664
+ } finally {
665
+ scheduler_mode = previous_scheduler_mode;
666
+ queued_root_blocks = previous_queued_root_blocks;
667
+ }
668
+ }
669
+
670
+ export function tracked_object(obj, properties, block) {
671
+ var tracked_properties = obj[TRACKED_OBJECT];
672
+
673
+ if (tracked_properties === undefined) {
674
+ tracked_properties = {};
675
+ define_property(obj, TRACKED_OBJECT, {
676
+ value: tracked_properties,
677
+ enumerable: false
678
+ });
679
+ }
680
+
681
+ for (var i = 0; i < properties.length; i++) {
682
+ var property = properties[i];
683
+ var initial = obj[property];
684
+ var tracked_property;
685
+
686
+ if (typeof initial === 'function' && initial[COMPUTED_PROPERTY] === true) {
687
+ tracked_property = computed(initial, block);
688
+ initial = run_computed(tracked_property);
689
+ obj[property] = initial;
690
+ // TODO If nothing is tracked in the computed function, we can make it a standard tracked
691
+ // however this is more allocations, so we probably want to minimize this
692
+ // if (tracked_property.d === null) {
693
+ // tracked_property = tracked(initial, block);
694
+ // }
695
+ } else {
696
+ tracked_property = tracked(initial, block);
697
+ }
698
+ tracked_properties[property] = tracked_property;
699
+ }
700
+
701
+ return obj;
702
+ }
703
+
704
+ export function computed_property(fn) {
705
+ define_property(fn, COMPUTED_PROPERTY, {
706
+ value: true,
707
+ enumerable: false
708
+ });
709
+ return fn;
710
+ }
711
+
712
+ export function get_property(obj, property, chain = false) {
713
+ if (chain && obj == null) {
714
+ return undefined;
715
+ }
716
+ var value = obj[property];
717
+ var tracked_properties = obj[TRACKED_OBJECT];
718
+ var tracked_property = tracked_properties?.[property];
719
+
720
+ if (tracked_property !== undefined) {
721
+ value = obj[property] = get(tracked_property);
722
+ }
723
+
724
+ return value;
725
+ }
726
+
727
+ export function set_property(obj, property, value, block) {
728
+ var res = (obj[property] = value);
729
+ var tracked_properties = obj[TRACKED_OBJECT];
730
+ var tracked = tracked_properties?.[property];
731
+
732
+ if (tracked === undefined) {
733
+ return res;
734
+ }
735
+
736
+ set(tracked, value, block);
737
+ }
738
+
739
+ export function update(tracked, block, d = 1) {
740
+ var value = get(tracked);
741
+ var result = d === 1 ? value++ : value--;
742
+
743
+ set(tracked, value, block);
744
+
745
+ return result;
746
+ }
747
+
748
+ export function increment(tracked, block) {
749
+ set(tracked, tracked.v + 1, block);
750
+ }
751
+
752
+ export function update_pre(tracked, block, d = 1) {
753
+ var value = get(tracked);
754
+
755
+ return set(tracked, d === 1 ? ++value : --value, block);
756
+ }
757
+
758
+ export function update_property(obj, property, block, d = 1) {
759
+ var tracked_properties = obj[TRACKED_OBJECT];
760
+ var tracked = tracked_properties?.[property];
761
+
762
+ if (tracked === undefined) {
763
+ return d === 1 ? obj[property]++ : obj[property]--;
764
+ }
765
+
766
+ var value = get(tracked);
767
+ var result = d === 1 ? value++ : value--;
768
+
769
+ increment(tracked, block);
770
+ return result;
771
+ }
772
+
773
+ export function update_pre_property(obj, property, block, d = 1) {
774
+ var tracked_properties = obj[TRACKED_OBJECT];
775
+ var tracked = tracked_properties?.[property];
776
+
777
+ if (tracked === undefined) {
778
+ return d === 1 ? ++obj[property] : --obj[property];
779
+ }
780
+
781
+ var value = get(tracked);
782
+ var result = d === 1 ? ++value : --value;
783
+
784
+ increment(tracked, block);
785
+ return result;
786
+ }
787
+
788
+ export function structured_clone(val, options) {
789
+ if (typeof val === 'object' && val !== null) {
790
+ var tracked_properties = val[TRACKED_OBJECT];
791
+ if (tracked_properties !== undefined) {
792
+ if (is_array(val)) {
793
+ val.$length;
794
+ }
795
+ return structured_clone(object_values(val), options);
796
+ }
797
+ }
798
+ return original_structured_clone(val, options);
799
+ }
800
+
801
+ export function object_keys(obj) {
802
+ if (is_array(obj) && TRACKED_OBJECT in obj) {
803
+ obj.$length;
804
+ }
805
+ return original_object_keys(obj);
806
+ }
807
+
808
+ export function object_values(obj) {
809
+ var tracked_properties = obj[TRACKED_OBJECT];
810
+
811
+ if (tracked_properties === undefined) {
812
+ return original_object_values(obj);
813
+ }
814
+ if (is_array(obj)) {
815
+ obj.$length;
816
+ }
817
+ var keys = original_object_keys(obj);
818
+ var values = [];
819
+
820
+ for (var i = 0; i < keys.length; i++) {
821
+ values.push(get_property(obj, keys[i]));
822
+ }
823
+
824
+ return values;
825
+ }
826
+
827
+ export function object_entries(obj) {
828
+ var tracked_properties = obj[TRACKED_OBJECT];
829
+
830
+ if (tracked_properties === undefined) {
831
+ return original_object_entries(obj);
832
+ }
833
+ if (is_array(obj)) {
834
+ obj.$length;
835
+ }
836
+ var keys = original_object_keys(obj);
837
+ var entries = [];
838
+
839
+ for (var i = 0; i < keys.length; i++) {
840
+ var key = keys[i];
841
+ entries.push([key, get_property(obj, key)]);
842
+ }
843
+
844
+ return entries;
845
+ }
846
+
847
+ export function spread_object(obj) {
848
+ var tracked_properties = obj[TRACKED_OBJECT];
849
+
850
+ if (tracked_properties === undefined) {
851
+ return { ...obj };
852
+ }
853
+ var keys = original_object_keys(obj);
854
+ const values = {};
855
+
856
+ for (var i = 0; i < keys.length; i++) {
857
+ var key = keys[i];
858
+ values[key] = get_property_computed(obj, key);
859
+ }
860
+
861
+ return values;
862
+ }
863
+
864
+ export function with_scope(block, fn) {
865
+ var previous_scope = active_scope;
866
+ try {
867
+ active_scope = block;
868
+ return fn();
869
+ } finally {
870
+ active_scope = previous_scope;
871
+ }
872
+ }
873
+
874
+ export function scope() {
875
+ return active_scope;
876
+ }
877
+
878
+ export function push_component() {
879
+ var component = {
880
+ e: null,
881
+ m: false,
882
+ p: active_component
883
+ };
884
+ active_component = component;
885
+ }
886
+
887
+ export function pop_component() {
888
+ var component = active_component;
889
+ component.m = true;
890
+ var effects = component.e;
891
+ if (effects !== null) {
892
+ var length = effects.length;
893
+ for (var i = 0; i < length; i++) {
894
+ var { b: block, fn, r: reaction } = effects[i];
895
+ var previous_block = active_block;
896
+ var previous_reaction = active_reaction;
897
+
898
+ try {
899
+ active_block = block;
900
+ active_reaction = reaction;
901
+ effect(fn);
902
+ } finally {
903
+ active_block = previous_block;
904
+ active_reaction = previous_reaction;
905
+ }
906
+ }
907
+ }
908
+ active_component = component.p;
909
+ }