@fgv/ts-web-extras 5.1.0-1 → 5.1.0-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.rush/temp/chunked-rush-logs/ts-web-extras.build.chunks.jsonl +26 -26
- package/.rush/temp/chunked-rush-logs/ts-web-extras.test.chunks.jsonl +47 -42
- package/.rush/temp/operation/build/all.log +26 -26
- package/.rush/temp/operation/build/error.log +9 -9
- package/.rush/temp/operation/build/log-chunks.jsonl +26 -26
- package/.rush/temp/operation/build/state.json +1 -1
- package/.rush/temp/operation/test/all.log +47 -42
- package/.rush/temp/operation/test/error.log +10 -8
- package/.rush/temp/operation/test/log-chunks.jsonl +47 -42
- package/.rush/temp/operation/test/state.json +1 -1
- package/dist/packlets/file-tree/httpTreeAccessors.js +68 -11
- package/dist/packlets/file-tree/httpTreeAccessors.js.map +1 -1
- package/dist/test/unit/httpTreeAccessors.test.js +303 -74
- package/dist/test/unit/httpTreeAccessors.test.js.map +1 -1
- package/dist/ts-web-extras.d.ts +14 -0
- package/lib/packlets/file-tree/httpTreeAccessors.d.ts +14 -0
- package/lib/packlets/file-tree/httpTreeAccessors.d.ts.map +1 -1
- package/lib/packlets/file-tree/httpTreeAccessors.js +68 -11
- package/lib/packlets/file-tree/httpTreeAccessors.js.map +1 -1
- package/lib/test/unit/httpTreeAccessors.test.js +303 -74
- package/lib/test/unit/httpTreeAccessors.test.js.map +1 -1
- package/package.json +1 -1
- package/rush-logs/ts-web-extras.build.error.log +9 -9
- package/rush-logs/ts-web-extras.build.log +26 -26
- package/rush-logs/ts-web-extras.test.error.log +10 -8
- package/rush-logs/ts-web-extras.test.log +47 -42
- package/src/packlets/file-tree/httpTreeAccessors.ts +79 -12
- package/src/test/unit/httpTreeAccessors.test.ts +377 -84
- package/temp/build/typescript/ts_8nwakTlr.json +1 -1
- package/temp/coverage/crypto-utils/browserCryptoProvider.ts.html +1 -1
- package/temp/coverage/crypto-utils/browserHashProvider.ts.html +1 -1
- package/temp/coverage/crypto-utils/index.html +1 -1
- package/temp/coverage/file-tree/directoryHandleStore.ts.html +1 -1
- package/temp/coverage/file-tree/fileApiTreeAccessors.ts.html +1 -1
- package/temp/coverage/file-tree/fileSystemAccessTreeAccessors.ts.html +1 -1
- package/temp/coverage/file-tree/httpTreeAccessors.ts.html +369 -168
- package/temp/coverage/file-tree/index.html +11 -11
- package/temp/coverage/file-tree/localStorageTreeAccessors.ts.html +1 -1
- package/temp/coverage/helpers/fileTreeHelpers.ts.html +1 -1
- package/temp/coverage/helpers/index.html +1 -1
- package/temp/coverage/index.html +11 -11
- package/temp/coverage/lcov-report/crypto-utils/browserCryptoProvider.ts.html +1 -1
- package/temp/coverage/lcov-report/crypto-utils/browserHashProvider.ts.html +1 -1
- package/temp/coverage/lcov-report/crypto-utils/index.html +1 -1
- package/temp/coverage/lcov-report/file-tree/directoryHandleStore.ts.html +1 -1
- package/temp/coverage/lcov-report/file-tree/fileApiTreeAccessors.ts.html +1 -1
- package/temp/coverage/lcov-report/file-tree/fileSystemAccessTreeAccessors.ts.html +1 -1
- package/temp/coverage/lcov-report/file-tree/httpTreeAccessors.ts.html +369 -168
- package/temp/coverage/lcov-report/file-tree/index.html +11 -11
- package/temp/coverage/lcov-report/file-tree/localStorageTreeAccessors.ts.html +1 -1
- package/temp/coverage/lcov-report/helpers/fileTreeHelpers.ts.html +1 -1
- package/temp/coverage/lcov-report/helpers/index.html +1 -1
- package/temp/coverage/lcov-report/index.html +11 -11
- package/temp/coverage/lcov-report/url-utils/index.html +1 -1
- package/temp/coverage/lcov-report/url-utils/urlParams.ts.html +1 -1
- package/temp/coverage/lcov.info +479 -379
- package/temp/coverage/url-utils/index.html +1 -1
- package/temp/coverage/url-utils/urlParams.ts.html +1 -1
- package/temp/test/jest/haste-map-b931e4e63102f86c5bd4949f7dced44f-9d713eb41149188b4e5c0ae3d86d0a57-2ad8e16b24e391b8cdbe50b55c137169 +0 -0
- package/temp/test/jest/perf-cache-b931e4e63102f86c5bd4949f7dced44f-da39a3ee5e6b4b0d3255bfef95601890 +1 -1
- package/temp/ts-web-extras.api.json +1 -1
|
@@ -25,28 +25,28 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">100% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>448/448</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">98.41% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>124/126</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
40
|
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>15/15</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">100% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>448/448</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -444,7 +444,74 @@
|
|
|
444
444
|
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
445
|
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
446
|
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
-
<a name='L382'></a><a href='#L382'>382</a
|
|
447
|
+
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
+
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
+
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
+
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
+
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
+
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
+
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
+
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
+
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
+
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
+
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
+
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
+
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
+
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
+
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
+
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
+
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
+
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
+
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
+
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
+
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
+
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
+
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
+
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
+
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
+
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
+
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
+
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
+
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
+
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
+
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
+
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
+
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
+
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
+
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
+
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
+
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
+
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
+
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
+
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
+
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
+
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
+
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
+
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
+
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
+
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
+
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
+
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
+
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
+
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
+
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
+
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
+
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
+
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
+
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
+
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
+
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
+
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
+
<a name='L440'></a><a href='#L440'>440</a>
|
|
506
|
+
<a name='L441'></a><a href='#L441'>441</a>
|
|
507
|
+
<a name='L442'></a><a href='#L442'>442</a>
|
|
508
|
+
<a name='L443'></a><a href='#L443'>443</a>
|
|
509
|
+
<a name='L444'></a><a href='#L444'>444</a>
|
|
510
|
+
<a name='L445'></a><a href='#L445'>445</a>
|
|
511
|
+
<a name='L446'></a><a href='#L446'>446</a>
|
|
512
|
+
<a name='L447'></a><a href='#L447'>447</a>
|
|
513
|
+
<a name='L448'></a><a href='#L448'>448</a>
|
|
514
|
+
<a name='L449'></a><a href='#L449'>449</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
448
515
|
<span class="cline-any cline-yes">1x</span>
|
|
449
516
|
<span class="cline-any cline-yes">1x</span>
|
|
450
517
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -490,10 +557,12 @@
|
|
|
490
557
|
<span class="cline-any cline-yes">1x</span>
|
|
491
558
|
<span class="cline-any cline-yes">1x</span>
|
|
492
559
|
<span class="cline-any cline-yes">1x</span>
|
|
493
|
-
<span class="cline-any cline-yes">
|
|
494
|
-
<span class="cline-any cline-yes">
|
|
495
|
-
<span class="cline-any cline-yes">
|
|
496
|
-
<span class="cline-any cline-yes">
|
|
560
|
+
<span class="cline-any cline-yes">156x</span>
|
|
561
|
+
<span class="cline-any cline-yes">156x</span>
|
|
562
|
+
<span class="cline-any cline-yes">156x</span>
|
|
563
|
+
<span class="cline-any cline-yes">156x</span>
|
|
564
|
+
<span class="cline-any cline-yes">1x</span>
|
|
565
|
+
<span class="cline-any cline-yes">1x</span>
|
|
497
566
|
<span class="cline-any cline-yes">1x</span>
|
|
498
567
|
<span class="cline-any cline-yes">1x</span>
|
|
499
568
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -526,14 +595,15 @@
|
|
|
526
595
|
<span class="cline-any cline-yes">1x</span>
|
|
527
596
|
<span class="cline-any cline-yes">1x</span>
|
|
528
597
|
<span class="cline-any cline-yes">1x</span>
|
|
529
|
-
<span class="cline-any cline-yes">
|
|
530
|
-
<span class="cline-any cline-yes">
|
|
531
|
-
<span class="cline-any cline-yes">
|
|
532
|
-
<span class="cline-any cline-yes">
|
|
533
|
-
<span class="cline-any cline-yes">
|
|
534
|
-
<span class="cline-any cline-yes">
|
|
535
|
-
<span class="cline-any cline-yes">
|
|
536
|
-
<span class="cline-any cline-yes">
|
|
598
|
+
<span class="cline-any cline-yes">1x</span>
|
|
599
|
+
<span class="cline-any cline-yes">49x</span>
|
|
600
|
+
<span class="cline-any cline-yes">49x</span>
|
|
601
|
+
<span class="cline-any cline-yes">49x</span>
|
|
602
|
+
<span class="cline-any cline-yes">49x</span>
|
|
603
|
+
<span class="cline-any cline-yes">49x</span>
|
|
604
|
+
<span class="cline-any cline-yes">49x</span>
|
|
605
|
+
<span class="cline-any cline-yes">49x</span>
|
|
606
|
+
<span class="cline-any cline-yes">49x</span>
|
|
537
607
|
<span class="cline-any cline-yes">1x</span>
|
|
538
608
|
<span class="cline-any cline-yes">1x</span>
|
|
539
609
|
<span class="cline-any cline-yes">4x</span>
|
|
@@ -552,25 +622,49 @@
|
|
|
552
622
|
<span class="cline-any cline-yes">1x</span>
|
|
553
623
|
<span class="cline-any cline-yes">1x</span>
|
|
554
624
|
<span class="cline-any cline-yes">1x</span>
|
|
555
|
-
<span class="cline-any cline-yes">
|
|
556
|
-
<span class="cline-any cline-yes">
|
|
557
|
-
<span class="cline-any cline-yes">
|
|
558
|
-
<span class="cline-any cline-yes">
|
|
625
|
+
<span class="cline-any cline-yes">59x</span>
|
|
626
|
+
<span class="cline-any cline-yes">59x</span>
|
|
627
|
+
<span class="cline-any cline-yes">59x</span>
|
|
628
|
+
<span class="cline-any cline-yes">59x</span>
|
|
559
629
|
<span class="cline-any cline-yes">10x</span>
|
|
560
630
|
<span class="cline-any cline-yes">10x</span>
|
|
561
|
-
<span class="cline-any cline-yes">
|
|
562
|
-
<span class="cline-any cline-yes">
|
|
631
|
+
<span class="cline-any cline-yes">49x</span>
|
|
632
|
+
<span class="cline-any cline-yes">49x</span>
|
|
563
633
|
<span class="cline-any cline-yes">1x</span>
|
|
564
634
|
<span class="cline-any cline-yes">1x</span>
|
|
565
635
|
<span class="cline-any cline-yes">1x</span>
|
|
566
636
|
<span class="cline-any cline-yes">1x</span>
|
|
567
637
|
<span class="cline-any cline-yes">1x</span>
|
|
568
638
|
<span class="cline-any cline-yes">1x</span>
|
|
569
|
-
<span class="cline-any cline-yes">21x</span>
|
|
570
639
|
<span class="cline-any cline-yes">1x</span>
|
|
571
640
|
<span class="cline-any cline-yes">1x</span>
|
|
572
|
-
<span class="cline-any cline-yes">
|
|
573
|
-
<span class="cline-any cline-yes">
|
|
641
|
+
<span class="cline-any cline-yes">1x</span>
|
|
642
|
+
<span class="cline-any cline-yes">1x</span>
|
|
643
|
+
<span class="cline-any cline-yes">1x</span>
|
|
644
|
+
<span class="cline-any cline-yes">1x</span>
|
|
645
|
+
<span class="cline-any cline-yes">27x</span>
|
|
646
|
+
<span class="cline-any cline-yes">1x</span>
|
|
647
|
+
<span class="cline-any cline-yes">1x</span>
|
|
648
|
+
<span class="cline-any cline-yes">26x</span>
|
|
649
|
+
<span class="cline-any cline-yes">26x</span>
|
|
650
|
+
<span class="cline-any cline-yes">26x</span>
|
|
651
|
+
<span class="cline-any cline-yes">26x</span>
|
|
652
|
+
<span class="cline-any cline-yes">26x</span>
|
|
653
|
+
<span class="cline-any cline-yes">26x</span>
|
|
654
|
+
<span class="cline-any cline-yes">1x</span>
|
|
655
|
+
<span class="cline-any cline-yes">1x</span>
|
|
656
|
+
<span class="cline-any cline-yes">26x</span>
|
|
657
|
+
<span class="cline-any cline-yes">1x</span>
|
|
658
|
+
<span class="cline-any cline-yes">1x</span>
|
|
659
|
+
<span class="cline-any cline-yes">25x</span>
|
|
660
|
+
<span class="cline-any cline-yes">25x</span>
|
|
661
|
+
<span class="cline-any cline-yes">25x</span>
|
|
662
|
+
<span class="cline-any cline-yes">25x</span>
|
|
663
|
+
<span class="cline-any cline-yes">25x</span>
|
|
664
|
+
<span class="cline-any cline-yes">25x</span>
|
|
665
|
+
<span class="cline-any cline-yes">25x</span>
|
|
666
|
+
<span class="cline-any cline-yes">25x</span>
|
|
667
|
+
<span class="cline-any cline-yes">26x</span>
|
|
574
668
|
<span class="cline-any cline-yes">4x</span>
|
|
575
669
|
<span class="cline-any cline-yes">4x</span>
|
|
576
670
|
<span class="cline-any cline-yes">4x</span>
|
|
@@ -584,45 +678,42 @@
|
|
|
584
678
|
<span class="cline-any cline-yes">1x</span>
|
|
585
679
|
<span class="cline-any cline-yes">1x</span>
|
|
586
680
|
<span class="cline-any cline-yes">4x</span>
|
|
587
|
-
<span class="cline-any cline-yes">
|
|
588
|
-
<span class="cline-any cline-yes">
|
|
589
|
-
<span class="cline-any cline-yes">
|
|
590
|
-
<span class="cline-any cline-yes">
|
|
681
|
+
<span class="cline-any cline-yes">24x</span>
|
|
682
|
+
<span class="cline-any cline-yes">26x</span>
|
|
683
|
+
<span class="cline-any cline-yes">22x</span>
|
|
684
|
+
<span class="cline-any cline-yes">22x</span>
|
|
591
685
|
<span class="cline-any cline-yes">1x</span>
|
|
592
686
|
<span class="cline-any cline-yes">1x</span>
|
|
593
|
-
<span class="cline-any cline-yes">
|
|
594
|
-
<span class="cline-any cline-yes">
|
|
595
|
-
<span class="cline-any cline-yes">
|
|
596
|
-
<span class="cline-any cline-yes">
|
|
597
|
-
<span class="cline-any cline-yes">
|
|
598
|
-
<span class="cline-any cline-yes">
|
|
687
|
+
<span class="cline-any cline-yes">21x</span>
|
|
688
|
+
<span class="cline-any cline-yes">21x</span>
|
|
689
|
+
<span class="cline-any cline-yes">21x</span>
|
|
690
|
+
<span class="cline-any cline-yes">21x</span>
|
|
691
|
+
<span class="cline-any cline-yes">21x</span>
|
|
692
|
+
<span class="cline-any cline-yes">22x</span>
|
|
599
693
|
<span class="cline-any cline-yes">1x</span>
|
|
600
694
|
<span class="cline-any cline-yes">1x</span>
|
|
601
|
-
<span class="cline-any cline-yes">16x</span>
|
|
602
|
-
<span class="cline-any cline-yes">16x</span>
|
|
603
|
-
<span class="cline-any cline-yes">16x</span>
|
|
604
|
-
<span class="cline-any cline-yes">16x</span>
|
|
605
|
-
<span class="cline-any cline-yes">16x</span>
|
|
606
|
-
<span class="cline-any cline-yes">17x</span>
|
|
607
|
-
<span class="cline-any cline-yes">6x</span>
|
|
608
|
-
<span class="cline-any cline-yes">6x</span>
|
|
609
|
-
<span class="cline-any cline-yes">17x</span>
|
|
610
|
-
<span class="cline-any cline-yes">12x</span>
|
|
611
|
-
<span class="cline-any cline-yes">12x</span>
|
|
612
|
-
<span class="cline-any cline-yes">12x</span>
|
|
613
|
-
<span class="cline-any cline-yes">12x</span>
|
|
614
|
-
<span class="cline-any cline-yes">12x</span>
|
|
615
695
|
<span class="cline-any cline-yes">21x</span>
|
|
616
|
-
<span class="cline-any cline-yes">2x</span>
|
|
617
|
-
<span class="cline-any cline-yes">2x</span>
|
|
618
|
-
<span class="cline-any cline-yes">12x</span>
|
|
619
|
-
<span class="cline-any cline-yes">12x</span>
|
|
620
|
-
<span class="cline-any cline-yes">12x</span>
|
|
621
|
-
<span class="cline-any cline-yes">12x</span>
|
|
622
|
-
<span class="cline-any cline-yes">12x</span>
|
|
623
|
-
<span class="cline-any cline-yes">12x</span>
|
|
624
696
|
<span class="cline-any cline-yes">21x</span>
|
|
625
697
|
<span class="cline-any cline-yes">21x</span>
|
|
698
|
+
<span class="cline-any cline-yes">21x</span>
|
|
699
|
+
<span class="cline-any cline-yes">21x</span>
|
|
700
|
+
<span class="cline-any cline-yes">22x</span>
|
|
701
|
+
<span class="cline-any cline-yes">8x</span>
|
|
702
|
+
<span class="cline-any cline-yes">8x</span>
|
|
703
|
+
<span class="cline-any cline-yes">22x</span>
|
|
704
|
+
<span class="cline-any cline-yes">15x</span>
|
|
705
|
+
<span class="cline-any cline-yes">15x</span>
|
|
706
|
+
<span class="cline-any cline-yes">26x</span>
|
|
707
|
+
<span class="cline-any cline-yes">2x</span>
|
|
708
|
+
<span class="cline-any cline-yes">2x</span>
|
|
709
|
+
<span class="cline-any cline-yes">15x</span>
|
|
710
|
+
<span class="cline-any cline-yes">15x</span>
|
|
711
|
+
<span class="cline-any cline-yes">15x</span>
|
|
712
|
+
<span class="cline-any cline-yes">15x</span>
|
|
713
|
+
<span class="cline-any cline-yes">15x</span>
|
|
714
|
+
<span class="cline-any cline-yes">15x</span>
|
|
715
|
+
<span class="cline-any cline-yes">26x</span>
|
|
716
|
+
<span class="cline-any cline-yes">26x</span>
|
|
626
717
|
<span class="cline-any cline-yes">1x</span>
|
|
627
718
|
<span class="cline-any cline-yes">1x</span>
|
|
628
719
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -664,15 +755,15 @@
|
|
|
664
755
|
<span class="cline-any cline-yes">1x</span>
|
|
665
756
|
<span class="cline-any cline-yes">1x</span>
|
|
666
757
|
<span class="cline-any cline-yes">1x</span>
|
|
667
|
-
<span class="cline-any cline-yes">
|
|
668
|
-
<span class="cline-any cline-yes">
|
|
758
|
+
<span class="cline-any cline-yes">29x</span>
|
|
759
|
+
<span class="cline-any cline-yes">29x</span>
|
|
669
760
|
<span class="cline-any cline-yes">1x</span>
|
|
670
761
|
<span class="cline-any cline-yes">1x</span>
|
|
671
|
-
<span class="cline-any cline-yes">
|
|
672
|
-
<span class="cline-any cline-yes">
|
|
673
|
-
<span class="cline-any cline-yes">
|
|
674
|
-
<span class="cline-any cline-yes">
|
|
675
|
-
<span class="cline-any cline-yes">
|
|
762
|
+
<span class="cline-any cline-yes">28x</span>
|
|
763
|
+
<span class="cline-any cline-yes">28x</span>
|
|
764
|
+
<span class="cline-any cline-yes">29x</span>
|
|
765
|
+
<span class="cline-any cline-yes">25x</span>
|
|
766
|
+
<span class="cline-any cline-yes">25x</span>
|
|
676
767
|
<span class="cline-any cline-yes">3x</span>
|
|
677
768
|
<span class="cline-any cline-yes">3x</span>
|
|
678
769
|
<span class="cline-any cline-yes">3x</span>
|
|
@@ -685,10 +776,10 @@
|
|
|
685
776
|
<span class="cline-any cline-yes">1x</span>
|
|
686
777
|
<span class="cline-any cline-yes">1x</span>
|
|
687
778
|
<span class="cline-any cline-yes">1x</span>
|
|
688
|
-
<span class="cline-any cline-yes">
|
|
689
|
-
<span class="cline-any cline-yes">
|
|
690
|
-
<span class="cline-any cline-yes">
|
|
691
|
-
<span class="cline-any cline-yes">
|
|
779
|
+
<span class="cline-any cline-yes">32x</span>
|
|
780
|
+
<span class="cline-any cline-yes">32x</span>
|
|
781
|
+
<span class="cline-any cline-yes">30x</span>
|
|
782
|
+
<span class="cline-any cline-yes">30x</span>
|
|
692
783
|
<span class="cline-any cline-yes">2x</span>
|
|
693
784
|
<span class="cline-any cline-yes">2x</span>
|
|
694
785
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -699,32 +790,73 @@
|
|
|
699
790
|
<span class="cline-any cline-yes">1x</span>
|
|
700
791
|
<span class="cline-any cline-yes">1x</span>
|
|
701
792
|
<span class="cline-any cline-yes">1x</span>
|
|
702
|
-
<span class="cline-any cline-yes">
|
|
703
|
-
<span class="cline-any cline-yes">
|
|
704
|
-
<span class="cline-any cline-yes">
|
|
705
|
-
<span class="cline-any cline-yes">
|
|
793
|
+
<span class="cline-any cline-yes">52x</span>
|
|
794
|
+
<span class="cline-any cline-yes">52x</span>
|
|
795
|
+
<span class="cline-any cline-yes">52x</span>
|
|
796
|
+
<span class="cline-any cline-yes">52x</span>
|
|
706
797
|
<span class="cline-any cline-yes">1x</span>
|
|
707
798
|
<span class="cline-any cline-yes">1x</span>
|
|
708
|
-
<span class="cline-any cline-yes">
|
|
709
|
-
<span class="cline-any cline-yes">
|
|
710
|
-
<span class="cline-any cline-yes">
|
|
711
|
-
<span class="cline-any cline-yes">
|
|
712
|
-
<span class="cline-any cline-yes">
|
|
713
|
-
<span class="cline-any cline-yes">
|
|
714
|
-
<span class="cline-any cline-yes">
|
|
715
|
-
<span class="cline-any cline-yes">
|
|
716
|
-
<span class="cline-any cline-yes">
|
|
717
|
-
<span class="cline-any cline-yes">
|
|
718
|
-
<span class="cline-any cline-yes">
|
|
719
|
-
<span class="cline-any cline-yes">
|
|
720
|
-
<span class="cline-any cline-yes">
|
|
721
|
-
<span class="cline-any cline-yes">
|
|
722
|
-
<span class="cline-any cline-yes">
|
|
723
|
-
<span class="cline-any cline-yes">
|
|
799
|
+
<span class="cline-any cline-yes">52x</span>
|
|
800
|
+
<span class="cline-any cline-yes">52x</span>
|
|
801
|
+
<span class="cline-any cline-yes">52x</span>
|
|
802
|
+
<span class="cline-any cline-yes">52x</span>
|
|
803
|
+
<span class="cline-any cline-yes">52x</span>
|
|
804
|
+
<span class="cline-any cline-yes">8x</span>
|
|
805
|
+
<span class="cline-any cline-yes">8x</span>
|
|
806
|
+
<span class="cline-any cline-yes">8x</span>
|
|
807
|
+
<span class="cline-any cline-yes">44x</span>
|
|
808
|
+
<span class="cline-any cline-yes">52x</span>
|
|
809
|
+
<span class="cline-any cline-yes">14x</span>
|
|
810
|
+
<span class="cline-any cline-yes">14x</span>
|
|
811
|
+
<span class="cline-any cline-yes">14x</span>
|
|
812
|
+
<span class="cline-any cline-yes">14x</span>
|
|
813
|
+
<span class="cline-any cline-yes">14x</span>
|
|
814
|
+
<span class="cline-any cline-yes">14x</span>
|
|
815
|
+
<span class="cline-any cline-yes">30x</span>
|
|
816
|
+
<span class="cline-any cline-yes">30x</span>
|
|
817
|
+
<span class="cline-any cline-yes">52x</span>
|
|
818
|
+
<span class="cline-any cline-yes">1x</span>
|
|
819
|
+
<span class="cline-any cline-yes">1x</span>
|
|
820
|
+
<span class="cline-any cline-yes">29x</span>
|
|
821
|
+
<span class="cline-any cline-yes">29x</span>
|
|
822
|
+
<span class="cline-any cline-yes">1x</span>
|
|
823
|
+
<span class="cline-any cline-yes">1x</span>
|
|
824
|
+
<span class="cline-any cline-yes">1x</span>
|
|
825
|
+
<span class="cline-any cline-yes">1x</span>
|
|
826
|
+
<span class="cline-any cline-yes">1x</span>
|
|
827
|
+
<span class="cline-any cline-yes">1x</span>
|
|
828
|
+
<span class="cline-any cline-yes">40x</span>
|
|
829
|
+
<span class="cline-any cline-yes">40x</span>
|
|
830
|
+
<span class="cline-any cline-yes">52x</span>
|
|
831
|
+
<span class="cline-any cline-yes">52x</span>
|
|
832
|
+
<span class="cline-any cline-yes">34x</span>
|
|
833
|
+
<span class="cline-any cline-yes">34x</span>
|
|
834
|
+
<span class="cline-any cline-yes">18x</span>
|
|
835
|
+
<span class="cline-any cline-yes">18x</span>
|
|
836
|
+
<span class="cline-any cline-yes">18x</span>
|
|
837
|
+
<span class="cline-any cline-yes">18x</span>
|
|
838
|
+
<span class="cline-any cline-yes">18x</span>
|
|
839
|
+
<span class="cline-any cline-yes">52x</span>
|
|
840
|
+
<span class="cline-any cline-yes">52x</span>
|
|
841
|
+
<span class="cline-any cline-yes">52x</span>
|
|
842
|
+
<span class="cline-any cline-yes">52x</span>
|
|
843
|
+
<span class="cline-any cline-yes">52x</span>
|
|
844
|
+
<span class="cline-any cline-yes">52x</span>
|
|
845
|
+
<span class="cline-any cline-yes">52x</span>
|
|
846
|
+
<span class="cline-any cline-yes">6x</span>
|
|
847
|
+
<span class="cline-any cline-yes">6x</span>
|
|
848
|
+
<span class="cline-any cline-yes">12x</span>
|
|
849
|
+
<span class="cline-any cline-yes">12x</span>
|
|
850
|
+
<span class="cline-any cline-yes">12x</span>
|
|
851
|
+
<span class="cline-any cline-yes">12x</span>
|
|
852
|
+
<span class="cline-any cline-yes">52x</span>
|
|
853
|
+
<span class="cline-any cline-yes">52x</span>
|
|
854
|
+
<span class="cline-any cline-yes">52x</span>
|
|
855
|
+
<span class="cline-any cline-yes">52x</span>
|
|
856
|
+
<span class="cline-any cline-yes">12x</span>
|
|
724
857
|
<span class="cline-any cline-yes">1x</span>
|
|
725
858
|
<span class="cline-any cline-yes">1x</span>
|
|
726
|
-
<span class="cline-any cline-yes">
|
|
727
|
-
<span class="cline-any cline-yes">23x</span>
|
|
859
|
+
<span class="cline-any cline-yes">12x</span>
|
|
728
860
|
<span class="cline-any cline-yes">1x</span>
|
|
729
861
|
<span class="cline-any cline-yes">1x</span>
|
|
730
862
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -733,50 +865,50 @@
|
|
|
733
865
|
<span class="cline-any cline-yes">1x</span>
|
|
734
866
|
<span class="cline-any cline-yes">1x</span>
|
|
735
867
|
<span class="cline-any cline-yes">1x</span>
|
|
736
|
-
<span class="cline-any cline-yes">
|
|
737
|
-
<span class="cline-any cline-yes">
|
|
738
|
-
<span class="cline-any cline-yes">
|
|
739
|
-
<span class="cline-any cline-yes">
|
|
740
|
-
<span class="cline-any cline-yes">
|
|
741
|
-
<span class="cline-any cline-yes">
|
|
742
|
-
<span class="cline-any cline-yes">
|
|
743
|
-
<span class="cline-any cline-yes">
|
|
744
|
-
<span class="cline-any cline-yes">
|
|
745
|
-
<span class="cline-any cline-yes">
|
|
746
|
-
<span class="cline-any cline-yes">
|
|
747
|
-
<span class="cline-any cline-yes">
|
|
868
|
+
<span class="cline-any cline-yes">61x</span>
|
|
869
|
+
<span class="cline-any cline-yes">61x</span>
|
|
870
|
+
<span class="cline-any cline-yes">61x</span>
|
|
871
|
+
<span class="cline-any cline-yes">61x</span>
|
|
872
|
+
<span class="cline-any cline-yes">61x</span>
|
|
873
|
+
<span class="cline-any cline-yes">61x</span>
|
|
874
|
+
<span class="cline-any cline-yes">61x</span>
|
|
875
|
+
<span class="cline-any cline-yes">61x</span>
|
|
876
|
+
<span class="cline-any cline-yes">61x</span>
|
|
877
|
+
<span class="cline-any cline-yes">61x</span>
|
|
878
|
+
<span class="cline-any cline-yes">61x</span>
|
|
879
|
+
<span class="cline-any cline-yes">61x</span>
|
|
748
880
|
<span class="cline-any cline-yes">7x</span>
|
|
749
881
|
<span class="cline-any cline-yes">7x</span>
|
|
750
|
-
<span class="cline-any cline-yes">
|
|
751
|
-
<span class="cline-any cline-yes">
|
|
752
|
-
<span class="cline-any cline-yes">
|
|
753
|
-
<span class="cline-any cline-yes">
|
|
754
|
-
<span class="cline-any cline-yes">
|
|
882
|
+
<span class="cline-any cline-yes">54x</span>
|
|
883
|
+
<span class="cline-any cline-yes">54x</span>
|
|
884
|
+
<span class="cline-any cline-yes">54x</span>
|
|
885
|
+
<span class="cline-any cline-yes">60x</span>
|
|
886
|
+
<span class="cline-any cline-yes">48x</span>
|
|
755
887
|
<span class="cline-any cline-yes">2x</span>
|
|
756
888
|
<span class="cline-any cline-yes">2x</span>
|
|
757
889
|
<span class="cline-any cline-yes">1x</span>
|
|
758
890
|
<span class="cline-any cline-yes">1x</span>
|
|
759
891
|
<span class="cline-any cline-yes">1x</span>
|
|
760
|
-
<span class="cline-any cline-yes">
|
|
761
|
-
<span class="cline-any cline-yes">
|
|
762
|
-
<span class="cline-any cline-yes">
|
|
763
|
-
<span class="cline-any cline-yes">
|
|
764
|
-
<span class="cline-any cline-yes">
|
|
765
|
-
<span class="cline-any cline-yes">
|
|
892
|
+
<span class="cline-any cline-yes">48x</span>
|
|
893
|
+
<span class="cline-any cline-yes">46x</span>
|
|
894
|
+
<span class="cline-any cline-yes">46x</span>
|
|
895
|
+
<span class="cline-any cline-yes">46x</span>
|
|
896
|
+
<span class="cline-any cline-yes">46x</span>
|
|
897
|
+
<span class="cline-any cline-yes">46x</span>
|
|
766
898
|
<span class="cline-any cline-yes">3x</span>
|
|
767
899
|
<span class="cline-any cline-yes">3x</span>
|
|
768
|
-
<span class="cline-any cline-yes">38x</span>
|
|
769
|
-
<span class="cline-any cline-yes">41x</span>
|
|
770
|
-
<span class="cline-any cline-yes">41x</span>
|
|
771
|
-
<span class="cline-any cline-yes">41x</span>
|
|
772
|
-
<span class="cline-any cline-yes">41x</span>
|
|
773
|
-
<span class="cline-any cline-yes">41x</span>
|
|
774
|
-
<span class="cline-any cline-yes">41x</span>
|
|
775
|
-
<span class="cline-any cline-yes">41x</span>
|
|
776
900
|
<span class="cline-any cline-yes">43x</span>
|
|
777
|
-
<span class="cline-any cline-yes">
|
|
778
|
-
<span class="cline-any cline-yes">
|
|
779
|
-
<span class="cline-any cline-yes">
|
|
901
|
+
<span class="cline-any cline-yes">46x</span>
|
|
902
|
+
<span class="cline-any cline-yes">46x</span>
|
|
903
|
+
<span class="cline-any cline-yes">46x</span>
|
|
904
|
+
<span class="cline-any cline-yes">46x</span>
|
|
905
|
+
<span class="cline-any cline-yes">46x</span>
|
|
906
|
+
<span class="cline-any cline-yes">46x</span>
|
|
907
|
+
<span class="cline-any cline-yes">46x</span>
|
|
908
|
+
<span class="cline-any cline-yes">48x</span>
|
|
909
|
+
<span class="cline-any cline-yes">50x</span>
|
|
910
|
+
<span class="cline-any cline-yes">50x</span>
|
|
911
|
+
<span class="cline-any cline-yes">50x</span>
|
|
780
912
|
<span class="cline-any cline-yes">1x</span>
|
|
781
913
|
<span class="cline-any cline-yes">1x</span>
|
|
782
914
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -786,44 +918,46 @@
|
|
|
786
918
|
<span class="cline-any cline-yes">1x</span>
|
|
787
919
|
<span class="cline-any cline-yes">1x</span>
|
|
788
920
|
<span class="cline-any cline-yes">1x</span>
|
|
789
|
-
<span class="cline-any cline-yes">
|
|
790
|
-
<span class="cline-any cline-yes">
|
|
791
|
-
<span class="cline-any cline-yes">
|
|
792
|
-
<span class="cline-any cline-yes">
|
|
793
|
-
<span class="cline-any cline-yes">
|
|
794
|
-
<span class="cline-any cline-yes">
|
|
795
|
-
<span class="cline-any cline-yes">
|
|
796
|
-
<span class="cline-any cline-yes">
|
|
797
|
-
<span class="cline-any cline-yes">
|
|
798
|
-
<span class="cline-any cline-yes">
|
|
799
|
-
<span class="cline-any cline-yes">
|
|
800
|
-
<span class="cline-any cline-yes">
|
|
801
|
-
<span class="cline-any cline-yes">1x</span>
|
|
802
|
-
<span class="cline-any cline-yes">1x</span>
|
|
921
|
+
<span class="cline-any cline-yes">107x</span>
|
|
922
|
+
<span class="cline-any cline-yes">107x</span>
|
|
923
|
+
<span class="cline-any cline-yes">107x</span>
|
|
924
|
+
<span class="cline-any cline-yes">107x</span>
|
|
925
|
+
<span class="cline-any cline-yes">107x</span>
|
|
926
|
+
<span class="cline-any cline-yes">107x</span>
|
|
927
|
+
<span class="cline-any cline-yes">214x</span>
|
|
928
|
+
<span class="cline-any cline-yes">112x</span>
|
|
929
|
+
<span class="cline-any cline-yes">112x</span>
|
|
930
|
+
<span class="cline-any cline-yes">214x</span>
|
|
931
|
+
<span class="cline-any cline-yes">107x</span>
|
|
932
|
+
<span class="cline-any cline-yes">107x</span>
|
|
803
933
|
<span class="cline-any cline-yes">1x</span>
|
|
804
|
-
<span class="cline-any cline-yes">
|
|
805
|
-
<span class="cline-any cline-yes">
|
|
806
|
-
<span class="cline-any cline-yes">
|
|
807
|
-
<span class="cline-any cline-yes">
|
|
808
|
-
<span class="cline-any cline-yes">
|
|
809
|
-
<span class="cline-any cline-yes">
|
|
810
|
-
<span class="cline-any cline-yes">
|
|
934
|
+
<span class="cline-any cline-yes">107x</span>
|
|
935
|
+
<span class="cline-any cline-yes">107x</span>
|
|
936
|
+
<span class="cline-any cline-yes">107x</span>
|
|
937
|
+
<span class="cline-any cline-yes">107x</span>
|
|
938
|
+
<span class="cline-any cline-yes">107x</span>
|
|
939
|
+
<span class="cline-any cline-yes">107x</span>
|
|
940
|
+
<span class="cline-any cline-yes">107x</span>
|
|
941
|
+
<span class="cline-any cline-yes">107x</span>
|
|
811
942
|
<span class="cline-any cline-yes">3x</span>
|
|
812
943
|
<span class="cline-any cline-yes">3x</span>
|
|
813
944
|
<span class="cline-any cline-yes">3x</span>
|
|
814
|
-
<span class="cline-any cline-yes">
|
|
815
|
-
<span class="cline-any cline-yes">
|
|
945
|
+
<span class="cline-any cline-yes">104x</span>
|
|
946
|
+
<span class="cline-any cline-yes">107x</span>
|
|
816
947
|
<span class="cline-any cline-yes">5x</span>
|
|
817
948
|
<span class="cline-any cline-yes">5x</span>
|
|
818
949
|
<span class="cline-any cline-yes">5x</span>
|
|
819
|
-
<span class="cline-any cline-yes">
|
|
820
|
-
<span class="cline-any cline-yes">
|
|
821
|
-
<span class="cline-any cline-yes">
|
|
950
|
+
<span class="cline-any cline-yes">5x</span>
|
|
951
|
+
<span class="cline-any cline-yes">5x</span>
|
|
952
|
+
<span class="cline-any cline-yes">5x</span>
|
|
953
|
+
<span class="cline-any cline-yes">99x</span>
|
|
954
|
+
<span class="cline-any cline-yes">99x</span>
|
|
955
|
+
<span class="cline-any cline-yes">107x</span>
|
|
822
956
|
<span class="cline-any cline-yes">2x</span>
|
|
823
957
|
<span class="cline-any cline-yes">2x</span>
|
|
824
|
-
<span class="cline-any cline-yes">
|
|
825
|
-
<span class="cline-any cline-yes">
|
|
826
|
-
<span class="cline-any cline-yes">
|
|
958
|
+
<span class="cline-any cline-yes">97x</span>
|
|
959
|
+
<span class="cline-any cline-yes">97x</span>
|
|
960
|
+
<span class="cline-any cline-yes">97x</span>
|
|
827
961
|
<span class="cline-any cline-yes">1x</span>
|
|
828
962
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/*
|
|
829
963
|
* Copyright (c) 2026 Erik Fortune
|
|
@@ -905,6 +1039,9 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
905
1039
|
private readonly _autoSync: boolean;
|
|
906
1040
|
private readonly _userId: string | undefined;
|
|
907
1041
|
private readonly _logger: Logging.LogReporter<unknown>;
|
|
1042
|
+
|
|
1043
|
+
/** Guards against concurrent syncToDisk calls (thundering herd from autoSync). */
|
|
1044
|
+
private _syncPromise: Promise<Result<void>> | undefined;
|
|
908
1045
|
|
|
909
1046
|
private constructor(files: FileTree.IInMemoryFile<TCT>[], params: IHttpTreeParams<TCT>) {
|
|
910
1047
|
super(files, params);
|
|
@@ -944,21 +1081,45 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
944
1081
|
|
|
945
1082
|
/**
|
|
946
1083
|
* Synchronizes all dirty files to the HTTP backend.
|
|
1084
|
+
*
|
|
1085
|
+
* Uses a concurrency guard: if a sync is already in progress, callers
|
|
1086
|
+
* await the existing operation rather than starting a parallel one.
|
|
1087
|
+
* This prevents the thundering herd that occurs when autoSync fires
|
|
1088
|
+
* for every file written during a bulk operation (e.g. restore).
|
|
1089
|
+
*
|
|
947
1090
|
* @returns A promise that resolves to a result indicating success or failure.
|
|
948
1091
|
*/
|
|
949
1092
|
public async syncToDisk(): Promise<Result<void>> {
|
|
1093
|
+
if (this._syncPromise) {
|
|
1094
|
+
return this._syncPromise;
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
this._syncPromise = this._doSync().finally(() => {
|
|
1098
|
+
this._syncPromise = undefined;
|
|
1099
|
+
});
|
|
1100
|
+
return this._syncPromise;
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
private async _doSync(): Promise<Result<void>> {
|
|
950
1104
|
if (this._dirtyFiles.size === 0 && this._pendingDeletions.size === 0) {
|
|
951
1105
|
return succeed(undefined);
|
|
952
1106
|
}
|
|
953
1107
|
|
|
954
|
-
|
|
1108
|
+
// Snapshot and clear dirty sets so that changes arriving during
|
|
1109
|
+
// the async sync are not dropped when we finish.
|
|
1110
|
+
const deletions = new Set(this._pendingDeletions);
|
|
1111
|
+
const dirty = new Set(this._dirtyFiles);
|
|
1112
|
+
this._pendingDeletions.clear();
|
|
1113
|
+
this._dirtyFiles.clear();
|
|
1114
|
+
|
|
1115
|
+
for (const path of deletions) {
|
|
955
1116
|
const query = new URLSearchParams();
|
|
956
1117
|
query.set('path', path);
|
|
957
1118
|
if (this._namespace) {
|
|
958
1119
|
query.set('namespace', this._namespace);
|
|
959
1120
|
}
|
|
960
1121
|
|
|
961
|
-
const deleteResult = await this.
|
|
1122
|
+
const deleteResult = await this._requestWithRetry<{ deleted: boolean }>(`/file?${query.toString()}`, {
|
|
962
1123
|
method: 'DELETE'
|
|
963
1124
|
});
|
|
964
1125
|
if (deleteResult.isFailure()) {
|
|
@@ -966,7 +1127,7 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
966
1127
|
}
|
|
967
1128
|
}
|
|
968
1129
|
|
|
969
|
-
for (const path of
|
|
1130
|
+
for (const path of dirty) {
|
|
970
1131
|
const contentsResult = this.getFileContents(path);
|
|
971
1132
|
if (contentsResult.isFailure()) {
|
|
972
1133
|
return fail(`${path}: ${contentsResult.message}`);
|
|
@@ -980,7 +1141,7 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
980
1141
|
body.namespace = this._namespace;
|
|
981
1142
|
}
|
|
982
1143
|
|
|
983
|
-
const saveResult = await this.
|
|
1144
|
+
const saveResult = await this._requestWithRetry<IHttpStorageFileResponse>('/file', {
|
|
984
1145
|
method: 'PUT',
|
|
985
1146
|
body: JSON.stringify(body)
|
|
986
1147
|
});
|
|
@@ -988,16 +1149,13 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
988
1149
|
return fail(`sync ${path}: ${saveResult.message}`);
|
|
989
1150
|
}
|
|
990
1151
|
}
|
|
991
|
-
|
|
992
|
-
this._pendingDeletions.clear();
|
|
993
|
-
this._dirtyFiles.clear();
|
|
994
1152
|
|
|
995
1153
|
const syncBody: Record<string, unknown> = {};
|
|
996
1154
|
if (this._namespace) {
|
|
997
1155
|
syncBody.namespace = this._namespace;
|
|
998
1156
|
}
|
|
999
1157
|
|
|
1000
|
-
const syncResult = await this.
|
|
1158
|
+
const syncResult = await this._requestWithRetry<IHttpStorageSyncResponse>('/sync', {
|
|
1001
1159
|
method: 'POST',
|
|
1002
1160
|
body: JSON.stringify(syncBody)
|
|
1003
1161
|
});
|
|
@@ -1096,7 +1254,10 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
1096
1254
|
}
|
|
1097
1255
|
|
|
1098
1256
|
if (!response.ok) {
|
|
1099
|
-
const
|
|
1257
|
+
const body = await response.text().catch(() => '');
|
|
1258
|
+
const message = body
|
|
1259
|
+
? `HTTP ${response.status}: ${body}`
|
|
1260
|
+
: `HTTP ${response.status} ${response.statusText}`;
|
|
1100
1261
|
return fail(message);
|
|
1101
1262
|
}
|
|
1102
1263
|
|
|
@@ -1106,6 +1267,44 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
1106
1267
|
}
|
|
1107
1268
|
return succeed(json as T);
|
|
1108
1269
|
}
|
|
1270
|
+
|
|
1271
|
+
/**
|
|
1272
|
+
* Wraps `_request` with retry logic for transient failures
|
|
1273
|
+
* (network errors, 503 service unavailable, etc.).
|
|
1274
|
+
*/
|
|
1275
|
+
private async _requestWithRetry<T>(resourcePath: string, init?: RequestInit): Promise<Result<T>> {
|
|
1276
|
+
const maxAttempts = 3;
|
|
1277
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
1278
|
+
const result = await this._request<T>(resourcePath, init);
|
|
1279
|
+
if (result.isSuccess() || attempt === maxAttempts) {
|
|
1280
|
+
return result;
|
|
1281
|
+
}
|
|
1282
|
+
// Retry on transient-looking errors
|
|
1283
|
+
const msg = result.message;
|
|
1284
|
+
const lowerMsg = msg.toLowerCase();
|
|
1285
|
+
const isTransient =
|
|
1286
|
+
msg.includes('503') ||
|
|
1287
|
+
msg.includes('502') ||
|
|
1288
|
+
msg.includes('429') ||
|
|
1289
|
+
lowerMsg.includes('disconnect') ||
|
|
1290
|
+
lowerMsg.includes('econnreset') ||
|
|
1291
|
+
lowerMsg.includes('failed to fetch') ||
|
|
1292
|
+
lowerMsg.includes('network');
|
|
1293
|
+
if (!isTransient) {
|
|
1294
|
+
return result;
|
|
1295
|
+
}
|
|
1296
|
+
// Exponential backoff: 500ms, 1000ms
|
|
1297
|
+
const delayMs = 500 * Math.pow(2, attempt - 1);
|
|
1298
|
+
this._logger.detail(
|
|
1299
|
+
`Retrying ${
|
|
1300
|
+
init<span class="branch-0 cbranch-no" title="branch not covered" >?.m</span>ethod<span class="branch-0 cbranch-no" title="branch not covered" > ?? 'GET'</span>
|
|
1301
|
+
} ${resourcePath} after ${delayMs}ms (attempt ${attempt}/${maxAttempts})`
|
|
1302
|
+
);
|
|
1303
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
1304
|
+
}
|
|
1305
|
+
/* c8 ignore next 1 - defensive coding: loop always returns */
|
|
1306
|
+
return fail('retry loop exited unexpectedly');
|
|
1307
|
+
}
|
|
1109
1308
|
|
|
1110
1309
|
/**
|
|
1111
1310
|
* Loads files from the HTTP backend for the specified directory path.
|
|
@@ -1179,8 +1378,7 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
1179
1378
|
}
|
|
1180
1379
|
|
|
1181
1380
|
const fetchImpl = normalizeFetch(params.fetchImpl);
|
|
1182
|
-
|
|
1183
|
-
const userIdHeaders: RequestInit | undefined = params.userId
|
|
1381
|
+
const userIdHeaders: RequestInit | undefined = /* c8 ignore next */ params.userId
|
|
1184
1382
|
? { headers: { 'X-User-Id': params.userId } }
|
|
1185
1383
|
: undefined;
|
|
1186
1384
|
const response = await fetchImpl(
|
|
@@ -1194,7 +1392,10 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
1194
1392
|
}
|
|
1195
1393
|
|
|
1196
1394
|
if (!response.ok) {
|
|
1197
|
-
const
|
|
1395
|
+
const body = await response.text().catch(() => '');
|
|
1396
|
+
const message = body
|
|
1397
|
+
? `HTTP ${response.status}: ${body}`
|
|
1398
|
+
: `HTTP ${response.status} ${response.statusText}`;
|
|
1198
1399
|
return fail(message);
|
|
1199
1400
|
}
|
|
1200
1401
|
|
|
@@ -1213,7 +1414,7 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
1213
1414
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1214
1415
|
Code coverage generated by
|
|
1215
1416
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1216
|
-
at 2026-03-
|
|
1417
|
+
at 2026-03-24T18:05:41.460Z
|
|
1217
1418
|
</div>
|
|
1218
1419
|
<script src="../prettify.js"></script>
|
|
1219
1420
|
<script>
|