@rnx-kit/cli 0.12.2 → 0.12.3

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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">19.83% </span>
26
+ <span class="strong">54.36% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>24/121</span>
28
+ <span class='fraction'>81/149</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">10.38% </span>
33
+ <span class="strong">47.36% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>8/77</span>
35
+ <span class='fraction'>45/95</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">50% </span>
40
+ <span class="strong">76.47% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>8/16</span>
42
+ <span class='fraction'>13/17</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">19.83% </span>
47
+ <span class="strong">54.05% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>24/121</span>
49
+ <span class='fraction'>80/148</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line medium'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -497,7 +497,130 @@
497
497
  <a name='L432'></a><a href='#L432'>432</a>
498
498
  <a name='L433'></a><a href='#L433'>433</a>
499
499
  <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
501
624
  <span class="cline-any cline-neutral">&nbsp;</span>
502
625
  <span class="cline-any cline-neutral">&nbsp;</span>
503
626
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -544,6 +667,27 @@
544
667
  <span class="cline-any cline-neutral">&nbsp;</span>
545
668
  <span class="cline-any cline-neutral">&nbsp;</span>
546
669
  <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-neutral">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-neutral">&nbsp;</span>
678
+ <span class="cline-any cline-neutral">&nbsp;</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-yes">2x</span>
682
+ <span class="cline-any cline-neutral">&nbsp;</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</span>
684
+ <span class="cline-any cline-neutral">&nbsp;</span>
685
+ <span class="cline-any cline-neutral">&nbsp;</span>
686
+ <span class="cline-any cline-neutral">&nbsp;</span>
687
+ <span class="cline-any cline-neutral">&nbsp;</span>
688
+ <span class="cline-any cline-neutral">&nbsp;</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-neutral">&nbsp;</span>
547
691
  <span class="cline-any cline-no">&nbsp;</span>
548
692
  <span class="cline-any cline-no">&nbsp;</span>
549
693
  <span class="cline-any cline-no">&nbsp;</span>
@@ -551,13 +695,19 @@
551
695
  <span class="cline-any cline-neutral">&nbsp;</span>
552
696
  <span class="cline-any cline-neutral">&nbsp;</span>
553
697
  <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-no">&nbsp;</span>
555
- <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-yes">4x</span>
699
+ <span class="cline-any cline-yes">3x</span>
556
700
  <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-no">&nbsp;</span>
701
+ <span class="cline-any cline-yes">1x</span>
558
702
  <span class="cline-any cline-no">&nbsp;</span>
559
703
  <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-no">&nbsp;</span>
704
+ <span class="cline-any cline-yes">1x</span>
705
+ <span class="cline-any cline-neutral">&nbsp;</span>
706
+ <span class="cline-any cline-neutral">&nbsp;</span>
707
+ <span class="cline-any cline-neutral">&nbsp;</span>
708
+ <span class="cline-any cline-yes">4x</span>
709
+ <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
711
  <span class="cline-any cline-neutral">&nbsp;</span>
562
712
  <span class="cline-any cline-neutral">&nbsp;</span>
563
713
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -569,20 +719,29 @@
569
719
  <span class="cline-any cline-neutral">&nbsp;</span>
570
720
  <span class="cline-any cline-neutral">&nbsp;</span>
571
721
  <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-yes">2x</span>
722
+ <span class="cline-any cline-yes">9x</span>
723
+ <span class="cline-any cline-yes">9x</span>
573
724
  <span class="cline-any cline-yes">1x</span>
574
725
  <span class="cline-any cline-neutral">&nbsp;</span>
575
726
  <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-yes">8x</span>
728
+ <span class="cline-any cline-yes">8x</span>
576
729
  <span class="cline-any cline-neutral">&nbsp;</span>
577
730
  <span class="cline-any cline-neutral">&nbsp;</span>
578
731
  <span class="cline-any cline-neutral">&nbsp;</span>
579
732
  <span class="cline-any cline-neutral">&nbsp;</span>
580
733
  <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-no">&nbsp;</span>
582
734
  <span class="cline-any cline-neutral">&nbsp;</span>
583
735
  <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-yes">5x</span>
737
+ <span class="cline-any cline-yes">5x</span>
738
+ <span class="cline-any cline-yes">1x</span>
584
739
  <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-no">&nbsp;</span>
740
+ <span class="cline-any cline-neutral">&nbsp;</span>
741
+ <span class="cline-any cline-yes">4x</span>
742
+ <span class="cline-any cline-yes">4x</span>
743
+ <span class="cline-any cline-neutral">&nbsp;</span>
744
+ <span class="cline-any cline-yes">4x</span>
586
745
  <span class="cline-any cline-neutral">&nbsp;</span>
587
746
  <span class="cline-any cline-no">&nbsp;</span>
588
747
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -595,6 +754,8 @@
595
754
  <span class="cline-any cline-neutral">&nbsp;</span>
596
755
  <span class="cline-any cline-neutral">&nbsp;</span>
597
756
  <span class="cline-any cline-neutral">&nbsp;</span>
757
+ <span class="cline-any cline-neutral">&nbsp;</span>
758
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
759
  <span class="cline-any cline-no">&nbsp;</span>
599
760
  <span class="cline-any cline-neutral">&nbsp;</span>
600
761
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -606,10 +767,10 @@
606
767
  <span class="cline-any cline-neutral">&nbsp;</span>
607
768
  <span class="cline-any cline-neutral">&nbsp;</span>
608
769
  <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-no">&nbsp;</span>
610
- <span class="cline-any cline-no">&nbsp;</span>
611
770
  <span class="cline-any cline-neutral">&nbsp;</span>
612
771
  <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-yes">4x</span>
773
+ <span class="cline-any cline-yes">4x</span>
613
774
  <span class="cline-any cline-neutral">&nbsp;</span>
614
775
  <span class="cline-any cline-neutral">&nbsp;</span>
615
776
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -635,29 +796,52 @@
635
796
  <span class="cline-any cline-neutral">&nbsp;</span>
636
797
  <span class="cline-any cline-neutral">&nbsp;</span>
637
798
  <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-no">&nbsp;</span>
639
- <span class="cline-any cline-no">&nbsp;</span>
640
799
  <span class="cline-any cline-neutral">&nbsp;</span>
641
800
  <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-no">&nbsp;</span>
643
- <span class="cline-any cline-no">&nbsp;</span>
644
801
  <span class="cline-any cline-neutral">&nbsp;</span>
645
802
  <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-no">&nbsp;</span>
647
- <span class="cline-any cline-no">&nbsp;</span>
648
- <span class="cline-any cline-no">&nbsp;</span>
803
+ <span class="cline-any cline-yes">7x</span>
804
+ <span class="cline-any cline-yes">1x</span>
649
805
  <span class="cline-any cline-neutral">&nbsp;</span>
650
806
  <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-no">&nbsp;</span>
652
- <span class="cline-any cline-no">&nbsp;</span>
653
- <span class="cline-any cline-no">&nbsp;</span>
654
- <span class="cline-any cline-no">&nbsp;</span>
807
+ <span class="cline-any cline-yes">6x</span>
808
+ <span class="cline-any cline-yes">6x</span>
655
809
  <span class="cline-any cline-neutral">&nbsp;</span>
656
810
  <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-no">&nbsp;</span>
658
- <span class="cline-any cline-no">&nbsp;</span>
659
- <span class="cline-any cline-no">&nbsp;</span>
660
- <span class="cline-any cline-no">&nbsp;</span>
811
+ <span class="cline-any cline-yes">6x</span>
812
+ <span class="cline-any cline-yes">1x</span>
813
+ <span class="cline-any cline-yes">1x</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-neutral">&nbsp;</span>
816
+ <span class="cline-any cline-yes">5x</span>
817
+ <span class="cline-any cline-neutral">&nbsp;</span>
818
+ <span class="cline-any cline-neutral">&nbsp;</span>
819
+ <span class="cline-any cline-neutral">&nbsp;</span>
820
+ <span class="cline-any cline-neutral">&nbsp;</span>
821
+ <span class="cline-any cline-yes">4x</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-neutral">&nbsp;</span>
825
+ <span class="cline-any cline-neutral">&nbsp;</span>
826
+ <span class="cline-any cline-yes">3x</span>
827
+ <span class="cline-any cline-yes">3x</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-neutral">&nbsp;</span>
830
+ <span class="cline-any cline-neutral">&nbsp;</span>
831
+ <span class="cline-any cline-neutral">&nbsp;</span>
832
+ <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-neutral">&nbsp;</span>
834
+ <span class="cline-any cline-yes">3x</span>
835
+ <span class="cline-any cline-yes">3x</span>
836
+ <span class="cline-any cline-neutral">&nbsp;</span>
837
+ <span class="cline-any cline-yes">3x</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-yes">3x</span>
840
+ <span class="cline-any cline-yes">3x</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-yes">3x</span>
843
+ <span class="cline-any cline-yes">3x</span>
844
+ <span class="cline-any cline-yes">1x</span>
661
845
  <span class="cline-any cline-no">&nbsp;</span>
662
846
  <span class="cline-any cline-no">&nbsp;</span>
663
847
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -676,9 +860,37 @@
676
860
  <span class="cline-any cline-neutral">&nbsp;</span>
677
861
  <span class="cline-any cline-neutral">&nbsp;</span>
678
862
  <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-yes">1x</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-yes">2x</span>
866
+ <span class="cline-any cline-yes">2x</span>
679
867
  <span class="cline-any cline-no">&nbsp;</span>
680
868
  <span class="cline-any cline-neutral">&nbsp;</span>
681
869
  <span class="cline-any cline-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-yes">2x</span>
871
+ <span class="cline-any cline-neutral">&nbsp;</span>
872
+ <span class="cline-any cline-neutral">&nbsp;</span>
873
+ <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-neutral">&nbsp;</span>
876
+ <span class="cline-any cline-neutral">&nbsp;</span>
877
+ <span class="cline-any cline-neutral">&nbsp;</span>
878
+ <span class="cline-any cline-yes">2x</span>
879
+ <span class="cline-any cline-neutral">&nbsp;</span>
880
+ <span class="cline-any cline-yes">2x</span>
881
+ <span class="cline-any cline-neutral">&nbsp;</span>
882
+ <span class="cline-any cline-neutral">&nbsp;</span>
883
+ <span class="cline-any cline-yes">2x</span>
884
+ <span class="cline-any cline-neutral">&nbsp;</span>
885
+ <span class="cline-any cline-neutral">&nbsp;</span>
886
+ <span class="cline-any cline-yes">2x</span>
887
+ <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-yes">2x</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-neutral">&nbsp;</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-yes">2x</span>
682
894
  <span class="cline-any cline-neutral">&nbsp;</span>
683
895
  <span class="cline-any cline-neutral">&nbsp;</span>
684
896
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -688,18 +900,52 @@
688
900
  <span class="cline-any cline-neutral">&nbsp;</span>
689
901
  <span class="cline-any cline-neutral">&nbsp;</span>
690
902
  <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-no">&nbsp;</span>
692
- <span class="cline-any cline-no">&nbsp;</span>
693
903
  <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-no">&nbsp;</span>
695
- <span class="cline-any cline-no">&nbsp;</span>
696
- <span class="cline-any cline-no">&nbsp;</span>
697
904
  <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-no">&nbsp;</span>
699
905
  <span class="cline-any cline-neutral">&nbsp;</span>
700
906
  <span class="cline-any cline-neutral">&nbsp;</span>
701
907
  <span class="cline-any cline-neutral">&nbsp;</span>
702
908
  <span class="cline-any cline-neutral">&nbsp;</span>
909
+ <span class="cline-any cline-neutral">&nbsp;</span>
910
+ <span class="cline-any cline-neutral">&nbsp;</span>
911
+ <span class="cline-any cline-neutral">&nbsp;</span>
912
+ <span class="cline-any cline-neutral">&nbsp;</span>
913
+ <span class="cline-any cline-neutral">&nbsp;</span>
914
+ <span class="cline-any cline-neutral">&nbsp;</span>
915
+ <span class="cline-any cline-neutral">&nbsp;</span>
916
+ <span class="cline-any cline-neutral">&nbsp;</span>
917
+ <span class="cline-any cline-neutral">&nbsp;</span>
918
+ <span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-neutral">&nbsp;</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-neutral">&nbsp;</span>
923
+ <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-yes">2x</span>
926
+ <span class="cline-any cline-neutral">&nbsp;</span>
927
+ <span class="cline-any cline-yes">2x</span>
928
+ <span class="cline-any cline-neutral">&nbsp;</span>
929
+ <span class="cline-any cline-neutral">&nbsp;</span>
930
+ <span class="cline-any cline-neutral">&nbsp;</span>
931
+ <span class="cline-any cline-neutral">&nbsp;</span>
932
+ <span class="cline-any cline-neutral">&nbsp;</span>
933
+ <span class="cline-any cline-yes">2x</span>
934
+ <span class="cline-any cline-yes">2x</span>
935
+ <span class="cline-any cline-yes">2x</span>
936
+ <span class="cline-any cline-neutral">&nbsp;</span>
937
+ <span class="cline-any cline-neutral">&nbsp;</span>
938
+ <span class="cline-any cline-neutral">&nbsp;</span>
939
+ <span class="cline-any cline-yes">2x</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
941
+ <span class="cline-any cline-neutral">&nbsp;</span>
942
+ <span class="cline-any cline-yes">2x</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-yes">3x</span>
946
+ <span class="cline-any cline-neutral">&nbsp;</span>
947
+ <span class="cline-any cline-neutral">&nbsp;</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
703
949
  <span class="cline-any cline-yes">10x</span>
704
950
  <span class="cline-any cline-yes">8x</span>
705
951
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -900,7 +1146,7 @@
900
1146
  <span class="cline-any cline-neutral">&nbsp;</span>
901
1147
  <span class="cline-any cline-neutral">&nbsp;</span>
902
1148
  <span class="cline-any cline-neutral">&nbsp;</span>
903
- <span class="cline-any cline-yes">1x</span>
1149
+ <span class="cline-any cline-yes">2x</span>
904
1150
  <span class="cline-any cline-neutral">&nbsp;</span>
905
1151
  <span class="cline-any cline-neutral">&nbsp;</span>
906
1152
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -935,7 +1181,11 @@
935
1181
  import { error, info, warn } from "@rnx-kit/console";
936
1182
  import { isNonEmptyArray } from "@rnx-kit/tools-language/array";
937
1183
  import type { PackageManifest } from "@rnx-kit/tools-node/package";
938
- import { findPackageDir, readPackage } from "@rnx-kit/tools-node/package";
1184
+ import {
1185
+ findPackageDependencyDir,
1186
+ findPackageDir,
1187
+ readPackage,
1188
+ } from "@rnx-kit/tools-node/package";
939
1189
  import type { AllPlatforms } from "@rnx-kit/tools-react-native";
940
1190
  import { parsePlatform } from "@rnx-kit/tools-react-native";
941
1191
  import { spawnSync } from "child_process";
@@ -944,9 +1194,17 @@ import * as os from "os";
944
1194
  import * as path from "path";
945
1195
  &nbsp;
946
1196
  export type AndroidArchive = {
947
- targetName: string;
1197
+ targetName?: string;
948
1198
  version?: string;
949
1199
  output?: string;
1200
+ android?: {
1201
+ androidPluginVersion?: string;
1202
+ compileSdkVersion?: number;
1203
+ defaultConfig?: {
1204
+ minSdkVersion?: number;
1205
+ targetSdkVersion?: number;
1206
+ };
1207
+ };
950
1208
  };
951
1209
  &nbsp;
952
1210
  export type NativeAssets = {
@@ -977,6 +1235,15 @@ export type AssetsConfig = {
977
1235
  getAssets?: (context: Context) =&gt; Promise&lt;NativeAssets&gt;;
978
1236
  };
979
1237
  &nbsp;
1238
+ const defaultAndroidConfig: Required&lt;Required&lt;AndroidArchive&gt;["android"]&gt; = {
1239
+ androidPluginVersion: "7.1.3",
1240
+ compileSdkVersion: 31,
1241
+ defaultConfig: {
1242
+ minSdkVersion: 23,
1243
+ targetSdkVersion: 29,
1244
+ },
1245
+ };
1246
+ &nbsp;
980
1247
  function <span class="fstat-no" title="function not covered" >ensureOption(</span>options: Options, opt: string, flag = <span class="branch-0 cbranch-no" title="branch not covered" >opt)</span> {
981
1248
  <span class="cstat-no" title="statement not covered" > if (options[opt] == null) {</span>
982
1249
  <span class="cstat-no" title="statement not covered" > error(`Missing required option: --${flag}`);</span>
@@ -984,14 +1251,20 @@ function <span class="fstat-no" title="function not covered" >ensureOption(</spa
984
1251
  }
985
1252
  }
986
1253
  &nbsp;
987
- function <span class="fstat-no" title="function not covered" >findGradleProject(</span>projectRoot: string): string | undefined {
988
- <span class="cstat-no" title="statement not covered" > if (fs.existsSync(path.join(projectRoot, "android", "build.gradle"))) {</span>
989
- <span class="cstat-no" title="statement not covered" > return path.join(projectRoot, "android");</span>
1254
+ function findGradleProject(projectRoot: string): string | undefined {
1255
+ if (fs.existsSync(path.join(projectRoot, "android", "build.gradle"))) {
1256
+ return path.join(projectRoot, "android");
990
1257
  }
991
- <span class="cstat-no" title="statement not covered" > if (fs.existsSync(path.join(projectRoot, "build.gradle"))) {</span>
1258
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (fs.existsSync(path.join(projectRoot, "build.gradle"))) {
992
1259
  <span class="cstat-no" title="statement not covered" > return projectRoot;</span>
993
1260
  }
994
- <span class="cstat-no" title="statement not covered" > return undefined;</span>
1261
+ return undefined;
1262
+ }
1263
+ &nbsp;
1264
+ function gradleTargetName(packageName: string): string {
1265
+ return (
1266
+ packageName.startsWith("@") ? packageName.slice(1) : <span class="branch-1 cbranch-no" title="branch not covered" >packageName</span>
1267
+ ).replace(/[^\w\-.]+/g, "_");
995
1268
  }
996
1269
  &nbsp;
997
1270
  function <span class="fstat-no" title="function not covered" >isAssetsConfig(</span>config: unknown): config is AssetsConfig {
@@ -1003,22 +1276,33 @@ function keysOf(record: Record&lt;string, unknown&gt; | undefined): string[] {
1003
1276
  }
1004
1277
  &nbsp;
1005
1278
  export function versionOf(pkgName: string): string {
1006
- const { version } = readPackage(require.resolve(`${pkgName}/package.json`));
1279
+ const packageDir = findPackageDependencyDir(pkgName);
1280
+ if (!packageDir) {
1281
+ throw new Error(`Could not find module '${pkgName}'`);
1282
+ }
1283
+ &nbsp;
1284
+ const { version } = readPackage(packageDir);
1007
1285
  return version;
1008
1286
  }
1009
1287
  &nbsp;
1010
- function <span class="fstat-no" title="function not covered" >getAndroidPaths(</span>
1288
+ function getAndroidPaths(
1011
1289
  context: Context,
1012
1290
  packageName: string,
1013
1291
  { targetName, version, output }: AndroidArchive
1014
1292
  ) {
1015
- const projectRoot = <span class="cstat-no" title="statement not covered" >path.dirname(</span>
1016
- require.resolve(`${packageName}/package.json`)
1017
- );
1293
+ const projectRoot = findPackageDependencyDir(packageName);
1294
+ if (!projectRoot) {
1295
+ throw new Error(`Could not find module '${packageName}'`);
1296
+ }
1297
+ &nbsp;
1298
+ const gradleFriendlyName = targetName || gradleTargetName(packageName);
1299
+ const aarVersion = version || versionOf(packageName);
1018
1300
  &nbsp;
1019
- <span class="cstat-no" title="statement not covered" > switch (packageName) {</span>
1020
- case "hermes-engine":
1301
+ switch (packageName) {
1302
+ <span class="branch-0 cbranch-no" title="branch not covered" > case "hermes-engine":</span>
1021
1303
  <span class="cstat-no" title="statement not covered" > return {</span>
1304
+ targetName: gradleFriendlyName,
1305
+ version: aarVersion,
1022
1306
  projectRoot,
1023
1307
  output: path.join(projectRoot, "android", "hermes-release.aar"),
1024
1308
  destination: path.join(
@@ -1028,8 +1312,10 @@ function <span class="fstat-no" title="function not covered" >getAndroidPaths(</
1028
1312
  ),
1029
1313
  };
1030
1314
  &nbsp;
1031
- case "react-native":
1315
+ <span class="branch-1 cbranch-no" title="branch not covered" > case "react-native":</span>
1032
1316
  <span class="cstat-no" title="statement not covered" > return {</span>
1317
+ targetName: gradleFriendlyName,
1318
+ version: aarVersion,
1033
1319
  projectRoot,
1034
1320
  output: path.join(projectRoot, "android"),
1035
1321
  destination: path.join(
@@ -1040,8 +1326,10 @@ function <span class="fstat-no" title="function not covered" >getAndroidPaths(</
1040
1326
  };
1041
1327
  &nbsp;
1042
1328
  default: {
1043
- const androidProject = <span class="cstat-no" title="statement not covered" >findGradleProject(projectRoot);</span>
1044
- <span class="cstat-no" title="statement not covered" > return {</span>
1329
+ const androidProject = findGradleProject(projectRoot);
1330
+ return {
1331
+ targetName: gradleFriendlyName,
1332
+ version: aarVersion,
1045
1333
  projectRoot,
1046
1334
  androidProject,
1047
1335
  output:
@@ -1052,85 +1340,166 @@ function <span class="fstat-no" title="function not covered" >getAndroidPaths(</
1052
1340
  "build",
1053
1341
  "outputs",
1054
1342
  "aar",
1055
- `${targetName}-release.aar`
1343
+ `${gradleFriendlyName}-release.aar`
1056
1344
  )),
1057
1345
  destination: path.join(
1058
1346
  context.options.assetsDest,
1059
1347
  "aar",
1060
- `${targetName}-${version || versionOf(packageName)}.aar`
1348
+ `${gradleFriendlyName}-${aarVersion}.aar`
1061
1349
  ),
1062
1350
  };
1063
1351
  }
1064
1352
  }
1065
1353
  }
1066
1354
  &nbsp;
1067
- async function <span class="fstat-no" title="function not covered" >assembleAarBundle(</span>
1355
+ export async function assembleAarBundle(
1068
1356
  context: Context,
1069
1357
  packageName: string,
1070
1358
  { aar }: NativeAssets
1071
1359
  ): Promise&lt;void&gt; {
1072
- <span class="cstat-no" title="statement not covered" > if (!aar) {</span>
1073
- <span class="cstat-no" title="statement not covered" > return;</span>
1360
+ if (!aar) {
1361
+ return;
1074
1362
  }
1075
1363
  &nbsp;
1076
- const findUp = <span class="cstat-no" title="statement not covered" >require("find-up");</span>
1077
- const gradlew = <span class="cstat-no" title="statement not covered" >await findUp(</span>
1078
- os.platform() === "win32" ? "gradlew.bat" : "gradlew"
1364
+ const findUp = require("find-up");
1365
+ const gradlew = await findUp(
1366
+ os.platform() === "win32" ? <span class="branch-0 cbranch-no" title="branch not covered" >"gradlew.bat" </span>: "gradlew"
1079
1367
  );
1080
- <span class="cstat-no" title="statement not covered" > if (!gradlew) {</span>
1081
- <span class="cstat-no" title="statement not covered" > warn(`Skipped \`${packageName}\`: cannot find \`gradlew\``);</span>
1082
- <span class="cstat-no" title="statement not covered" > return;</span>
1368
+ if (!gradlew) {
1369
+ warn(`Skipped \`${packageName}\`: cannot find \`gradlew\``);
1370
+ return;
1083
1371
  }
1084
1372
  &nbsp;
1085
- const { androidProject, output } = <span class="cstat-no" title="statement not covered" >getAndroidPaths(context, packageName, aar);</span>
1086
- <span class="cstat-no" title="statement not covered" > if (!androidProject || !output) {</span>
1087
- <span class="cstat-no" title="statement not covered" > warn(`Skipped \`${packageName}\`: cannot find \`build.gradle\``);</span>
1088
- <span class="cstat-no" title="statement not covered" > return;</span>
1373
+ const { targetName, version, androidProject, output } = getAndroidPaths(
1374
+ context,
1375
+ packageName,
1376
+ aar
1377
+ );
1378
+ if (!androidProject || !output) {
1379
+ warn(`Skipped \`${packageName}\`: cannot find \`build.gradle\``);
1380
+ return;
1089
1381
  }
1090
1382
  &nbsp;
1091
- const { targetName, version, env, dependencies } = <span class="cstat-no" title="statement not covered" >aar;</span>
1092
- const targets = <span class="cstat-no" title="statement not covered" >[`:${targetName}:assembleRelease`];</span>
1093
- const targetsToCopy: [string, string][] = <span class="cstat-no" title="statement not covered" >[];</span>
1094
- <span class="cstat-no" title="statement not covered" > if (dependencies) {</span>
1095
- <span class="cstat-no" title="statement not covered" > for (const [dependencyName, aar] of Object.entries(dependencies)) {</span>
1096
- const { output, destination } = <span class="cstat-no" title="statement not covered" >getAndroidPaths(</span>
1097
- context,
1098
- dependencyName,
1099
- aar
1100
- );
1101
- <span class="cstat-no" title="statement not covered" > if (output) {</span>
1102
- <span class="cstat-no" title="statement not covered" > if (!fs.existsSync(output)) {</span>
1103
- <span class="cstat-no" title="statement not covered" > targets.push(`:${aar.targetName}:assembleRelease`);</span>
1104
- <span class="cstat-no" title="statement not covered" > targetsToCopy.push([output, destination]);</span>
1105
- } else <span class="cstat-no" title="statement not covered" >if (!fs.existsSync(destination)) {</span>
1106
- <span class="cstat-no" title="statement not covered" > targetsToCopy.push([output, destination]);</span>
1383
+ const { env: customEnv, dependencies, android } = aar;
1384
+ const env = {
1385
+ NODE_MODULES_PATH: path.join(process.cwd(), "node_modules"),
1386
+ REACT_NATIVE_VERSION: versionOf("react-native"),
1387
+ ...process.env,
1388
+ ...customEnv,
1389
+ };
1390
+ &nbsp;
1391
+ const outputDir = path.join(context.options.assetsDest, "aar");
1392
+ await fs.ensureDir(outputDir);
1393
+ &nbsp;
1394
+ const dest = path.join(outputDir, `${targetName}-${version}.aar`);
1395
+ &nbsp;
1396
+ const targets = [`:${targetName}:assembleRelease`];
1397
+ const targetsToCopy: [string, string][] = [[output, dest]];
1398
+ &nbsp;
1399
+ const settings = path.join(androidProject, "settings.gradle");
1400
+ if (fs.existsSync(settings)) {
1401
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (dependencies) {
1402
+ <span class="cstat-no" title="statement not covered" > for (const [dependencyName, aar] of Object.entries(dependencies)) {</span>
1403
+ const { targetName, output, destination } = <span class="cstat-no" title="statement not covered" >getAndroidPaths(</span>
1404
+ context,
1405
+ dependencyName,
1406
+ aar
1407
+ );
1408
+ <span class="cstat-no" title="statement not covered" > if (output) {</span>
1409
+ <span class="cstat-no" title="statement not covered" > if (!fs.existsSync(output)) {</span>
1410
+ <span class="cstat-no" title="statement not covered" > targets.push(`:${targetName}:assembleRelease`);</span>
1411
+ <span class="cstat-no" title="statement not covered" > targetsToCopy.push([output, destination]);</span>
1412
+ } else <span class="cstat-no" title="statement not covered" >if (!fs.existsSync(destination)) {</span>
1413
+ <span class="cstat-no" title="statement not covered" > targetsToCopy.push([output, destination]);</span>
1414
+ }
1107
1415
  }
1108
1416
  }
1109
1417
  }
1110
- }
1111
1418
  &nbsp;
1112
- // Run only one Gradle task at a time
1113
- <span class="cstat-no" title="statement not covered" > spawnSync(gradlew, targets, {</span>
1114
- cwd: androidProject,
1115
- stdio: "inherit",
1116
- env: {
1117
- ENABLE_HERMES: "true",
1118
- NODE_MODULES_PATH: path.join(process.cwd(), "node_modules"),
1119
- REACT_NATIVE_VERSION: versionOf("react-native"),
1120
- ...process.env,
1121
- ...env,
1122
- },
1123
- });
1419
+ // Run only one Gradle task at a time
1420
+ spawnSync(gradlew, targets, { cwd: androidProject, stdio: "inherit", env });
1421
+ } else {
1422
+ const reactNativePath = findPackageDependencyDir("react-native");
1423
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!reactNativePath) {
1424
+ <span class="cstat-no" title="statement not covered" > throw new Error("Could not find 'react-native'");</span>
1425
+ }
1426
+ &nbsp;
1427
+ const buildDir = path.join(
1428
+ process.cwd(),
1429
+ "node_modules",
1430
+ ".rnx-gradle-build",
1431
+ targetName
1432
+ );
1124
1433
  &nbsp;
1125
- const destination = <span class="cstat-no" title="statement not covered" >path.join(context.options.assetsDest, "aar");</span>
1126
- <span class="cstat-no" title="statement not covered" > await fs.ensureDir(destination);</span>
1434
+ const compileSdkVersion =
1435
+ android?.compileSdkVersion ?? defaultAndroidConfig.compileSdkVersion;
1436
+ const minSdkVersion =
1437
+ android?.defaultConfig?.minSdkVersion ??
1438
+ defaultAndroidConfig.defaultConfig.minSdkVersion;
1439
+ const targetSdkVersion =
1440
+ android?.defaultConfig?.targetSdkVersion ??
1441
+ defaultAndroidConfig.defaultConfig.targetSdkVersion;
1442
+ const androidPluginVersion =
1443
+ android?.androidPluginVersion ??
1444
+ defaultAndroidConfig.androidPluginVersion;
1445
+ const buildRelativeReactNativePath = path.relative(
1446
+ buildDir,
1447
+ reactNativePath
1448
+ );
1449
+ &nbsp;
1450
+ const buildGradle = [
1451
+ "buildscript {",
1452
+ " ext {",
1453
+ ` compileSdkVersion = ${compileSdkVersion}`,
1454
+ ` minSdkVersion = ${minSdkVersion}`,
1455
+ ` targetSdkVersion = ${targetSdkVersion}`,
1456
+ ` androidPluginVersion = "${androidPluginVersion}"`,
1457
+ " }",
1458
+ "",
1459
+ " repositories {",
1460
+ " mavenCentral()",
1461
+ " google()",
1462
+ " }",
1463
+ "",
1464
+ " dependencies {",
1465
+ ' classpath("com.android.tools.build:gradle:${project.ext.androidPluginVersion}")',
1466
+ " }",
1467
+ "}",
1468
+ "",
1469
+ "allprojects {",
1470
+ " repositories {",
1471
+ " maven {",
1472
+ " // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm",
1473
+ ` url("\${rootDir}/${buildRelativeReactNativePath}/android")`,
1474
+ " }",
1475
+ " mavenCentral()",
1476
+ " google()",
1477
+ " }",
1478
+ "}",
1479
+ "",
1480
+ ].join("\n");
1481
+ &nbsp;
1482
+ const gradleProperties = "android.useAndroidX=true\n";
1483
+ &nbsp;
1484
+ const settingsGradle = [
1485
+ `include(":${targetName}")`,
1486
+ `project(":${targetName}").projectDir = file("${androidProject}")`,
1487
+ "",
1488
+ ].join("\n");
1489
+ &nbsp;
1490
+ await fs.ensureDir(buildDir);
1491
+ await fs.writeFile(path.join(buildDir, "build.gradle"), buildGradle);
1492
+ await fs.writeFile(
1493
+ path.join(buildDir, "gradle.properties"),
1494
+ gradleProperties
1495
+ );
1496
+ await fs.writeFile(path.join(buildDir, "settings.gradle"), settingsGradle);
1497
+ &nbsp;
1498
+ // Run only one Gradle task at a time
1499
+ spawnSync(gradlew, targets, { cwd: buildDir, stdio: "inherit", env });
1500
+ }
1127
1501
  &nbsp;
1128
- const aarVersion = <span class="cstat-no" title="statement not covered" >version || versionOf(packageName);</span>
1129
- const dest = <span class="cstat-no" title="statement not covered" >path.join(destination, `${targetName}-${aarVersion}.aar`);</span>
1130
- <span class="cstat-no" title="statement not covered" > await Promise.all([</span>
1131
- fs.copy(output, dest),
1132
- ...targetsToCopy.map(<span class="fstat-no" title="function not covered" >([</span>src, dest]) =&gt; <span class="cstat-no" title="statement not covered" >fs.copy(src, dest))</span>,
1133
- ]);
1502
+ await Promise.all(targetsToCopy.map(([src, dest]) =&gt; fs.copy(src, dest)));
1134
1503
  }
1135
1504
  &nbsp;
1136
1505
  async function copyFiles(files: unknown, destination: string): Promise&lt;void&gt; {
@@ -1372,7 +1741,7 @@ export const rnxCopyAssetsCommand = {
1372
1741
  <div class='footer quiet pad2 space-top1 center small'>
1373
1742
  Code coverage generated by
1374
1743
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1375
- at Mon May 09 2022 19:29:43 GMT+0000 (Coordinated Universal Time)
1744
+ at Tue May 10 2022 07:45:57 GMT+0000 (Coordinated Universal Time)
1376
1745
  </div>
1377
1746
  <script src="../prettify.js"></script>
1378
1747
  <script>