ccjk 12.0.7 → 12.0.9
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/dist/chunks/agents.mjs +1 -1
- package/dist/chunks/auto-fixer.mjs +93 -0
- package/dist/chunks/auto-updater.mjs +3 -2
- package/dist/chunks/boost.mjs +1 -1
- package/dist/chunks/ccr.mjs +4 -3
- package/dist/chunks/check-updates.mjs +3 -2
- package/dist/chunks/claude-code-incremental-manager.mjs +3 -2
- package/dist/chunks/codex-config-switch.mjs +2 -1
- package/dist/chunks/codex-provider-manager.mjs +2 -1
- package/dist/chunks/codex-uninstaller.mjs +1 -1
- package/dist/chunks/codex.mjs +1 -1
- package/dist/chunks/config-switch.mjs +2 -1
- package/dist/chunks/config2.mjs +2 -1
- package/dist/chunks/doctor.mjs +1 -0
- package/dist/chunks/features.mjs +3 -2
- package/dist/chunks/index10.mjs +569 -1061
- package/dist/chunks/index11.mjs +1076 -913
- package/dist/chunks/index12.mjs +951 -135
- package/dist/chunks/index13.mjs +184 -209
- package/dist/chunks/index14.mjs +210 -655
- package/dist/chunks/index4.mjs +1 -1
- package/dist/chunks/index7.mjs +201 -2182
- package/dist/chunks/init.mjs +5 -5
- package/dist/chunks/installer.mjs +2 -1
- package/dist/chunks/mcp-cli.mjs +2 -1
- package/dist/chunks/mcp.mjs +2 -1
- package/dist/chunks/menu.mjs +22 -11
- package/dist/chunks/onboarding-wizard.mjs +93 -0
- package/dist/chunks/onboarding.mjs +1 -0
- package/dist/chunks/package.mjs +1 -1
- package/dist/chunks/prompts.mjs +2 -1
- package/dist/chunks/quick-actions.mjs +1 -1
- package/dist/chunks/quick-provider.mjs +1 -0
- package/dist/chunks/quick-setup.mjs +3 -2
- package/dist/chunks/remote.mjs +1 -0
- package/dist/chunks/status.mjs +7 -2
- package/dist/chunks/uninstall.mjs +3 -2
- package/dist/chunks/update.mjs +3 -2
- package/dist/chunks/upgrade-manager.mjs +1 -1
- package/dist/chunks/wsl.mjs +1 -1
- package/dist/cli.mjs +19 -3
- package/dist/shared/{ccjk.DOwtZMk8.mjs → ccjk.BWFpnOr3.mjs} +7 -1831
- package/dist/shared/{ccjk.D5MFQT7w.mjs → ccjk.CNMWk_mE.mjs} +7 -7
- package/dist/shared/{ccjk.BRZ9ww8S.mjs → ccjk.CvChMYvB.mjs} +1 -1
- package/dist/shared/ccjk.DeWpAShp.mjs +1828 -0
- package/dist/shared/{ccjk.BwfbSKN2.mjs → ccjk.Dx-O9dWz.mjs} +1 -1
- package/package.json +2 -2
package/dist/chunks/index7.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import process__default from 'node:process';
|
|
2
|
-
import { stripVTControlCharacters } from 'node:util';
|
|
3
2
|
import { o as onExit } from '../shared/ccjk.Cjgrln_h.mjs';
|
|
3
|
+
import { g as getDefaultExportFromCjs } from '../shared/ccjk.BAGoDD49.mjs';
|
|
4
|
+
import { r as requireCliSpinners } from '../shared/ccjk.DeWpAShp.mjs';
|
|
4
5
|
|
|
5
6
|
const ANSI_BACKGROUND_OFFSET = 10;
|
|
6
7
|
|
|
@@ -635,1751 +636,15 @@ cliCursor.toggle = (force, writableStream) => {
|
|
|
635
636
|
}
|
|
636
637
|
};
|
|
637
638
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
frames: [
|
|
641
|
-
"⠋",
|
|
642
|
-
"⠙",
|
|
643
|
-
"⠹",
|
|
644
|
-
"⠸",
|
|
645
|
-
"⠼",
|
|
646
|
-
"⠴",
|
|
647
|
-
"⠦",
|
|
648
|
-
"⠧",
|
|
649
|
-
"⠇",
|
|
650
|
-
"⠏"
|
|
651
|
-
]
|
|
652
|
-
};
|
|
653
|
-
const dots2 = {
|
|
654
|
-
interval: 80,
|
|
655
|
-
frames: [
|
|
656
|
-
"⣾",
|
|
657
|
-
"⣽",
|
|
658
|
-
"⣻",
|
|
659
|
-
"⢿",
|
|
660
|
-
"⡿",
|
|
661
|
-
"⣟",
|
|
662
|
-
"⣯",
|
|
663
|
-
"⣷"
|
|
664
|
-
]
|
|
665
|
-
};
|
|
666
|
-
const dots3 = {
|
|
667
|
-
interval: 80,
|
|
668
|
-
frames: [
|
|
669
|
-
"⠋",
|
|
670
|
-
"⠙",
|
|
671
|
-
"⠚",
|
|
672
|
-
"⠞",
|
|
673
|
-
"⠖",
|
|
674
|
-
"⠦",
|
|
675
|
-
"⠴",
|
|
676
|
-
"⠲",
|
|
677
|
-
"⠳",
|
|
678
|
-
"⠓"
|
|
679
|
-
]
|
|
680
|
-
};
|
|
681
|
-
const dots4 = {
|
|
682
|
-
interval: 80,
|
|
683
|
-
frames: [
|
|
684
|
-
"⠄",
|
|
685
|
-
"⠆",
|
|
686
|
-
"⠇",
|
|
687
|
-
"⠋",
|
|
688
|
-
"⠙",
|
|
689
|
-
"⠸",
|
|
690
|
-
"⠰",
|
|
691
|
-
"⠠",
|
|
692
|
-
"⠰",
|
|
693
|
-
"⠸",
|
|
694
|
-
"⠙",
|
|
695
|
-
"⠋",
|
|
696
|
-
"⠇",
|
|
697
|
-
"⠆"
|
|
698
|
-
]
|
|
699
|
-
};
|
|
700
|
-
const dots5 = {
|
|
701
|
-
interval: 80,
|
|
702
|
-
frames: [
|
|
703
|
-
"⠋",
|
|
704
|
-
"⠙",
|
|
705
|
-
"⠚",
|
|
706
|
-
"⠒",
|
|
707
|
-
"⠂",
|
|
708
|
-
"⠂",
|
|
709
|
-
"⠒",
|
|
710
|
-
"⠲",
|
|
711
|
-
"⠴",
|
|
712
|
-
"⠦",
|
|
713
|
-
"⠖",
|
|
714
|
-
"⠒",
|
|
715
|
-
"⠐",
|
|
716
|
-
"⠐",
|
|
717
|
-
"⠒",
|
|
718
|
-
"⠓",
|
|
719
|
-
"⠋"
|
|
720
|
-
]
|
|
721
|
-
};
|
|
722
|
-
const dots6 = {
|
|
723
|
-
interval: 80,
|
|
724
|
-
frames: [
|
|
725
|
-
"⠁",
|
|
726
|
-
"⠉",
|
|
727
|
-
"⠙",
|
|
728
|
-
"⠚",
|
|
729
|
-
"⠒",
|
|
730
|
-
"⠂",
|
|
731
|
-
"⠂",
|
|
732
|
-
"⠒",
|
|
733
|
-
"⠲",
|
|
734
|
-
"⠴",
|
|
735
|
-
"⠤",
|
|
736
|
-
"⠄",
|
|
737
|
-
"⠄",
|
|
738
|
-
"⠤",
|
|
739
|
-
"⠴",
|
|
740
|
-
"⠲",
|
|
741
|
-
"⠒",
|
|
742
|
-
"⠂",
|
|
743
|
-
"⠂",
|
|
744
|
-
"⠒",
|
|
745
|
-
"⠚",
|
|
746
|
-
"⠙",
|
|
747
|
-
"⠉",
|
|
748
|
-
"⠁"
|
|
749
|
-
]
|
|
750
|
-
};
|
|
751
|
-
const dots7 = {
|
|
752
|
-
interval: 80,
|
|
753
|
-
frames: [
|
|
754
|
-
"⠈",
|
|
755
|
-
"⠉",
|
|
756
|
-
"⠋",
|
|
757
|
-
"⠓",
|
|
758
|
-
"⠒",
|
|
759
|
-
"⠐",
|
|
760
|
-
"⠐",
|
|
761
|
-
"⠒",
|
|
762
|
-
"⠖",
|
|
763
|
-
"⠦",
|
|
764
|
-
"⠤",
|
|
765
|
-
"⠠",
|
|
766
|
-
"⠠",
|
|
767
|
-
"⠤",
|
|
768
|
-
"⠦",
|
|
769
|
-
"⠖",
|
|
770
|
-
"⠒",
|
|
771
|
-
"⠐",
|
|
772
|
-
"⠐",
|
|
773
|
-
"⠒",
|
|
774
|
-
"⠓",
|
|
775
|
-
"⠋",
|
|
776
|
-
"⠉",
|
|
777
|
-
"⠈"
|
|
778
|
-
]
|
|
779
|
-
};
|
|
780
|
-
const dots8 = {
|
|
781
|
-
interval: 80,
|
|
782
|
-
frames: [
|
|
783
|
-
"⠁",
|
|
784
|
-
"⠁",
|
|
785
|
-
"⠉",
|
|
786
|
-
"⠙",
|
|
787
|
-
"⠚",
|
|
788
|
-
"⠒",
|
|
789
|
-
"⠂",
|
|
790
|
-
"⠂",
|
|
791
|
-
"⠒",
|
|
792
|
-
"⠲",
|
|
793
|
-
"⠴",
|
|
794
|
-
"⠤",
|
|
795
|
-
"⠄",
|
|
796
|
-
"⠄",
|
|
797
|
-
"⠤",
|
|
798
|
-
"⠠",
|
|
799
|
-
"⠠",
|
|
800
|
-
"⠤",
|
|
801
|
-
"⠦",
|
|
802
|
-
"⠖",
|
|
803
|
-
"⠒",
|
|
804
|
-
"⠐",
|
|
805
|
-
"⠐",
|
|
806
|
-
"⠒",
|
|
807
|
-
"⠓",
|
|
808
|
-
"⠋",
|
|
809
|
-
"⠉",
|
|
810
|
-
"⠈",
|
|
811
|
-
"⠈"
|
|
812
|
-
]
|
|
813
|
-
};
|
|
814
|
-
const dots9 = {
|
|
815
|
-
interval: 80,
|
|
816
|
-
frames: [
|
|
817
|
-
"⢹",
|
|
818
|
-
"⢺",
|
|
819
|
-
"⢼",
|
|
820
|
-
"⣸",
|
|
821
|
-
"⣇",
|
|
822
|
-
"⡧",
|
|
823
|
-
"⡗",
|
|
824
|
-
"⡏"
|
|
825
|
-
]
|
|
826
|
-
};
|
|
827
|
-
const dots10 = {
|
|
828
|
-
interval: 80,
|
|
829
|
-
frames: [
|
|
830
|
-
"⢄",
|
|
831
|
-
"⢂",
|
|
832
|
-
"⢁",
|
|
833
|
-
"⡁",
|
|
834
|
-
"⡈",
|
|
835
|
-
"⡐",
|
|
836
|
-
"⡠"
|
|
837
|
-
]
|
|
838
|
-
};
|
|
839
|
-
const dots11 = {
|
|
840
|
-
interval: 100,
|
|
841
|
-
frames: [
|
|
842
|
-
"⠁",
|
|
843
|
-
"⠂",
|
|
844
|
-
"⠄",
|
|
845
|
-
"⡀",
|
|
846
|
-
"⢀",
|
|
847
|
-
"⠠",
|
|
848
|
-
"⠐",
|
|
849
|
-
"⠈"
|
|
850
|
-
]
|
|
851
|
-
};
|
|
852
|
-
const dots12 = {
|
|
853
|
-
interval: 80,
|
|
854
|
-
frames: [
|
|
855
|
-
"⢀⠀",
|
|
856
|
-
"⡀⠀",
|
|
857
|
-
"⠄⠀",
|
|
858
|
-
"⢂⠀",
|
|
859
|
-
"⡂⠀",
|
|
860
|
-
"⠅⠀",
|
|
861
|
-
"⢃⠀",
|
|
862
|
-
"⡃⠀",
|
|
863
|
-
"⠍⠀",
|
|
864
|
-
"⢋⠀",
|
|
865
|
-
"⡋⠀",
|
|
866
|
-
"⠍⠁",
|
|
867
|
-
"⢋⠁",
|
|
868
|
-
"⡋⠁",
|
|
869
|
-
"⠍⠉",
|
|
870
|
-
"⠋⠉",
|
|
871
|
-
"⠋⠉",
|
|
872
|
-
"⠉⠙",
|
|
873
|
-
"⠉⠙",
|
|
874
|
-
"⠉⠩",
|
|
875
|
-
"⠈⢙",
|
|
876
|
-
"⠈⡙",
|
|
877
|
-
"⢈⠩",
|
|
878
|
-
"⡀⢙",
|
|
879
|
-
"⠄⡙",
|
|
880
|
-
"⢂⠩",
|
|
881
|
-
"⡂⢘",
|
|
882
|
-
"⠅⡘",
|
|
883
|
-
"⢃⠨",
|
|
884
|
-
"⡃⢐",
|
|
885
|
-
"⠍⡐",
|
|
886
|
-
"⢋⠠",
|
|
887
|
-
"⡋⢀",
|
|
888
|
-
"⠍⡁",
|
|
889
|
-
"⢋⠁",
|
|
890
|
-
"⡋⠁",
|
|
891
|
-
"⠍⠉",
|
|
892
|
-
"⠋⠉",
|
|
893
|
-
"⠋⠉",
|
|
894
|
-
"⠉⠙",
|
|
895
|
-
"⠉⠙",
|
|
896
|
-
"⠉⠩",
|
|
897
|
-
"⠈⢙",
|
|
898
|
-
"⠈⡙",
|
|
899
|
-
"⠈⠩",
|
|
900
|
-
"⠀⢙",
|
|
901
|
-
"⠀⡙",
|
|
902
|
-
"⠀⠩",
|
|
903
|
-
"⠀⢘",
|
|
904
|
-
"⠀⡘",
|
|
905
|
-
"⠀⠨",
|
|
906
|
-
"⠀⢐",
|
|
907
|
-
"⠀⡐",
|
|
908
|
-
"⠀⠠",
|
|
909
|
-
"⠀⢀",
|
|
910
|
-
"⠀⡀"
|
|
911
|
-
]
|
|
912
|
-
};
|
|
913
|
-
const dots13 = {
|
|
914
|
-
interval: 80,
|
|
915
|
-
frames: [
|
|
916
|
-
"⣼",
|
|
917
|
-
"⣹",
|
|
918
|
-
"⢻",
|
|
919
|
-
"⠿",
|
|
920
|
-
"⡟",
|
|
921
|
-
"⣏",
|
|
922
|
-
"⣧",
|
|
923
|
-
"⣶"
|
|
924
|
-
]
|
|
925
|
-
};
|
|
926
|
-
const dots14 = {
|
|
927
|
-
interval: 80,
|
|
928
|
-
frames: [
|
|
929
|
-
"⠉⠉",
|
|
930
|
-
"⠈⠙",
|
|
931
|
-
"⠀⠹",
|
|
932
|
-
"⠀⢸",
|
|
933
|
-
"⠀⣰",
|
|
934
|
-
"⢀⣠",
|
|
935
|
-
"⣀⣀",
|
|
936
|
-
"⣄⡀",
|
|
937
|
-
"⣆⠀",
|
|
938
|
-
"⡇⠀",
|
|
939
|
-
"⠏⠀",
|
|
940
|
-
"⠋⠁"
|
|
941
|
-
]
|
|
942
|
-
};
|
|
943
|
-
const dots8Bit = {
|
|
944
|
-
interval: 80,
|
|
945
|
-
frames: [
|
|
946
|
-
"⠀",
|
|
947
|
-
"⠁",
|
|
948
|
-
"⠂",
|
|
949
|
-
"⠃",
|
|
950
|
-
"⠄",
|
|
951
|
-
"⠅",
|
|
952
|
-
"⠆",
|
|
953
|
-
"⠇",
|
|
954
|
-
"⡀",
|
|
955
|
-
"⡁",
|
|
956
|
-
"⡂",
|
|
957
|
-
"⡃",
|
|
958
|
-
"⡄",
|
|
959
|
-
"⡅",
|
|
960
|
-
"⡆",
|
|
961
|
-
"⡇",
|
|
962
|
-
"⠈",
|
|
963
|
-
"⠉",
|
|
964
|
-
"⠊",
|
|
965
|
-
"⠋",
|
|
966
|
-
"⠌",
|
|
967
|
-
"⠍",
|
|
968
|
-
"⠎",
|
|
969
|
-
"⠏",
|
|
970
|
-
"⡈",
|
|
971
|
-
"⡉",
|
|
972
|
-
"⡊",
|
|
973
|
-
"⡋",
|
|
974
|
-
"⡌",
|
|
975
|
-
"⡍",
|
|
976
|
-
"⡎",
|
|
977
|
-
"⡏",
|
|
978
|
-
"⠐",
|
|
979
|
-
"⠑",
|
|
980
|
-
"⠒",
|
|
981
|
-
"⠓",
|
|
982
|
-
"⠔",
|
|
983
|
-
"⠕",
|
|
984
|
-
"⠖",
|
|
985
|
-
"⠗",
|
|
986
|
-
"⡐",
|
|
987
|
-
"⡑",
|
|
988
|
-
"⡒",
|
|
989
|
-
"⡓",
|
|
990
|
-
"⡔",
|
|
991
|
-
"⡕",
|
|
992
|
-
"⡖",
|
|
993
|
-
"⡗",
|
|
994
|
-
"⠘",
|
|
995
|
-
"⠙",
|
|
996
|
-
"⠚",
|
|
997
|
-
"⠛",
|
|
998
|
-
"⠜",
|
|
999
|
-
"⠝",
|
|
1000
|
-
"⠞",
|
|
1001
|
-
"⠟",
|
|
1002
|
-
"⡘",
|
|
1003
|
-
"⡙",
|
|
1004
|
-
"⡚",
|
|
1005
|
-
"⡛",
|
|
1006
|
-
"⡜",
|
|
1007
|
-
"⡝",
|
|
1008
|
-
"⡞",
|
|
1009
|
-
"⡟",
|
|
1010
|
-
"⠠",
|
|
1011
|
-
"⠡",
|
|
1012
|
-
"⠢",
|
|
1013
|
-
"⠣",
|
|
1014
|
-
"⠤",
|
|
1015
|
-
"⠥",
|
|
1016
|
-
"⠦",
|
|
1017
|
-
"⠧",
|
|
1018
|
-
"⡠",
|
|
1019
|
-
"⡡",
|
|
1020
|
-
"⡢",
|
|
1021
|
-
"⡣",
|
|
1022
|
-
"⡤",
|
|
1023
|
-
"⡥",
|
|
1024
|
-
"⡦",
|
|
1025
|
-
"⡧",
|
|
1026
|
-
"⠨",
|
|
1027
|
-
"⠩",
|
|
1028
|
-
"⠪",
|
|
1029
|
-
"⠫",
|
|
1030
|
-
"⠬",
|
|
1031
|
-
"⠭",
|
|
1032
|
-
"⠮",
|
|
1033
|
-
"⠯",
|
|
1034
|
-
"⡨",
|
|
1035
|
-
"⡩",
|
|
1036
|
-
"⡪",
|
|
1037
|
-
"⡫",
|
|
1038
|
-
"⡬",
|
|
1039
|
-
"⡭",
|
|
1040
|
-
"⡮",
|
|
1041
|
-
"⡯",
|
|
1042
|
-
"⠰",
|
|
1043
|
-
"⠱",
|
|
1044
|
-
"⠲",
|
|
1045
|
-
"⠳",
|
|
1046
|
-
"⠴",
|
|
1047
|
-
"⠵",
|
|
1048
|
-
"⠶",
|
|
1049
|
-
"⠷",
|
|
1050
|
-
"⡰",
|
|
1051
|
-
"⡱",
|
|
1052
|
-
"⡲",
|
|
1053
|
-
"⡳",
|
|
1054
|
-
"⡴",
|
|
1055
|
-
"⡵",
|
|
1056
|
-
"⡶",
|
|
1057
|
-
"⡷",
|
|
1058
|
-
"⠸",
|
|
1059
|
-
"⠹",
|
|
1060
|
-
"⠺",
|
|
1061
|
-
"⠻",
|
|
1062
|
-
"⠼",
|
|
1063
|
-
"⠽",
|
|
1064
|
-
"⠾",
|
|
1065
|
-
"⠿",
|
|
1066
|
-
"⡸",
|
|
1067
|
-
"⡹",
|
|
1068
|
-
"⡺",
|
|
1069
|
-
"⡻",
|
|
1070
|
-
"⡼",
|
|
1071
|
-
"⡽",
|
|
1072
|
-
"⡾",
|
|
1073
|
-
"⡿",
|
|
1074
|
-
"⢀",
|
|
1075
|
-
"⢁",
|
|
1076
|
-
"⢂",
|
|
1077
|
-
"⢃",
|
|
1078
|
-
"⢄",
|
|
1079
|
-
"⢅",
|
|
1080
|
-
"⢆",
|
|
1081
|
-
"⢇",
|
|
1082
|
-
"⣀",
|
|
1083
|
-
"⣁",
|
|
1084
|
-
"⣂",
|
|
1085
|
-
"⣃",
|
|
1086
|
-
"⣄",
|
|
1087
|
-
"⣅",
|
|
1088
|
-
"⣆",
|
|
1089
|
-
"⣇",
|
|
1090
|
-
"⢈",
|
|
1091
|
-
"⢉",
|
|
1092
|
-
"⢊",
|
|
1093
|
-
"⢋",
|
|
1094
|
-
"⢌",
|
|
1095
|
-
"⢍",
|
|
1096
|
-
"⢎",
|
|
1097
|
-
"⢏",
|
|
1098
|
-
"⣈",
|
|
1099
|
-
"⣉",
|
|
1100
|
-
"⣊",
|
|
1101
|
-
"⣋",
|
|
1102
|
-
"⣌",
|
|
1103
|
-
"⣍",
|
|
1104
|
-
"⣎",
|
|
1105
|
-
"⣏",
|
|
1106
|
-
"⢐",
|
|
1107
|
-
"⢑",
|
|
1108
|
-
"⢒",
|
|
1109
|
-
"⢓",
|
|
1110
|
-
"⢔",
|
|
1111
|
-
"⢕",
|
|
1112
|
-
"⢖",
|
|
1113
|
-
"⢗",
|
|
1114
|
-
"⣐",
|
|
1115
|
-
"⣑",
|
|
1116
|
-
"⣒",
|
|
1117
|
-
"⣓",
|
|
1118
|
-
"⣔",
|
|
1119
|
-
"⣕",
|
|
1120
|
-
"⣖",
|
|
1121
|
-
"⣗",
|
|
1122
|
-
"⢘",
|
|
1123
|
-
"⢙",
|
|
1124
|
-
"⢚",
|
|
1125
|
-
"⢛",
|
|
1126
|
-
"⢜",
|
|
1127
|
-
"⢝",
|
|
1128
|
-
"⢞",
|
|
1129
|
-
"⢟",
|
|
1130
|
-
"⣘",
|
|
1131
|
-
"⣙",
|
|
1132
|
-
"⣚",
|
|
1133
|
-
"⣛",
|
|
1134
|
-
"⣜",
|
|
1135
|
-
"⣝",
|
|
1136
|
-
"⣞",
|
|
1137
|
-
"⣟",
|
|
1138
|
-
"⢠",
|
|
1139
|
-
"⢡",
|
|
1140
|
-
"⢢",
|
|
1141
|
-
"⢣",
|
|
1142
|
-
"⢤",
|
|
1143
|
-
"⢥",
|
|
1144
|
-
"⢦",
|
|
1145
|
-
"⢧",
|
|
1146
|
-
"⣠",
|
|
1147
|
-
"⣡",
|
|
1148
|
-
"⣢",
|
|
1149
|
-
"⣣",
|
|
1150
|
-
"⣤",
|
|
1151
|
-
"⣥",
|
|
1152
|
-
"⣦",
|
|
1153
|
-
"⣧",
|
|
1154
|
-
"⢨",
|
|
1155
|
-
"⢩",
|
|
1156
|
-
"⢪",
|
|
1157
|
-
"⢫",
|
|
1158
|
-
"⢬",
|
|
1159
|
-
"⢭",
|
|
1160
|
-
"⢮",
|
|
1161
|
-
"⢯",
|
|
1162
|
-
"⣨",
|
|
1163
|
-
"⣩",
|
|
1164
|
-
"⣪",
|
|
1165
|
-
"⣫",
|
|
1166
|
-
"⣬",
|
|
1167
|
-
"⣭",
|
|
1168
|
-
"⣮",
|
|
1169
|
-
"⣯",
|
|
1170
|
-
"⢰",
|
|
1171
|
-
"⢱",
|
|
1172
|
-
"⢲",
|
|
1173
|
-
"⢳",
|
|
1174
|
-
"⢴",
|
|
1175
|
-
"⢵",
|
|
1176
|
-
"⢶",
|
|
1177
|
-
"⢷",
|
|
1178
|
-
"⣰",
|
|
1179
|
-
"⣱",
|
|
1180
|
-
"⣲",
|
|
1181
|
-
"⣳",
|
|
1182
|
-
"⣴",
|
|
1183
|
-
"⣵",
|
|
1184
|
-
"⣶",
|
|
1185
|
-
"⣷",
|
|
1186
|
-
"⢸",
|
|
1187
|
-
"⢹",
|
|
1188
|
-
"⢺",
|
|
1189
|
-
"⢻",
|
|
1190
|
-
"⢼",
|
|
1191
|
-
"⢽",
|
|
1192
|
-
"⢾",
|
|
1193
|
-
"⢿",
|
|
1194
|
-
"⣸",
|
|
1195
|
-
"⣹",
|
|
1196
|
-
"⣺",
|
|
1197
|
-
"⣻",
|
|
1198
|
-
"⣼",
|
|
1199
|
-
"⣽",
|
|
1200
|
-
"⣾",
|
|
1201
|
-
"⣿"
|
|
1202
|
-
]
|
|
1203
|
-
};
|
|
1204
|
-
const dotsCircle = {
|
|
1205
|
-
interval: 80,
|
|
1206
|
-
frames: [
|
|
1207
|
-
"⢎ ",
|
|
1208
|
-
"⠎⠁",
|
|
1209
|
-
"⠊⠑",
|
|
1210
|
-
"⠈⠱",
|
|
1211
|
-
" ⡱",
|
|
1212
|
-
"⢀⡰",
|
|
1213
|
-
"⢄⡠",
|
|
1214
|
-
"⢆⡀"
|
|
1215
|
-
]
|
|
1216
|
-
};
|
|
1217
|
-
const sand = {
|
|
1218
|
-
interval: 80,
|
|
1219
|
-
frames: [
|
|
1220
|
-
"⠁",
|
|
1221
|
-
"⠂",
|
|
1222
|
-
"⠄",
|
|
1223
|
-
"⡀",
|
|
1224
|
-
"⡈",
|
|
1225
|
-
"⡐",
|
|
1226
|
-
"⡠",
|
|
1227
|
-
"⣀",
|
|
1228
|
-
"⣁",
|
|
1229
|
-
"⣂",
|
|
1230
|
-
"⣄",
|
|
1231
|
-
"⣌",
|
|
1232
|
-
"⣔",
|
|
1233
|
-
"⣤",
|
|
1234
|
-
"⣥",
|
|
1235
|
-
"⣦",
|
|
1236
|
-
"⣮",
|
|
1237
|
-
"⣶",
|
|
1238
|
-
"⣷",
|
|
1239
|
-
"⣿",
|
|
1240
|
-
"⡿",
|
|
1241
|
-
"⠿",
|
|
1242
|
-
"⢟",
|
|
1243
|
-
"⠟",
|
|
1244
|
-
"⡛",
|
|
1245
|
-
"⠛",
|
|
1246
|
-
"⠫",
|
|
1247
|
-
"⢋",
|
|
1248
|
-
"⠋",
|
|
1249
|
-
"⠍",
|
|
1250
|
-
"⡉",
|
|
1251
|
-
"⠉",
|
|
1252
|
-
"⠑",
|
|
1253
|
-
"⠡",
|
|
1254
|
-
"⢁"
|
|
1255
|
-
]
|
|
1256
|
-
};
|
|
1257
|
-
const line = {
|
|
1258
|
-
interval: 130,
|
|
1259
|
-
frames: [
|
|
1260
|
-
"-",
|
|
1261
|
-
"\\",
|
|
1262
|
-
"|",
|
|
1263
|
-
"/"
|
|
1264
|
-
]
|
|
1265
|
-
};
|
|
1266
|
-
const line2 = {
|
|
1267
|
-
interval: 100,
|
|
1268
|
-
frames: [
|
|
1269
|
-
"⠂",
|
|
1270
|
-
"-",
|
|
1271
|
-
"–",
|
|
1272
|
-
"—",
|
|
1273
|
-
"–",
|
|
1274
|
-
"-"
|
|
1275
|
-
]
|
|
1276
|
-
};
|
|
1277
|
-
const pipe = {
|
|
1278
|
-
interval: 100,
|
|
1279
|
-
frames: [
|
|
1280
|
-
"┤",
|
|
1281
|
-
"┘",
|
|
1282
|
-
"┴",
|
|
1283
|
-
"└",
|
|
1284
|
-
"├",
|
|
1285
|
-
"┌",
|
|
1286
|
-
"┬",
|
|
1287
|
-
"┐"
|
|
1288
|
-
]
|
|
1289
|
-
};
|
|
1290
|
-
const simpleDots = {
|
|
1291
|
-
interval: 400,
|
|
1292
|
-
frames: [
|
|
1293
|
-
". ",
|
|
1294
|
-
".. ",
|
|
1295
|
-
"...",
|
|
1296
|
-
" "
|
|
1297
|
-
]
|
|
1298
|
-
};
|
|
1299
|
-
const simpleDotsScrolling = {
|
|
1300
|
-
interval: 200,
|
|
1301
|
-
frames: [
|
|
1302
|
-
". ",
|
|
1303
|
-
".. ",
|
|
1304
|
-
"...",
|
|
1305
|
-
" ..",
|
|
1306
|
-
" .",
|
|
1307
|
-
" "
|
|
1308
|
-
]
|
|
1309
|
-
};
|
|
1310
|
-
const star = {
|
|
1311
|
-
interval: 70,
|
|
1312
|
-
frames: [
|
|
1313
|
-
"✶",
|
|
1314
|
-
"✸",
|
|
1315
|
-
"✹",
|
|
1316
|
-
"✺",
|
|
1317
|
-
"✹",
|
|
1318
|
-
"✷"
|
|
1319
|
-
]
|
|
1320
|
-
};
|
|
1321
|
-
const star2 = {
|
|
1322
|
-
interval: 80,
|
|
1323
|
-
frames: [
|
|
1324
|
-
"+",
|
|
1325
|
-
"x",
|
|
1326
|
-
"*"
|
|
1327
|
-
]
|
|
1328
|
-
};
|
|
1329
|
-
const flip = {
|
|
1330
|
-
interval: 70,
|
|
1331
|
-
frames: [
|
|
1332
|
-
"_",
|
|
1333
|
-
"_",
|
|
1334
|
-
"_",
|
|
1335
|
-
"-",
|
|
1336
|
-
"`",
|
|
1337
|
-
"`",
|
|
1338
|
-
"'",
|
|
1339
|
-
"´",
|
|
1340
|
-
"-",
|
|
1341
|
-
"_",
|
|
1342
|
-
"_",
|
|
1343
|
-
"_"
|
|
1344
|
-
]
|
|
1345
|
-
};
|
|
1346
|
-
const hamburger = {
|
|
1347
|
-
interval: 100,
|
|
1348
|
-
frames: [
|
|
1349
|
-
"☱",
|
|
1350
|
-
"☲",
|
|
1351
|
-
"☴"
|
|
1352
|
-
]
|
|
1353
|
-
};
|
|
1354
|
-
const growVertical = {
|
|
1355
|
-
interval: 120,
|
|
1356
|
-
frames: [
|
|
1357
|
-
"▁",
|
|
1358
|
-
"▃",
|
|
1359
|
-
"▄",
|
|
1360
|
-
"▅",
|
|
1361
|
-
"▆",
|
|
1362
|
-
"▇",
|
|
1363
|
-
"▆",
|
|
1364
|
-
"▅",
|
|
1365
|
-
"▄",
|
|
1366
|
-
"▃"
|
|
1367
|
-
]
|
|
1368
|
-
};
|
|
1369
|
-
const growHorizontal = {
|
|
1370
|
-
interval: 120,
|
|
1371
|
-
frames: [
|
|
1372
|
-
"▏",
|
|
1373
|
-
"▎",
|
|
1374
|
-
"▍",
|
|
1375
|
-
"▌",
|
|
1376
|
-
"▋",
|
|
1377
|
-
"▊",
|
|
1378
|
-
"▉",
|
|
1379
|
-
"▊",
|
|
1380
|
-
"▋",
|
|
1381
|
-
"▌",
|
|
1382
|
-
"▍",
|
|
1383
|
-
"▎"
|
|
1384
|
-
]
|
|
1385
|
-
};
|
|
1386
|
-
const balloon = {
|
|
1387
|
-
interval: 140,
|
|
1388
|
-
frames: [
|
|
1389
|
-
" ",
|
|
1390
|
-
".",
|
|
1391
|
-
"o",
|
|
1392
|
-
"O",
|
|
1393
|
-
"@",
|
|
1394
|
-
"*",
|
|
1395
|
-
" "
|
|
1396
|
-
]
|
|
1397
|
-
};
|
|
1398
|
-
const balloon2 = {
|
|
1399
|
-
interval: 120,
|
|
1400
|
-
frames: [
|
|
1401
|
-
".",
|
|
1402
|
-
"o",
|
|
1403
|
-
"O",
|
|
1404
|
-
"°",
|
|
1405
|
-
"O",
|
|
1406
|
-
"o",
|
|
1407
|
-
"."
|
|
1408
|
-
]
|
|
1409
|
-
};
|
|
1410
|
-
const noise = {
|
|
1411
|
-
interval: 100,
|
|
1412
|
-
frames: [
|
|
1413
|
-
"▓",
|
|
1414
|
-
"▒",
|
|
1415
|
-
"░"
|
|
1416
|
-
]
|
|
1417
|
-
};
|
|
1418
|
-
const bounce = {
|
|
1419
|
-
interval: 120,
|
|
1420
|
-
frames: [
|
|
1421
|
-
"⠁",
|
|
1422
|
-
"⠂",
|
|
1423
|
-
"⠄",
|
|
1424
|
-
"⠂"
|
|
1425
|
-
]
|
|
1426
|
-
};
|
|
1427
|
-
const boxBounce = {
|
|
1428
|
-
interval: 120,
|
|
1429
|
-
frames: [
|
|
1430
|
-
"▖",
|
|
1431
|
-
"▘",
|
|
1432
|
-
"▝",
|
|
1433
|
-
"▗"
|
|
1434
|
-
]
|
|
1435
|
-
};
|
|
1436
|
-
const boxBounce2 = {
|
|
1437
|
-
interval: 100,
|
|
1438
|
-
frames: [
|
|
1439
|
-
"▌",
|
|
1440
|
-
"▀",
|
|
1441
|
-
"▐",
|
|
1442
|
-
"▄"
|
|
1443
|
-
]
|
|
1444
|
-
};
|
|
1445
|
-
const triangle = {
|
|
1446
|
-
interval: 50,
|
|
1447
|
-
frames: [
|
|
1448
|
-
"◢",
|
|
1449
|
-
"◣",
|
|
1450
|
-
"◤",
|
|
1451
|
-
"◥"
|
|
1452
|
-
]
|
|
1453
|
-
};
|
|
1454
|
-
const binary = {
|
|
1455
|
-
interval: 80,
|
|
1456
|
-
frames: [
|
|
1457
|
-
"010010",
|
|
1458
|
-
"001100",
|
|
1459
|
-
"100101",
|
|
1460
|
-
"111010",
|
|
1461
|
-
"111101",
|
|
1462
|
-
"010111",
|
|
1463
|
-
"101011",
|
|
1464
|
-
"111000",
|
|
1465
|
-
"110011",
|
|
1466
|
-
"110101"
|
|
1467
|
-
]
|
|
1468
|
-
};
|
|
1469
|
-
const arc = {
|
|
1470
|
-
interval: 100,
|
|
1471
|
-
frames: [
|
|
1472
|
-
"◜",
|
|
1473
|
-
"◠",
|
|
1474
|
-
"◝",
|
|
1475
|
-
"◞",
|
|
1476
|
-
"◡",
|
|
1477
|
-
"◟"
|
|
1478
|
-
]
|
|
1479
|
-
};
|
|
1480
|
-
const circle = {
|
|
1481
|
-
interval: 120,
|
|
1482
|
-
frames: [
|
|
1483
|
-
"◡",
|
|
1484
|
-
"⊙",
|
|
1485
|
-
"◠"
|
|
1486
|
-
]
|
|
1487
|
-
};
|
|
1488
|
-
const squareCorners = {
|
|
1489
|
-
interval: 180,
|
|
1490
|
-
frames: [
|
|
1491
|
-
"◰",
|
|
1492
|
-
"◳",
|
|
1493
|
-
"◲",
|
|
1494
|
-
"◱"
|
|
1495
|
-
]
|
|
1496
|
-
};
|
|
1497
|
-
const circleQuarters = {
|
|
1498
|
-
interval: 120,
|
|
1499
|
-
frames: [
|
|
1500
|
-
"◴",
|
|
1501
|
-
"◷",
|
|
1502
|
-
"◶",
|
|
1503
|
-
"◵"
|
|
1504
|
-
]
|
|
1505
|
-
};
|
|
1506
|
-
const circleHalves = {
|
|
1507
|
-
interval: 50,
|
|
1508
|
-
frames: [
|
|
1509
|
-
"◐",
|
|
1510
|
-
"◓",
|
|
1511
|
-
"◑",
|
|
1512
|
-
"◒"
|
|
1513
|
-
]
|
|
1514
|
-
};
|
|
1515
|
-
const squish = {
|
|
1516
|
-
interval: 100,
|
|
1517
|
-
frames: [
|
|
1518
|
-
"╫",
|
|
1519
|
-
"╪"
|
|
1520
|
-
]
|
|
1521
|
-
};
|
|
1522
|
-
const toggle = {
|
|
1523
|
-
interval: 250,
|
|
1524
|
-
frames: [
|
|
1525
|
-
"⊶",
|
|
1526
|
-
"⊷"
|
|
1527
|
-
]
|
|
1528
|
-
};
|
|
1529
|
-
const toggle2 = {
|
|
1530
|
-
interval: 80,
|
|
1531
|
-
frames: [
|
|
1532
|
-
"▫",
|
|
1533
|
-
"▪"
|
|
1534
|
-
]
|
|
1535
|
-
};
|
|
1536
|
-
const toggle3 = {
|
|
1537
|
-
interval: 120,
|
|
1538
|
-
frames: [
|
|
1539
|
-
"□",
|
|
1540
|
-
"■"
|
|
1541
|
-
]
|
|
1542
|
-
};
|
|
1543
|
-
const toggle4 = {
|
|
1544
|
-
interval: 100,
|
|
1545
|
-
frames: [
|
|
1546
|
-
"■",
|
|
1547
|
-
"□",
|
|
1548
|
-
"▪",
|
|
1549
|
-
"▫"
|
|
1550
|
-
]
|
|
1551
|
-
};
|
|
1552
|
-
const toggle5 = {
|
|
1553
|
-
interval: 100,
|
|
1554
|
-
frames: [
|
|
1555
|
-
"▮",
|
|
1556
|
-
"▯"
|
|
1557
|
-
]
|
|
1558
|
-
};
|
|
1559
|
-
const toggle6 = {
|
|
1560
|
-
interval: 300,
|
|
1561
|
-
frames: [
|
|
1562
|
-
"ဝ",
|
|
1563
|
-
"၀"
|
|
1564
|
-
]
|
|
1565
|
-
};
|
|
1566
|
-
const toggle7 = {
|
|
1567
|
-
interval: 80,
|
|
1568
|
-
frames: [
|
|
1569
|
-
"⦾",
|
|
1570
|
-
"⦿"
|
|
1571
|
-
]
|
|
1572
|
-
};
|
|
1573
|
-
const toggle8 = {
|
|
1574
|
-
interval: 100,
|
|
1575
|
-
frames: [
|
|
1576
|
-
"◍",
|
|
1577
|
-
"◌"
|
|
1578
|
-
]
|
|
1579
|
-
};
|
|
1580
|
-
const toggle9 = {
|
|
1581
|
-
interval: 100,
|
|
1582
|
-
frames: [
|
|
1583
|
-
"◉",
|
|
1584
|
-
"◎"
|
|
1585
|
-
]
|
|
1586
|
-
};
|
|
1587
|
-
const toggle10 = {
|
|
1588
|
-
interval: 100,
|
|
1589
|
-
frames: [
|
|
1590
|
-
"㊂",
|
|
1591
|
-
"㊀",
|
|
1592
|
-
"㊁"
|
|
1593
|
-
]
|
|
1594
|
-
};
|
|
1595
|
-
const toggle11 = {
|
|
1596
|
-
interval: 50,
|
|
1597
|
-
frames: [
|
|
1598
|
-
"⧇",
|
|
1599
|
-
"⧆"
|
|
1600
|
-
]
|
|
1601
|
-
};
|
|
1602
|
-
const toggle12 = {
|
|
1603
|
-
interval: 120,
|
|
1604
|
-
frames: [
|
|
1605
|
-
"☗",
|
|
1606
|
-
"☖"
|
|
1607
|
-
]
|
|
1608
|
-
};
|
|
1609
|
-
const toggle13 = {
|
|
1610
|
-
interval: 80,
|
|
1611
|
-
frames: [
|
|
1612
|
-
"=",
|
|
1613
|
-
"*",
|
|
1614
|
-
"-"
|
|
1615
|
-
]
|
|
1616
|
-
};
|
|
1617
|
-
const arrow = {
|
|
1618
|
-
interval: 100,
|
|
1619
|
-
frames: [
|
|
1620
|
-
"←",
|
|
1621
|
-
"↖",
|
|
1622
|
-
"↑",
|
|
1623
|
-
"↗",
|
|
1624
|
-
"→",
|
|
1625
|
-
"↘",
|
|
1626
|
-
"↓",
|
|
1627
|
-
"↙"
|
|
1628
|
-
]
|
|
1629
|
-
};
|
|
1630
|
-
const arrow2 = {
|
|
1631
|
-
interval: 80,
|
|
1632
|
-
frames: [
|
|
1633
|
-
"⬆️ ",
|
|
1634
|
-
"↗️ ",
|
|
1635
|
-
"➡️ ",
|
|
1636
|
-
"↘️ ",
|
|
1637
|
-
"⬇️ ",
|
|
1638
|
-
"↙️ ",
|
|
1639
|
-
"⬅️ ",
|
|
1640
|
-
"↖️ "
|
|
1641
|
-
]
|
|
1642
|
-
};
|
|
1643
|
-
const arrow3 = {
|
|
1644
|
-
interval: 120,
|
|
1645
|
-
frames: [
|
|
1646
|
-
"▹▹▹▹▹",
|
|
1647
|
-
"▸▹▹▹▹",
|
|
1648
|
-
"▹▸▹▹▹",
|
|
1649
|
-
"▹▹▸▹▹",
|
|
1650
|
-
"▹▹▹▸▹",
|
|
1651
|
-
"▹▹▹▹▸"
|
|
1652
|
-
]
|
|
1653
|
-
};
|
|
1654
|
-
const bouncingBar = {
|
|
1655
|
-
interval: 80,
|
|
1656
|
-
frames: [
|
|
1657
|
-
"[ ]",
|
|
1658
|
-
"[= ]",
|
|
1659
|
-
"[== ]",
|
|
1660
|
-
"[=== ]",
|
|
1661
|
-
"[====]",
|
|
1662
|
-
"[ ===]",
|
|
1663
|
-
"[ ==]",
|
|
1664
|
-
"[ =]",
|
|
1665
|
-
"[ ]",
|
|
1666
|
-
"[ =]",
|
|
1667
|
-
"[ ==]",
|
|
1668
|
-
"[ ===]",
|
|
1669
|
-
"[====]",
|
|
1670
|
-
"[=== ]",
|
|
1671
|
-
"[== ]",
|
|
1672
|
-
"[= ]"
|
|
1673
|
-
]
|
|
1674
|
-
};
|
|
1675
|
-
const bouncingBall = {
|
|
1676
|
-
interval: 80,
|
|
1677
|
-
frames: [
|
|
1678
|
-
"( ● )",
|
|
1679
|
-
"( ● )",
|
|
1680
|
-
"( ● )",
|
|
1681
|
-
"( ● )",
|
|
1682
|
-
"( ●)",
|
|
1683
|
-
"( ● )",
|
|
1684
|
-
"( ● )",
|
|
1685
|
-
"( ● )",
|
|
1686
|
-
"( ● )",
|
|
1687
|
-
"(● )"
|
|
1688
|
-
]
|
|
1689
|
-
};
|
|
1690
|
-
const smiley = {
|
|
1691
|
-
interval: 200,
|
|
1692
|
-
frames: [
|
|
1693
|
-
"😄 ",
|
|
1694
|
-
"😝 "
|
|
1695
|
-
]
|
|
1696
|
-
};
|
|
1697
|
-
const monkey = {
|
|
1698
|
-
interval: 300,
|
|
1699
|
-
frames: [
|
|
1700
|
-
"🙈 ",
|
|
1701
|
-
"🙈 ",
|
|
1702
|
-
"🙉 ",
|
|
1703
|
-
"🙊 "
|
|
1704
|
-
]
|
|
1705
|
-
};
|
|
1706
|
-
const hearts = {
|
|
1707
|
-
interval: 100,
|
|
1708
|
-
frames: [
|
|
1709
|
-
"💛 ",
|
|
1710
|
-
"💙 ",
|
|
1711
|
-
"💜 ",
|
|
1712
|
-
"💚 ",
|
|
1713
|
-
"💗 "
|
|
1714
|
-
]
|
|
1715
|
-
};
|
|
1716
|
-
const clock = {
|
|
1717
|
-
interval: 100,
|
|
1718
|
-
frames: [
|
|
1719
|
-
"🕛 ",
|
|
1720
|
-
"🕐 ",
|
|
1721
|
-
"🕑 ",
|
|
1722
|
-
"🕒 ",
|
|
1723
|
-
"🕓 ",
|
|
1724
|
-
"🕔 ",
|
|
1725
|
-
"🕕 ",
|
|
1726
|
-
"🕖 ",
|
|
1727
|
-
"🕗 ",
|
|
1728
|
-
"🕘 ",
|
|
1729
|
-
"🕙 ",
|
|
1730
|
-
"🕚 "
|
|
1731
|
-
]
|
|
1732
|
-
};
|
|
1733
|
-
const earth = {
|
|
1734
|
-
interval: 180,
|
|
1735
|
-
frames: [
|
|
1736
|
-
"🌍 ",
|
|
1737
|
-
"🌎 ",
|
|
1738
|
-
"🌏 "
|
|
1739
|
-
]
|
|
1740
|
-
};
|
|
1741
|
-
const material = {
|
|
1742
|
-
interval: 17,
|
|
1743
|
-
frames: [
|
|
1744
|
-
"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1745
|
-
"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1746
|
-
"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1747
|
-
"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1748
|
-
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1749
|
-
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1750
|
-
"███████▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1751
|
-
"████████▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1752
|
-
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
|
1753
|
-
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
|
1754
|
-
"██████████▁▁▁▁▁▁▁▁▁▁",
|
|
1755
|
-
"███████████▁▁▁▁▁▁▁▁▁",
|
|
1756
|
-
"█████████████▁▁▁▁▁▁▁",
|
|
1757
|
-
"██████████████▁▁▁▁▁▁",
|
|
1758
|
-
"██████████████▁▁▁▁▁▁",
|
|
1759
|
-
"▁██████████████▁▁▁▁▁",
|
|
1760
|
-
"▁██████████████▁▁▁▁▁",
|
|
1761
|
-
"▁██████████████▁▁▁▁▁",
|
|
1762
|
-
"▁▁██████████████▁▁▁▁",
|
|
1763
|
-
"▁▁▁██████████████▁▁▁",
|
|
1764
|
-
"▁▁▁▁█████████████▁▁▁",
|
|
1765
|
-
"▁▁▁▁██████████████▁▁",
|
|
1766
|
-
"▁▁▁▁██████████████▁▁",
|
|
1767
|
-
"▁▁▁▁▁██████████████▁",
|
|
1768
|
-
"▁▁▁▁▁██████████████▁",
|
|
1769
|
-
"▁▁▁▁▁██████████████▁",
|
|
1770
|
-
"▁▁▁▁▁▁██████████████",
|
|
1771
|
-
"▁▁▁▁▁▁██████████████",
|
|
1772
|
-
"▁▁▁▁▁▁▁█████████████",
|
|
1773
|
-
"▁▁▁▁▁▁▁█████████████",
|
|
1774
|
-
"▁▁▁▁▁▁▁▁████████████",
|
|
1775
|
-
"▁▁▁▁▁▁▁▁████████████",
|
|
1776
|
-
"▁▁▁▁▁▁▁▁▁███████████",
|
|
1777
|
-
"▁▁▁▁▁▁▁▁▁███████████",
|
|
1778
|
-
"▁▁▁▁▁▁▁▁▁▁██████████",
|
|
1779
|
-
"▁▁▁▁▁▁▁▁▁▁██████████",
|
|
1780
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁████████",
|
|
1781
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
|
|
1782
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████",
|
|
1783
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
|
|
1784
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
|
|
1785
|
-
"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
|
1786
|
-
"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
|
1787
|
-
"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
|
1788
|
-
"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
|
1789
|
-
"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
|
|
1790
|
-
"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
|
1791
|
-
"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
|
1792
|
-
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
|
1793
|
-
"████████▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1794
|
-
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
|
1795
|
-
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
|
1796
|
-
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
|
1797
|
-
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
|
1798
|
-
"███████████▁▁▁▁▁▁▁▁▁",
|
|
1799
|
-
"████████████▁▁▁▁▁▁▁▁",
|
|
1800
|
-
"████████████▁▁▁▁▁▁▁▁",
|
|
1801
|
-
"██████████████▁▁▁▁▁▁",
|
|
1802
|
-
"██████████████▁▁▁▁▁▁",
|
|
1803
|
-
"▁██████████████▁▁▁▁▁",
|
|
1804
|
-
"▁██████████████▁▁▁▁▁",
|
|
1805
|
-
"▁▁▁█████████████▁▁▁▁",
|
|
1806
|
-
"▁▁▁▁▁████████████▁▁▁",
|
|
1807
|
-
"▁▁▁▁▁████████████▁▁▁",
|
|
1808
|
-
"▁▁▁▁▁▁███████████▁▁▁",
|
|
1809
|
-
"▁▁▁▁▁▁▁▁█████████▁▁▁",
|
|
1810
|
-
"▁▁▁▁▁▁▁▁█████████▁▁▁",
|
|
1811
|
-
"▁▁▁▁▁▁▁▁▁█████████▁▁",
|
|
1812
|
-
"▁▁▁▁▁▁▁▁▁█████████▁▁",
|
|
1813
|
-
"▁▁▁▁▁▁▁▁▁▁█████████▁",
|
|
1814
|
-
"▁▁▁▁▁▁▁▁▁▁▁████████▁",
|
|
1815
|
-
"▁▁▁▁▁▁▁▁▁▁▁████████▁",
|
|
1816
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁███████▁",
|
|
1817
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁███████▁",
|
|
1818
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
|
|
1819
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
|
|
1820
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
|
|
1821
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
|
1822
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
|
1823
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
|
1824
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
|
1825
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
|
1826
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
|
|
1827
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
|
|
1828
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
|
|
1829
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
|
1830
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
|
1831
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
|
1832
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1833
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1834
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
|
1835
|
-
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁"
|
|
1836
|
-
]
|
|
1837
|
-
};
|
|
1838
|
-
const moon = {
|
|
1839
|
-
interval: 80,
|
|
1840
|
-
frames: [
|
|
1841
|
-
"🌑 ",
|
|
1842
|
-
"🌒 ",
|
|
1843
|
-
"🌓 ",
|
|
1844
|
-
"🌔 ",
|
|
1845
|
-
"🌕 ",
|
|
1846
|
-
"🌖 ",
|
|
1847
|
-
"🌗 ",
|
|
1848
|
-
"🌘 "
|
|
1849
|
-
]
|
|
1850
|
-
};
|
|
1851
|
-
const runner = {
|
|
1852
|
-
interval: 140,
|
|
1853
|
-
frames: [
|
|
1854
|
-
"🚶 ",
|
|
1855
|
-
"🏃 "
|
|
1856
|
-
]
|
|
1857
|
-
};
|
|
1858
|
-
const pong = {
|
|
1859
|
-
interval: 80,
|
|
1860
|
-
frames: [
|
|
1861
|
-
"▐⠂ ▌",
|
|
1862
|
-
"▐⠈ ▌",
|
|
1863
|
-
"▐ ⠂ ▌",
|
|
1864
|
-
"▐ ⠠ ▌",
|
|
1865
|
-
"▐ ⡀ ▌",
|
|
1866
|
-
"▐ ⠠ ▌",
|
|
1867
|
-
"▐ ⠂ ▌",
|
|
1868
|
-
"▐ ⠈ ▌",
|
|
1869
|
-
"▐ ⠂ ▌",
|
|
1870
|
-
"▐ ⠠ ▌",
|
|
1871
|
-
"▐ ⡀ ▌",
|
|
1872
|
-
"▐ ⠠ ▌",
|
|
1873
|
-
"▐ ⠂ ▌",
|
|
1874
|
-
"▐ ⠈ ▌",
|
|
1875
|
-
"▐ ⠂▌",
|
|
1876
|
-
"▐ ⠠▌",
|
|
1877
|
-
"▐ ⡀▌",
|
|
1878
|
-
"▐ ⠠ ▌",
|
|
1879
|
-
"▐ ⠂ ▌",
|
|
1880
|
-
"▐ ⠈ ▌",
|
|
1881
|
-
"▐ ⠂ ▌",
|
|
1882
|
-
"▐ ⠠ ▌",
|
|
1883
|
-
"▐ ⡀ ▌",
|
|
1884
|
-
"▐ ⠠ ▌",
|
|
1885
|
-
"▐ ⠂ ▌",
|
|
1886
|
-
"▐ ⠈ ▌",
|
|
1887
|
-
"▐ ⠂ ▌",
|
|
1888
|
-
"▐ ⠠ ▌",
|
|
1889
|
-
"▐ ⡀ ▌",
|
|
1890
|
-
"▐⠠ ▌"
|
|
1891
|
-
]
|
|
1892
|
-
};
|
|
1893
|
-
const shark = {
|
|
1894
|
-
interval: 120,
|
|
1895
|
-
frames: [
|
|
1896
|
-
"▐|\\____________▌",
|
|
1897
|
-
"▐_|\\___________▌",
|
|
1898
|
-
"▐__|\\__________▌",
|
|
1899
|
-
"▐___|\\_________▌",
|
|
1900
|
-
"▐____|\\________▌",
|
|
1901
|
-
"▐_____|\\_______▌",
|
|
1902
|
-
"▐______|\\______▌",
|
|
1903
|
-
"▐_______|\\_____▌",
|
|
1904
|
-
"▐________|\\____▌",
|
|
1905
|
-
"▐_________|\\___▌",
|
|
1906
|
-
"▐__________|\\__▌",
|
|
1907
|
-
"▐___________|\\_▌",
|
|
1908
|
-
"▐____________|\\▌",
|
|
1909
|
-
"▐____________/|▌",
|
|
1910
|
-
"▐___________/|_▌",
|
|
1911
|
-
"▐__________/|__▌",
|
|
1912
|
-
"▐_________/|___▌",
|
|
1913
|
-
"▐________/|____▌",
|
|
1914
|
-
"▐_______/|_____▌",
|
|
1915
|
-
"▐______/|______▌",
|
|
1916
|
-
"▐_____/|_______▌",
|
|
1917
|
-
"▐____/|________▌",
|
|
1918
|
-
"▐___/|_________▌",
|
|
1919
|
-
"▐__/|__________▌",
|
|
1920
|
-
"▐_/|___________▌",
|
|
1921
|
-
"▐/|____________▌"
|
|
1922
|
-
]
|
|
1923
|
-
};
|
|
1924
|
-
const dqpb = {
|
|
1925
|
-
interval: 100,
|
|
1926
|
-
frames: [
|
|
1927
|
-
"d",
|
|
1928
|
-
"q",
|
|
1929
|
-
"p",
|
|
1930
|
-
"b"
|
|
1931
|
-
]
|
|
1932
|
-
};
|
|
1933
|
-
const weather = {
|
|
1934
|
-
interval: 100,
|
|
1935
|
-
frames: [
|
|
1936
|
-
"☀️ ",
|
|
1937
|
-
"☀️ ",
|
|
1938
|
-
"☀️ ",
|
|
1939
|
-
"🌤 ",
|
|
1940
|
-
"⛅️ ",
|
|
1941
|
-
"🌥 ",
|
|
1942
|
-
"☁️ ",
|
|
1943
|
-
"🌧 ",
|
|
1944
|
-
"🌨 ",
|
|
1945
|
-
"🌧 ",
|
|
1946
|
-
"🌨 ",
|
|
1947
|
-
"🌧 ",
|
|
1948
|
-
"🌨 ",
|
|
1949
|
-
"⛈ ",
|
|
1950
|
-
"🌨 ",
|
|
1951
|
-
"🌧 ",
|
|
1952
|
-
"🌨 ",
|
|
1953
|
-
"☁️ ",
|
|
1954
|
-
"🌥 ",
|
|
1955
|
-
"⛅️ ",
|
|
1956
|
-
"🌤 ",
|
|
1957
|
-
"☀️ ",
|
|
1958
|
-
"☀️ "
|
|
1959
|
-
]
|
|
1960
|
-
};
|
|
1961
|
-
const christmas = {
|
|
1962
|
-
interval: 400,
|
|
1963
|
-
frames: [
|
|
1964
|
-
"🌲",
|
|
1965
|
-
"🎄"
|
|
1966
|
-
]
|
|
1967
|
-
};
|
|
1968
|
-
const grenade = {
|
|
1969
|
-
interval: 80,
|
|
1970
|
-
frames: [
|
|
1971
|
-
"، ",
|
|
1972
|
-
"′ ",
|
|
1973
|
-
" ´ ",
|
|
1974
|
-
" ‾ ",
|
|
1975
|
-
" ⸌",
|
|
1976
|
-
" ⸊",
|
|
1977
|
-
" |",
|
|
1978
|
-
" ⁎",
|
|
1979
|
-
" ⁕",
|
|
1980
|
-
" ෴ ",
|
|
1981
|
-
" ⁓",
|
|
1982
|
-
" ",
|
|
1983
|
-
" ",
|
|
1984
|
-
" "
|
|
1985
|
-
]
|
|
1986
|
-
};
|
|
1987
|
-
const point = {
|
|
1988
|
-
interval: 125,
|
|
1989
|
-
frames: [
|
|
1990
|
-
"∙∙∙",
|
|
1991
|
-
"●∙∙",
|
|
1992
|
-
"∙●∙",
|
|
1993
|
-
"∙∙●",
|
|
1994
|
-
"∙∙∙"
|
|
1995
|
-
]
|
|
1996
|
-
};
|
|
1997
|
-
const layer = {
|
|
1998
|
-
interval: 150,
|
|
1999
|
-
frames: [
|
|
2000
|
-
"-",
|
|
2001
|
-
"=",
|
|
2002
|
-
"≡"
|
|
2003
|
-
]
|
|
2004
|
-
};
|
|
2005
|
-
const betaWave = {
|
|
2006
|
-
interval: 80,
|
|
2007
|
-
frames: [
|
|
2008
|
-
"ρββββββ",
|
|
2009
|
-
"βρβββββ",
|
|
2010
|
-
"ββρββββ",
|
|
2011
|
-
"βββρβββ",
|
|
2012
|
-
"ββββρββ",
|
|
2013
|
-
"βββββρβ",
|
|
2014
|
-
"ββββββρ"
|
|
2015
|
-
]
|
|
2016
|
-
};
|
|
2017
|
-
const fingerDance = {
|
|
2018
|
-
interval: 160,
|
|
2019
|
-
frames: [
|
|
2020
|
-
"🤘 ",
|
|
2021
|
-
"🤟 ",
|
|
2022
|
-
"🖖 ",
|
|
2023
|
-
"✋ ",
|
|
2024
|
-
"🤚 ",
|
|
2025
|
-
"👆 "
|
|
2026
|
-
]
|
|
2027
|
-
};
|
|
2028
|
-
const fistBump = {
|
|
2029
|
-
interval: 80,
|
|
2030
|
-
frames: [
|
|
2031
|
-
"🤜 🤛 ",
|
|
2032
|
-
"🤜 🤛 ",
|
|
2033
|
-
"🤜 🤛 ",
|
|
2034
|
-
" 🤜 🤛 ",
|
|
2035
|
-
" 🤜🤛 ",
|
|
2036
|
-
" 🤜✨🤛 ",
|
|
2037
|
-
"🤜 ✨ 🤛 "
|
|
2038
|
-
]
|
|
2039
|
-
};
|
|
2040
|
-
const soccerHeader = {
|
|
2041
|
-
interval: 80,
|
|
2042
|
-
frames: [
|
|
2043
|
-
" 🧑⚽️ 🧑 ",
|
|
2044
|
-
"🧑 ⚽️ 🧑 ",
|
|
2045
|
-
"🧑 ⚽️ 🧑 ",
|
|
2046
|
-
"🧑 ⚽️ 🧑 ",
|
|
2047
|
-
"🧑 ⚽️ 🧑 ",
|
|
2048
|
-
"🧑 ⚽️ 🧑 ",
|
|
2049
|
-
"🧑 ⚽️🧑 ",
|
|
2050
|
-
"🧑 ⚽️ 🧑 ",
|
|
2051
|
-
"🧑 ⚽️ 🧑 ",
|
|
2052
|
-
"🧑 ⚽️ 🧑 ",
|
|
2053
|
-
"🧑 ⚽️ 🧑 ",
|
|
2054
|
-
"🧑 ⚽️ 🧑 "
|
|
2055
|
-
]
|
|
2056
|
-
};
|
|
2057
|
-
const mindblown = {
|
|
2058
|
-
interval: 160,
|
|
2059
|
-
frames: [
|
|
2060
|
-
"😐 ",
|
|
2061
|
-
"😐 ",
|
|
2062
|
-
"😮 ",
|
|
2063
|
-
"😮 ",
|
|
2064
|
-
"😦 ",
|
|
2065
|
-
"😦 ",
|
|
2066
|
-
"😧 ",
|
|
2067
|
-
"😧 ",
|
|
2068
|
-
"🤯 ",
|
|
2069
|
-
"💥 ",
|
|
2070
|
-
"✨ ",
|
|
2071
|
-
" ",
|
|
2072
|
-
" ",
|
|
2073
|
-
" "
|
|
2074
|
-
]
|
|
2075
|
-
};
|
|
2076
|
-
const speaker = {
|
|
2077
|
-
interval: 160,
|
|
2078
|
-
frames: [
|
|
2079
|
-
"🔈 ",
|
|
2080
|
-
"🔉 ",
|
|
2081
|
-
"🔊 ",
|
|
2082
|
-
"🔉 "
|
|
2083
|
-
]
|
|
2084
|
-
};
|
|
2085
|
-
const orangePulse = {
|
|
2086
|
-
interval: 100,
|
|
2087
|
-
frames: [
|
|
2088
|
-
"🔸 ",
|
|
2089
|
-
"🔶 ",
|
|
2090
|
-
"🟠 ",
|
|
2091
|
-
"🟠 ",
|
|
2092
|
-
"🔶 "
|
|
2093
|
-
]
|
|
2094
|
-
};
|
|
2095
|
-
const bluePulse = {
|
|
2096
|
-
interval: 100,
|
|
2097
|
-
frames: [
|
|
2098
|
-
"🔹 ",
|
|
2099
|
-
"🔷 ",
|
|
2100
|
-
"🔵 ",
|
|
2101
|
-
"🔵 ",
|
|
2102
|
-
"🔷 "
|
|
2103
|
-
]
|
|
2104
|
-
};
|
|
2105
|
-
const orangeBluePulse = {
|
|
2106
|
-
interval: 100,
|
|
2107
|
-
frames: [
|
|
2108
|
-
"🔸 ",
|
|
2109
|
-
"🔶 ",
|
|
2110
|
-
"🟠 ",
|
|
2111
|
-
"🟠 ",
|
|
2112
|
-
"🔶 ",
|
|
2113
|
-
"🔹 ",
|
|
2114
|
-
"🔷 ",
|
|
2115
|
-
"🔵 ",
|
|
2116
|
-
"🔵 ",
|
|
2117
|
-
"🔷 "
|
|
2118
|
-
]
|
|
2119
|
-
};
|
|
2120
|
-
const timeTravel = {
|
|
2121
|
-
interval: 100,
|
|
2122
|
-
frames: [
|
|
2123
|
-
"🕛 ",
|
|
2124
|
-
"🕚 ",
|
|
2125
|
-
"🕙 ",
|
|
2126
|
-
"🕘 ",
|
|
2127
|
-
"🕗 ",
|
|
2128
|
-
"🕖 ",
|
|
2129
|
-
"🕕 ",
|
|
2130
|
-
"🕔 ",
|
|
2131
|
-
"🕓 ",
|
|
2132
|
-
"🕒 ",
|
|
2133
|
-
"🕑 ",
|
|
2134
|
-
"🕐 "
|
|
2135
|
-
]
|
|
2136
|
-
};
|
|
2137
|
-
const aesthetic = {
|
|
2138
|
-
interval: 80,
|
|
2139
|
-
frames: [
|
|
2140
|
-
"▰▱▱▱▱▱▱",
|
|
2141
|
-
"▰▰▱▱▱▱▱",
|
|
2142
|
-
"▰▰▰▱▱▱▱",
|
|
2143
|
-
"▰▰▰▰▱▱▱",
|
|
2144
|
-
"▰▰▰▰▰▱▱",
|
|
2145
|
-
"▰▰▰▰▰▰▱",
|
|
2146
|
-
"▰▰▰▰▰▰▰",
|
|
2147
|
-
"▰▱▱▱▱▱▱"
|
|
2148
|
-
]
|
|
2149
|
-
};
|
|
2150
|
-
const dwarfFortress = {
|
|
2151
|
-
interval: 80,
|
|
2152
|
-
frames: [
|
|
2153
|
-
" ██████£££ ",
|
|
2154
|
-
"☺██████£££ ",
|
|
2155
|
-
"☺██████£££ ",
|
|
2156
|
-
"☺▓█████£££ ",
|
|
2157
|
-
"☺▓█████£££ ",
|
|
2158
|
-
"☺▒█████£££ ",
|
|
2159
|
-
"☺▒█████£££ ",
|
|
2160
|
-
"☺░█████£££ ",
|
|
2161
|
-
"☺░█████£££ ",
|
|
2162
|
-
"☺ █████£££ ",
|
|
2163
|
-
" ☺█████£££ ",
|
|
2164
|
-
" ☺█████£££ ",
|
|
2165
|
-
" ☺▓████£££ ",
|
|
2166
|
-
" ☺▓████£££ ",
|
|
2167
|
-
" ☺▒████£££ ",
|
|
2168
|
-
" ☺▒████£££ ",
|
|
2169
|
-
" ☺░████£££ ",
|
|
2170
|
-
" ☺░████£££ ",
|
|
2171
|
-
" ☺ ████£££ ",
|
|
2172
|
-
" ☺████£££ ",
|
|
2173
|
-
" ☺████£££ ",
|
|
2174
|
-
" ☺▓███£££ ",
|
|
2175
|
-
" ☺▓███£££ ",
|
|
2176
|
-
" ☺▒███£££ ",
|
|
2177
|
-
" ☺▒███£££ ",
|
|
2178
|
-
" ☺░███£££ ",
|
|
2179
|
-
" ☺░███£££ ",
|
|
2180
|
-
" ☺ ███£££ ",
|
|
2181
|
-
" ☺███£££ ",
|
|
2182
|
-
" ☺███£££ ",
|
|
2183
|
-
" ☺▓██£££ ",
|
|
2184
|
-
" ☺▓██£££ ",
|
|
2185
|
-
" ☺▒██£££ ",
|
|
2186
|
-
" ☺▒██£££ ",
|
|
2187
|
-
" ☺░██£££ ",
|
|
2188
|
-
" ☺░██£££ ",
|
|
2189
|
-
" ☺ ██£££ ",
|
|
2190
|
-
" ☺██£££ ",
|
|
2191
|
-
" ☺██£££ ",
|
|
2192
|
-
" ☺▓█£££ ",
|
|
2193
|
-
" ☺▓█£££ ",
|
|
2194
|
-
" ☺▒█£££ ",
|
|
2195
|
-
" ☺▒█£££ ",
|
|
2196
|
-
" ☺░█£££ ",
|
|
2197
|
-
" ☺░█£££ ",
|
|
2198
|
-
" ☺ █£££ ",
|
|
2199
|
-
" ☺█£££ ",
|
|
2200
|
-
" ☺█£££ ",
|
|
2201
|
-
" ☺▓£££ ",
|
|
2202
|
-
" ☺▓£££ ",
|
|
2203
|
-
" ☺▒£££ ",
|
|
2204
|
-
" ☺▒£££ ",
|
|
2205
|
-
" ☺░£££ ",
|
|
2206
|
-
" ☺░£££ ",
|
|
2207
|
-
" ☺ £££ ",
|
|
2208
|
-
" ☺£££ ",
|
|
2209
|
-
" ☺£££ ",
|
|
2210
|
-
" ☺▓££ ",
|
|
2211
|
-
" ☺▓££ ",
|
|
2212
|
-
" ☺▒££ ",
|
|
2213
|
-
" ☺▒££ ",
|
|
2214
|
-
" ☺░££ ",
|
|
2215
|
-
" ☺░££ ",
|
|
2216
|
-
" ☺ ££ ",
|
|
2217
|
-
" ☺££ ",
|
|
2218
|
-
" ☺££ ",
|
|
2219
|
-
" ☺▓£ ",
|
|
2220
|
-
" ☺▓£ ",
|
|
2221
|
-
" ☺▒£ ",
|
|
2222
|
-
" ☺▒£ ",
|
|
2223
|
-
" ☺░£ ",
|
|
2224
|
-
" ☺░£ ",
|
|
2225
|
-
" ☺ £ ",
|
|
2226
|
-
" ☺£ ",
|
|
2227
|
-
" ☺£ ",
|
|
2228
|
-
" ☺▓ ",
|
|
2229
|
-
" ☺▓ ",
|
|
2230
|
-
" ☺▒ ",
|
|
2231
|
-
" ☺▒ ",
|
|
2232
|
-
" ☺░ ",
|
|
2233
|
-
" ☺░ ",
|
|
2234
|
-
" ☺ ",
|
|
2235
|
-
" ☺ &",
|
|
2236
|
-
" ☺ ☼&",
|
|
2237
|
-
" ☺ ☼ &",
|
|
2238
|
-
" ☺☼ &",
|
|
2239
|
-
" ☺☼ & ",
|
|
2240
|
-
" ‼ & ",
|
|
2241
|
-
" ☺ & ",
|
|
2242
|
-
" ‼ & ",
|
|
2243
|
-
" ☺ & ",
|
|
2244
|
-
" ‼ & ",
|
|
2245
|
-
" ☺ & ",
|
|
2246
|
-
"‼ & ",
|
|
2247
|
-
" & ",
|
|
2248
|
-
" & ",
|
|
2249
|
-
" & ░ ",
|
|
2250
|
-
" & ▒ ",
|
|
2251
|
-
" & ▓ ",
|
|
2252
|
-
" & £ ",
|
|
2253
|
-
" & ░£ ",
|
|
2254
|
-
" & ▒£ ",
|
|
2255
|
-
" & ▓£ ",
|
|
2256
|
-
" & ££ ",
|
|
2257
|
-
" & ░££ ",
|
|
2258
|
-
" & ▒££ ",
|
|
2259
|
-
"& ▓££ ",
|
|
2260
|
-
"& £££ ",
|
|
2261
|
-
" ░£££ ",
|
|
2262
|
-
" ▒£££ ",
|
|
2263
|
-
" ▓£££ ",
|
|
2264
|
-
" █£££ ",
|
|
2265
|
-
" ░█£££ ",
|
|
2266
|
-
" ▒█£££ ",
|
|
2267
|
-
" ▓█£££ ",
|
|
2268
|
-
" ██£££ ",
|
|
2269
|
-
" ░██£££ ",
|
|
2270
|
-
" ▒██£££ ",
|
|
2271
|
-
" ▓██£££ ",
|
|
2272
|
-
" ███£££ ",
|
|
2273
|
-
" ░███£££ ",
|
|
2274
|
-
" ▒███£££ ",
|
|
2275
|
-
" ▓███£££ ",
|
|
2276
|
-
" ████£££ ",
|
|
2277
|
-
" ░████£££ ",
|
|
2278
|
-
" ▒████£££ ",
|
|
2279
|
-
" ▓████£££ ",
|
|
2280
|
-
" █████£££ ",
|
|
2281
|
-
" ░█████£££ ",
|
|
2282
|
-
" ▒█████£££ ",
|
|
2283
|
-
" ▓█████£££ ",
|
|
2284
|
-
" ██████£££ ",
|
|
2285
|
-
" ██████£££ "
|
|
2286
|
-
]
|
|
2287
|
-
};
|
|
2288
|
-
const spinners = {
|
|
2289
|
-
dots: dots,
|
|
2290
|
-
dots2: dots2,
|
|
2291
|
-
dots3: dots3,
|
|
2292
|
-
dots4: dots4,
|
|
2293
|
-
dots5: dots5,
|
|
2294
|
-
dots6: dots6,
|
|
2295
|
-
dots7: dots7,
|
|
2296
|
-
dots8: dots8,
|
|
2297
|
-
dots9: dots9,
|
|
2298
|
-
dots10: dots10,
|
|
2299
|
-
dots11: dots11,
|
|
2300
|
-
dots12: dots12,
|
|
2301
|
-
dots13: dots13,
|
|
2302
|
-
dots14: dots14,
|
|
2303
|
-
dots8Bit: dots8Bit,
|
|
2304
|
-
dotsCircle: dotsCircle,
|
|
2305
|
-
sand: sand,
|
|
2306
|
-
line: line,
|
|
2307
|
-
line2: line2,
|
|
2308
|
-
pipe: pipe,
|
|
2309
|
-
simpleDots: simpleDots,
|
|
2310
|
-
simpleDotsScrolling: simpleDotsScrolling,
|
|
2311
|
-
star: star,
|
|
2312
|
-
star2: star2,
|
|
2313
|
-
flip: flip,
|
|
2314
|
-
hamburger: hamburger,
|
|
2315
|
-
growVertical: growVertical,
|
|
2316
|
-
growHorizontal: growHorizontal,
|
|
2317
|
-
balloon: balloon,
|
|
2318
|
-
balloon2: balloon2,
|
|
2319
|
-
noise: noise,
|
|
2320
|
-
bounce: bounce,
|
|
2321
|
-
boxBounce: boxBounce,
|
|
2322
|
-
boxBounce2: boxBounce2,
|
|
2323
|
-
triangle: triangle,
|
|
2324
|
-
binary: binary,
|
|
2325
|
-
arc: arc,
|
|
2326
|
-
circle: circle,
|
|
2327
|
-
squareCorners: squareCorners,
|
|
2328
|
-
circleQuarters: circleQuarters,
|
|
2329
|
-
circleHalves: circleHalves,
|
|
2330
|
-
squish: squish,
|
|
2331
|
-
toggle: toggle,
|
|
2332
|
-
toggle2: toggle2,
|
|
2333
|
-
toggle3: toggle3,
|
|
2334
|
-
toggle4: toggle4,
|
|
2335
|
-
toggle5: toggle5,
|
|
2336
|
-
toggle6: toggle6,
|
|
2337
|
-
toggle7: toggle7,
|
|
2338
|
-
toggle8: toggle8,
|
|
2339
|
-
toggle9: toggle9,
|
|
2340
|
-
toggle10: toggle10,
|
|
2341
|
-
toggle11: toggle11,
|
|
2342
|
-
toggle12: toggle12,
|
|
2343
|
-
toggle13: toggle13,
|
|
2344
|
-
arrow: arrow,
|
|
2345
|
-
arrow2: arrow2,
|
|
2346
|
-
arrow3: arrow3,
|
|
2347
|
-
bouncingBar: bouncingBar,
|
|
2348
|
-
bouncingBall: bouncingBall,
|
|
2349
|
-
smiley: smiley,
|
|
2350
|
-
monkey: monkey,
|
|
2351
|
-
hearts: hearts,
|
|
2352
|
-
clock: clock,
|
|
2353
|
-
earth: earth,
|
|
2354
|
-
material: material,
|
|
2355
|
-
moon: moon,
|
|
2356
|
-
runner: runner,
|
|
2357
|
-
pong: pong,
|
|
2358
|
-
shark: shark,
|
|
2359
|
-
dqpb: dqpb,
|
|
2360
|
-
weather: weather,
|
|
2361
|
-
christmas: christmas,
|
|
2362
|
-
grenade: grenade,
|
|
2363
|
-
point: point,
|
|
2364
|
-
layer: layer,
|
|
2365
|
-
betaWave: betaWave,
|
|
2366
|
-
fingerDance: fingerDance,
|
|
2367
|
-
fistBump: fistBump,
|
|
2368
|
-
soccerHeader: soccerHeader,
|
|
2369
|
-
mindblown: mindblown,
|
|
2370
|
-
speaker: speaker,
|
|
2371
|
-
orangePulse: orangePulse,
|
|
2372
|
-
bluePulse: bluePulse,
|
|
2373
|
-
orangeBluePulse: orangeBluePulse,
|
|
2374
|
-
timeTravel: timeTravel,
|
|
2375
|
-
aesthetic: aesthetic,
|
|
2376
|
-
dwarfFortress: dwarfFortress
|
|
2377
|
-
};
|
|
639
|
+
var cliSpinnersExports = requireCliSpinners();
|
|
640
|
+
const cliSpinners = /*@__PURE__*/getDefaultExportFromCjs(cliSpinnersExports);
|
|
2378
641
|
|
|
2379
|
-
const
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
642
|
+
const logSymbols = {
|
|
643
|
+
info: 'ℹ️',
|
|
644
|
+
success: '✅',
|
|
645
|
+
warning: '⚠️',
|
|
646
|
+
error: '❌️',
|
|
647
|
+
};
|
|
2383
648
|
|
|
2384
649
|
function ansiRegex({onlyFirst = false} = {}) {
|
|
2385
650
|
// Valid string terminator sequences are BEL, ESC\, and 0x9c
|
|
@@ -2790,49 +1055,17 @@ function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {
|
|
|
2790
1055
|
return 1;
|
|
2791
1056
|
}
|
|
2792
1057
|
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
- Segment graphemes to match how terminals render clusters.
|
|
2796
|
-
|
|
2797
|
-
1. Skip non-printing clusters (Default_Ignorable, Control, pure Mark, lone Surrogates). Tabs are ignored by design.
|
|
2798
|
-
2. RGI emoji clusters (\p{RGI_Emoji}) are double-width.
|
|
2799
|
-
3. Otherwise use East Asian Width of the cluster’s first visible code point, and add widths for trailing Halfwidth/Fullwidth Forms within the same cluster (e.g., dakuten/handakuten/prolonged sound mark).
|
|
2800
|
-
*/
|
|
1058
|
+
const emojiRegex = () => {
|
|
1059
|
+
// https://mths.be/emoji
|
|
1060
|
+
return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
|
|
1061
|
+
};
|
|
2801
1062
|
|
|
2802
1063
|
const segmenter = new Intl.Segmenter();
|
|
2803
1064
|
|
|
2804
|
-
|
|
2805
|
-
const zeroWidthClusterRegex = /^(?:\p{Default_Ignorable_Code_Point}|\p{Control}|\p{Mark}|\p{Surrogate})+$/v;
|
|
2806
|
-
|
|
2807
|
-
// Pick the base scalar if the cluster starts with Prepend/Format/Marks
|
|
2808
|
-
const leadingNonPrintingRegex = /^[\p{Default_Ignorable_Code_Point}\p{Control}\p{Format}\p{Mark}\p{Surrogate}]+/v;
|
|
2809
|
-
|
|
2810
|
-
// RGI emoji sequences
|
|
2811
|
-
const rgiEmojiRegex = /^\p{RGI_Emoji}$/v;
|
|
2812
|
-
|
|
2813
|
-
function baseVisible(segment) {
|
|
2814
|
-
return segment.replace(leadingNonPrintingRegex, '');
|
|
2815
|
-
}
|
|
2816
|
-
|
|
2817
|
-
function isZeroWidthCluster(segment) {
|
|
2818
|
-
return zeroWidthClusterRegex.test(segment);
|
|
2819
|
-
}
|
|
2820
|
-
|
|
2821
|
-
function trailingHalfwidthWidth(segment, eastAsianWidthOptions) {
|
|
2822
|
-
let extra = 0;
|
|
2823
|
-
if (segment.length > 1) {
|
|
2824
|
-
for (const char of segment.slice(1)) {
|
|
2825
|
-
if (char >= '\uFF00' && char <= '\uFFEF') {
|
|
2826
|
-
extra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);
|
|
2827
|
-
}
|
|
2828
|
-
}
|
|
2829
|
-
}
|
|
2830
|
-
|
|
2831
|
-
return extra;
|
|
2832
|
-
}
|
|
1065
|
+
const defaultIgnorableCodePointRegex = /^\p{Default_Ignorable_Code_Point}$/u;
|
|
2833
1066
|
|
|
2834
|
-
function stringWidth(
|
|
2835
|
-
if (typeof
|
|
1067
|
+
function stringWidth(string, options = {}) {
|
|
1068
|
+
if (typeof string !== 'string' || string.length === 0) {
|
|
2836
1069
|
return 0;
|
|
2837
1070
|
}
|
|
2838
1071
|
|
|
@@ -2841,8 +1074,6 @@ function stringWidth(input, options = {}) {
|
|
|
2841
1074
|
countAnsiEscapeCodes = false,
|
|
2842
1075
|
} = options;
|
|
2843
1076
|
|
|
2844
|
-
let string = input;
|
|
2845
|
-
|
|
2846
1077
|
if (!countAnsiEscapeCodes) {
|
|
2847
1078
|
string = stripAnsi(string);
|
|
2848
1079
|
}
|
|
@@ -2854,24 +1085,55 @@ function stringWidth(input, options = {}) {
|
|
|
2854
1085
|
let width = 0;
|
|
2855
1086
|
const eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};
|
|
2856
1087
|
|
|
2857
|
-
for (const {segment} of segmenter.segment(string)) {
|
|
2858
|
-
|
|
2859
|
-
|
|
1088
|
+
for (const {segment: character} of segmenter.segment(string)) {
|
|
1089
|
+
const codePoint = character.codePointAt(0);
|
|
1090
|
+
|
|
1091
|
+
// Ignore control characters
|
|
1092
|
+
if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {
|
|
1093
|
+
continue;
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
// Ignore zero-width characters
|
|
1097
|
+
if (
|
|
1098
|
+
(codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark
|
|
1099
|
+
|| codePoint === 0xFE_FF // Zero-width no-break space
|
|
1100
|
+
) {
|
|
1101
|
+
continue;
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
// Ignore combining characters
|
|
1105
|
+
if (
|
|
1106
|
+
(codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks
|
|
1107
|
+
|| (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended
|
|
1108
|
+
|| (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement
|
|
1109
|
+
|| (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols
|
|
1110
|
+
|| (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks
|
|
1111
|
+
) {
|
|
1112
|
+
continue;
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
// Ignore surrogate pairs
|
|
1116
|
+
if (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {
|
|
1117
|
+
continue;
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
// Ignore variation selectors
|
|
1121
|
+
if (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {
|
|
1122
|
+
continue;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
// This covers some of the above cases, but we still keep them for performance reasons.
|
|
1126
|
+
if (defaultIgnorableCodePointRegex.test(character)) {
|
|
2860
1127
|
continue;
|
|
2861
1128
|
}
|
|
2862
1129
|
|
|
2863
|
-
//
|
|
2864
|
-
if (
|
|
1130
|
+
// TODO: Use `/\p{RGI_Emoji}/v` when targeting Node.js 20.
|
|
1131
|
+
if (emojiRegex().test(character)) {
|
|
2865
1132
|
width += 2;
|
|
2866
1133
|
continue;
|
|
2867
1134
|
}
|
|
2868
1135
|
|
|
2869
|
-
// Everything else: EAW of the cluster’s first visible scalar
|
|
2870
|
-
const codePoint = baseVisible(segment).codePointAt(0);
|
|
2871
1136
|
width += eastAsianWidth(codePoint, eastAsianWidthOptions);
|
|
2872
|
-
|
|
2873
|
-
// Add width for trailing Halfwidth and Fullwidth Forms (e.g., ゙, ゚, ー)
|
|
2874
|
-
width += trailingHalfwidthWidth(segment, eastAsianWidthOptions);
|
|
2875
1137
|
}
|
|
2876
1138
|
|
|
2877
1139
|
return width;
|
|
@@ -2905,195 +1167,81 @@ function isUnicodeSupported() {
|
|
|
2905
1167
|
|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';
|
|
2906
1168
|
}
|
|
2907
1169
|
|
|
2908
|
-
const ASCII_ETX_CODE = 0x03; // Ctrl+C
|
|
1170
|
+
const ASCII_ETX_CODE = 0x03; // Ctrl+C emits this code
|
|
2909
1171
|
|
|
2910
1172
|
class StdinDiscarder {
|
|
2911
1173
|
#activeCount = 0;
|
|
2912
|
-
#stdin;
|
|
2913
|
-
#stdinWasPaused = false;
|
|
2914
|
-
#stdinWasRaw = false;
|
|
2915
|
-
#handleInputBound = chunk => {
|
|
2916
|
-
if (!chunk?.length) {
|
|
2917
|
-
return;
|
|
2918
|
-
}
|
|
2919
|
-
|
|
2920
|
-
const code = typeof chunk === 'string' ? chunk.codePointAt(0) : chunk[0];
|
|
2921
|
-
if (code === ASCII_ETX_CODE) {
|
|
2922
|
-
if (process__default.listenerCount('SIGINT') > 0) {
|
|
2923
|
-
process__default.emit('SIGINT');
|
|
2924
|
-
} else {
|
|
2925
|
-
process__default.kill(process__default.pid, 'SIGINT');
|
|
2926
|
-
}
|
|
2927
|
-
}
|
|
2928
|
-
};
|
|
2929
1174
|
|
|
2930
1175
|
start() {
|
|
2931
1176
|
this.#activeCount++;
|
|
1177
|
+
|
|
2932
1178
|
if (this.#activeCount === 1) {
|
|
2933
1179
|
this.#realStart();
|
|
2934
1180
|
}
|
|
2935
1181
|
}
|
|
2936
1182
|
|
|
2937
1183
|
stop() {
|
|
2938
|
-
if (this.#activeCount
|
|
2939
|
-
|
|
1184
|
+
if (this.#activeCount <= 0) {
|
|
1185
|
+
throw new Error('`stop` called more times than `start`');
|
|
2940
1186
|
}
|
|
2941
1187
|
|
|
2942
|
-
|
|
1188
|
+
this.#activeCount--;
|
|
1189
|
+
|
|
1190
|
+
if (this.#activeCount === 0) {
|
|
2943
1191
|
this.#realStop();
|
|
2944
1192
|
}
|
|
2945
1193
|
}
|
|
2946
1194
|
|
|
2947
1195
|
#realStart() {
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
if (process__default.platform === 'win32' || !stdin?.isTTY || typeof stdin.setRawMode !== 'function') {
|
|
2951
|
-
this.#stdin = undefined;
|
|
1196
|
+
// No known way to make it work reliably on Windows.
|
|
1197
|
+
if (process__default.platform === 'win32' || !process__default.stdin.isTTY) {
|
|
2952
1198
|
return;
|
|
2953
1199
|
}
|
|
2954
1200
|
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
stdin.setRawMode(true);
|
|
2960
|
-
stdin.prependListener('data', this.#handleInputBound);
|
|
2961
|
-
|
|
2962
|
-
if (this.#stdinWasPaused) {
|
|
2963
|
-
stdin.resume();
|
|
2964
|
-
}
|
|
1201
|
+
process__default.stdin.setRawMode(true);
|
|
1202
|
+
process__default.stdin.on('data', this.#handleInput);
|
|
1203
|
+
process__default.stdin.resume();
|
|
2965
1204
|
}
|
|
2966
1205
|
|
|
2967
1206
|
#realStop() {
|
|
2968
|
-
if (!
|
|
1207
|
+
if (!process__default.stdin.isTTY) {
|
|
2969
1208
|
return;
|
|
2970
1209
|
}
|
|
2971
1210
|
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
stdin.
|
|
2975
|
-
|
|
2976
|
-
if (stdin.isTTY) {
|
|
2977
|
-
stdin.setRawMode?.(this.#stdinWasRaw);
|
|
2978
|
-
}
|
|
1211
|
+
process__default.stdin.off('data', this.#handleInput);
|
|
1212
|
+
process__default.stdin.pause();
|
|
1213
|
+
process__default.stdin.setRawMode(false);
|
|
1214
|
+
}
|
|
2979
1215
|
|
|
2980
|
-
|
|
2981
|
-
|
|
1216
|
+
#handleInput(chunk) {
|
|
1217
|
+
// Allow Ctrl+C to gracefully exit.
|
|
1218
|
+
if (chunk[0] === ASCII_ETX_CODE) {
|
|
1219
|
+
process__default.emit('SIGINT');
|
|
2982
1220
|
}
|
|
2983
|
-
|
|
2984
|
-
this.#stdin = undefined;
|
|
2985
|
-
this.#stdinWasPaused = false;
|
|
2986
|
-
this.#stdinWasRaw = false;
|
|
2987
1221
|
}
|
|
2988
1222
|
}
|
|
2989
1223
|
|
|
2990
1224
|
const stdinDiscarder = new StdinDiscarder();
|
|
2991
1225
|
|
|
2992
|
-
const stdinDiscarder$1 = Object.freeze(stdinDiscarder);
|
|
2993
|
-
|
|
2994
|
-
// Constants
|
|
2995
|
-
const RENDER_DEFERRAL_TIMEOUT = 200; // Milliseconds to wait before re-rendering after partial chunk write
|
|
2996
|
-
const SYNCHRONIZED_OUTPUT_ENABLE = '\u001B[?2026h';
|
|
2997
|
-
const SYNCHRONIZED_OUTPUT_DISABLE = '\u001B[?2026l';
|
|
2998
|
-
|
|
2999
|
-
// Global state for concurrent spinner detection
|
|
3000
|
-
const activeHooksPerStream = new Map(); // Stream → ora instance
|
|
3001
|
-
|
|
3002
1226
|
class Ora {
|
|
3003
1227
|
#linesToClear = 0;
|
|
1228
|
+
#isDiscardingStdin = false;
|
|
1229
|
+
#lineCount = 0;
|
|
3004
1230
|
#frameIndex = -1;
|
|
3005
|
-
#
|
|
1231
|
+
#lastSpinnerFrameTime = 0;
|
|
3006
1232
|
#options;
|
|
3007
1233
|
#spinner;
|
|
3008
1234
|
#stream;
|
|
3009
1235
|
#id;
|
|
3010
|
-
#
|
|
3011
|
-
#
|
|
3012
|
-
#
|
|
3013
|
-
#
|
|
3014
|
-
#
|
|
1236
|
+
#initialInterval;
|
|
1237
|
+
#isEnabled;
|
|
1238
|
+
#isSilent;
|
|
1239
|
+
#indent;
|
|
1240
|
+
#text;
|
|
1241
|
+
#prefixText;
|
|
1242
|
+
#suffixText;
|
|
3015
1243
|
color;
|
|
3016
1244
|
|
|
3017
|
-
// Helper to execute writes while preventing hook recursion
|
|
3018
|
-
#internalWrite(fn) {
|
|
3019
|
-
this.#isInternalWrite = true;
|
|
3020
|
-
try {
|
|
3021
|
-
return fn();
|
|
3022
|
-
} finally {
|
|
3023
|
-
this.#isInternalWrite = false;
|
|
3024
|
-
}
|
|
3025
|
-
}
|
|
3026
|
-
|
|
3027
|
-
// Helper to render if still spinning
|
|
3028
|
-
#tryRender() {
|
|
3029
|
-
if (this.isSpinning) {
|
|
3030
|
-
this.render();
|
|
3031
|
-
}
|
|
3032
|
-
}
|
|
3033
|
-
|
|
3034
|
-
#stringifyChunk(chunk, encoding) {
|
|
3035
|
-
if (chunk === undefined || chunk === null) {
|
|
3036
|
-
return '';
|
|
3037
|
-
}
|
|
3038
|
-
|
|
3039
|
-
if (typeof chunk === 'string') {
|
|
3040
|
-
return chunk;
|
|
3041
|
-
}
|
|
3042
|
-
|
|
3043
|
-
/* eslint-disable n/prefer-global/buffer */
|
|
3044
|
-
if (Buffer.isBuffer(chunk) || ArrayBuffer.isView(chunk)) {
|
|
3045
|
-
const normalizedEncoding = (typeof encoding === 'string' && encoding && encoding !== 'buffer') ? encoding : 'utf8';
|
|
3046
|
-
return Buffer.from(chunk).toString(normalizedEncoding);
|
|
3047
|
-
}
|
|
3048
|
-
/* eslint-enable n/prefer-global/buffer */
|
|
3049
|
-
|
|
3050
|
-
return String(chunk);
|
|
3051
|
-
}
|
|
3052
|
-
|
|
3053
|
-
#chunkTerminatesLine(chunkString) {
|
|
3054
|
-
if (!chunkString) {
|
|
3055
|
-
return false;
|
|
3056
|
-
}
|
|
3057
|
-
|
|
3058
|
-
const lastCharacter = chunkString.at(-1);
|
|
3059
|
-
return lastCharacter === '\n' || lastCharacter === '\r';
|
|
3060
|
-
}
|
|
3061
|
-
|
|
3062
|
-
#scheduleRenderDeferral() {
|
|
3063
|
-
// If already deferred, don't reset timer - let it complete
|
|
3064
|
-
if (this.#deferRenderTimer) {
|
|
3065
|
-
return;
|
|
3066
|
-
}
|
|
3067
|
-
|
|
3068
|
-
this.#deferRenderTimer = setTimeout(() => {
|
|
3069
|
-
this.#deferRenderTimer = undefined;
|
|
3070
|
-
|
|
3071
|
-
if (this.isSpinning) {
|
|
3072
|
-
this.#tryRender();
|
|
3073
|
-
}
|
|
3074
|
-
}, RENDER_DEFERRAL_TIMEOUT);
|
|
3075
|
-
|
|
3076
|
-
if (typeof this.#deferRenderTimer?.unref === 'function') {
|
|
3077
|
-
this.#deferRenderTimer.unref();
|
|
3078
|
-
}
|
|
3079
|
-
}
|
|
3080
|
-
|
|
3081
|
-
#clearRenderDeferral() {
|
|
3082
|
-
if (this.#deferRenderTimer) {
|
|
3083
|
-
clearTimeout(this.#deferRenderTimer);
|
|
3084
|
-
this.#deferRenderTimer = undefined;
|
|
3085
|
-
}
|
|
3086
|
-
}
|
|
3087
|
-
|
|
3088
|
-
// Helper to build complete line with symbol, text, prefix, and suffix
|
|
3089
|
-
#buildOutputLine(symbol, text, prefixText, suffixText) {
|
|
3090
|
-
const fullPrefixText = this.#getFullPrefixText(prefixText, ' ');
|
|
3091
|
-
const separatorText = symbol ? ' ' : '';
|
|
3092
|
-
const fullText = (typeof text === 'string') ? separatorText + text : '';
|
|
3093
|
-
const fullSuffixText = this.#getFullSuffixText(suffixText, ' ');
|
|
3094
|
-
return fullPrefixText + symbol + fullText + fullSuffixText;
|
|
3095
|
-
}
|
|
3096
|
-
|
|
3097
1245
|
constructor(options) {
|
|
3098
1246
|
if (typeof options === 'string') {
|
|
3099
1247
|
options = {
|
|
@@ -3112,23 +1260,16 @@ class Ora {
|
|
|
3112
1260
|
// Public
|
|
3113
1261
|
this.color = this.#options.color;
|
|
3114
1262
|
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
// Normalize isEnabled and isSilent into options
|
|
3118
|
-
if (typeof this.#options.isEnabled !== 'boolean') {
|
|
3119
|
-
this.#options.isEnabled = isInteractive({stream: this.#stream});
|
|
3120
|
-
}
|
|
1263
|
+
// It's important that these use the public setters.
|
|
1264
|
+
this.spinner = this.#options.spinner;
|
|
3121
1265
|
|
|
3122
|
-
|
|
3123
|
-
|
|
3124
|
-
}
|
|
1266
|
+
this.#initialInterval = this.#options.interval;
|
|
1267
|
+
this.#stream = this.#options.stream;
|
|
1268
|
+
this.#isEnabled = typeof this.#options.isEnabled === 'boolean' ? this.#options.isEnabled : isInteractive({stream: this.#stream});
|
|
1269
|
+
this.#isSilent = typeof this.#options.isSilent === 'boolean' ? this.#options.isSilent : false;
|
|
3125
1270
|
|
|
3126
1271
|
// Set *after* `this.#stream`.
|
|
3127
|
-
// Store original interval before spinner setter clears it
|
|
3128
|
-
const userInterval = this.#options.interval;
|
|
3129
1272
|
// It's important that these use the public setters.
|
|
3130
|
-
this.spinner = this.#options.spinner;
|
|
3131
|
-
this.#options.interval = userInterval;
|
|
3132
1273
|
this.text = this.#options.text;
|
|
3133
1274
|
this.prefixText = this.#options.prefixText;
|
|
3134
1275
|
this.suffixText = this.#options.suffixText;
|
|
@@ -3136,7 +1277,7 @@ class Ora {
|
|
|
3136
1277
|
|
|
3137
1278
|
if (process__default.env.NODE_ENV === 'test') {
|
|
3138
1279
|
this._stream = this.#stream;
|
|
3139
|
-
this._isEnabled = this.#
|
|
1280
|
+
this._isEnabled = this.#isEnabled;
|
|
3140
1281
|
|
|
3141
1282
|
Object.defineProperty(this, '_linesToClear', {
|
|
3142
1283
|
get() {
|
|
@@ -3155,21 +1296,14 @@ class Ora {
|
|
|
3155
1296
|
|
|
3156
1297
|
Object.defineProperty(this, '_lineCount', {
|
|
3157
1298
|
get() {
|
|
3158
|
-
|
|
3159
|
-
const prefixText = typeof this.#options.prefixText === 'function' ? '' : this.#options.prefixText;
|
|
3160
|
-
const suffixText = typeof this.#options.suffixText === 'function' ? '' : this.#options.suffixText;
|
|
3161
|
-
const fullPrefixText = (typeof prefixText === 'string' && prefixText !== '') ? prefixText + ' ' : '';
|
|
3162
|
-
const fullSuffixText = (typeof suffixText === 'string' && suffixText !== '') ? ' ' + suffixText : '';
|
|
3163
|
-
const spinnerChar = '-';
|
|
3164
|
-
const fullText = ' '.repeat(this.#options.indent) + fullPrefixText + spinnerChar + (typeof this.#options.text === 'string' ? ' ' + this.#options.text : '') + fullSuffixText;
|
|
3165
|
-
return this.#computeLineCountFrom(fullText, columns);
|
|
1299
|
+
return this.#lineCount;
|
|
3166
1300
|
},
|
|
3167
1301
|
});
|
|
3168
1302
|
}
|
|
3169
1303
|
}
|
|
3170
1304
|
|
|
3171
1305
|
get indent() {
|
|
3172
|
-
return this.#
|
|
1306
|
+
return this.#indent;
|
|
3173
1307
|
}
|
|
3174
1308
|
|
|
3175
1309
|
set indent(indent = 0) {
|
|
@@ -3177,11 +1311,12 @@ class Ora {
|
|
|
3177
1311
|
throw new Error('The `indent` option must be an integer from 0 and up');
|
|
3178
1312
|
}
|
|
3179
1313
|
|
|
3180
|
-
this.#
|
|
1314
|
+
this.#indent = indent;
|
|
1315
|
+
this.#updateLineCount();
|
|
3181
1316
|
}
|
|
3182
1317
|
|
|
3183
1318
|
get interval() {
|
|
3184
|
-
return this.#
|
|
1319
|
+
return this.#initialInterval ?? this.#spinner.interval ?? 100;
|
|
3185
1320
|
}
|
|
3186
1321
|
|
|
3187
1322
|
get spinner() {
|
|
@@ -3190,86 +1325,95 @@ class Ora {
|
|
|
3190
1325
|
|
|
3191
1326
|
set spinner(spinner) {
|
|
3192
1327
|
this.#frameIndex = -1;
|
|
3193
|
-
this.#
|
|
1328
|
+
this.#initialInterval = undefined;
|
|
3194
1329
|
|
|
3195
1330
|
if (typeof spinner === 'object') {
|
|
3196
|
-
if (
|
|
3197
|
-
throw new Error('The given spinner must have a
|
|
3198
|
-
}
|
|
3199
|
-
|
|
3200
|
-
if (spinner.interval !== undefined && !(Number.isInteger(spinner.interval) && spinner.interval > 0)) {
|
|
3201
|
-
throw new Error('`spinner.interval` must be a positive integer if provided');
|
|
1331
|
+
if (spinner.frames === undefined) {
|
|
1332
|
+
throw new Error('The given spinner must have a `frames` property');
|
|
3202
1333
|
}
|
|
3203
1334
|
|
|
3204
1335
|
this.#spinner = spinner;
|
|
3205
1336
|
} else if (!isUnicodeSupported()) {
|
|
3206
|
-
this.#spinner =
|
|
1337
|
+
this.#spinner = cliSpinners.line;
|
|
3207
1338
|
} else if (spinner === undefined) {
|
|
3208
1339
|
// Set default spinner
|
|
3209
|
-
this.#spinner =
|
|
3210
|
-
} else if (spinner !== 'default' &&
|
|
3211
|
-
this.#spinner =
|
|
1340
|
+
this.#spinner = cliSpinners.dots;
|
|
1341
|
+
} else if (spinner !== 'default' && cliSpinners[spinner]) {
|
|
1342
|
+
this.#spinner = cliSpinners[spinner];
|
|
3212
1343
|
} else {
|
|
3213
1344
|
throw new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);
|
|
3214
1345
|
}
|
|
3215
1346
|
}
|
|
3216
1347
|
|
|
3217
1348
|
get text() {
|
|
3218
|
-
return this.#
|
|
1349
|
+
return this.#text;
|
|
3219
1350
|
}
|
|
3220
1351
|
|
|
3221
1352
|
set text(value = '') {
|
|
3222
|
-
this.#
|
|
1353
|
+
this.#text = value;
|
|
1354
|
+
this.#updateLineCount();
|
|
3223
1355
|
}
|
|
3224
1356
|
|
|
3225
1357
|
get prefixText() {
|
|
3226
|
-
return this.#
|
|
1358
|
+
return this.#prefixText;
|
|
3227
1359
|
}
|
|
3228
1360
|
|
|
3229
1361
|
set prefixText(value = '') {
|
|
3230
|
-
this.#
|
|
1362
|
+
this.#prefixText = value;
|
|
1363
|
+
this.#updateLineCount();
|
|
3231
1364
|
}
|
|
3232
1365
|
|
|
3233
1366
|
get suffixText() {
|
|
3234
|
-
return this.#
|
|
1367
|
+
return this.#suffixText;
|
|
3235
1368
|
}
|
|
3236
1369
|
|
|
3237
1370
|
set suffixText(value = '') {
|
|
3238
|
-
this.#
|
|
1371
|
+
this.#suffixText = value;
|
|
1372
|
+
this.#updateLineCount();
|
|
3239
1373
|
}
|
|
3240
1374
|
|
|
3241
1375
|
get isSpinning() {
|
|
3242
1376
|
return this.#id !== undefined;
|
|
3243
1377
|
}
|
|
3244
1378
|
|
|
3245
|
-
#
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
1379
|
+
#getFullPrefixText(prefixText = this.#prefixText, postfix = ' ') {
|
|
1380
|
+
if (typeof prefixText === 'string' && prefixText !== '') {
|
|
1381
|
+
return prefixText + postfix;
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
if (typeof prefixText === 'function') {
|
|
1385
|
+
return prefixText() + postfix;
|
|
3249
1386
|
}
|
|
3250
1387
|
|
|
3251
1388
|
return '';
|
|
3252
1389
|
}
|
|
3253
1390
|
|
|
3254
|
-
#
|
|
3255
|
-
|
|
3256
|
-
|
|
1391
|
+
#getFullSuffixText(suffixText = this.#suffixText, prefix = ' ') {
|
|
1392
|
+
if (typeof suffixText === 'string' && suffixText !== '') {
|
|
1393
|
+
return prefix + suffixText;
|
|
1394
|
+
}
|
|
3257
1395
|
|
|
3258
|
-
|
|
3259
|
-
|
|
1396
|
+
if (typeof suffixText === 'function') {
|
|
1397
|
+
return prefix + suffixText();
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
return '';
|
|
3260
1401
|
}
|
|
3261
1402
|
|
|
3262
|
-
#
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
1403
|
+
#updateLineCount() {
|
|
1404
|
+
const columns = this.#stream.columns ?? 80;
|
|
1405
|
+
const fullPrefixText = this.#getFullPrefixText(this.#prefixText, '-');
|
|
1406
|
+
const fullSuffixText = this.#getFullSuffixText(this.#suffixText, '-');
|
|
1407
|
+
const fullText = ' '.repeat(this.#indent) + fullPrefixText + '--' + this.#text + '--' + fullSuffixText;
|
|
3267
1408
|
|
|
3268
|
-
|
|
1409
|
+
this.#lineCount = 0;
|
|
1410
|
+
for (const line of stripAnsi(fullText).split('\n')) {
|
|
1411
|
+
this.#lineCount += Math.max(1, Math.ceil(stringWidth(line, {countAnsiEscapeCodes: true}) / columns));
|
|
1412
|
+
}
|
|
3269
1413
|
}
|
|
3270
1414
|
|
|
3271
1415
|
get isEnabled() {
|
|
3272
|
-
return this.#
|
|
1416
|
+
return this.#isEnabled && !this.#isSilent;
|
|
3273
1417
|
}
|
|
3274
1418
|
|
|
3275
1419
|
set isEnabled(value) {
|
|
@@ -3277,11 +1421,11 @@ class Ora {
|
|
|
3277
1421
|
throw new TypeError('The `isEnabled` option must be a boolean');
|
|
3278
1422
|
}
|
|
3279
1423
|
|
|
3280
|
-
this.#
|
|
1424
|
+
this.#isEnabled = value;
|
|
3281
1425
|
}
|
|
3282
1426
|
|
|
3283
1427
|
get isSilent() {
|
|
3284
|
-
return this.#
|
|
1428
|
+
return this.#isSilent;
|
|
3285
1429
|
}
|
|
3286
1430
|
|
|
3287
1431
|
set isSilent(value) {
|
|
@@ -3289,15 +1433,16 @@ class Ora {
|
|
|
3289
1433
|
throw new TypeError('The `isSilent` option must be a boolean');
|
|
3290
1434
|
}
|
|
3291
1435
|
|
|
3292
|
-
this.#
|
|
1436
|
+
this.#isSilent = value;
|
|
3293
1437
|
}
|
|
3294
1438
|
|
|
3295
1439
|
frame() {
|
|
3296
|
-
//
|
|
1440
|
+
// Ensure we only update the spinner frame at the wanted interval,
|
|
1441
|
+
// even if the render method is called more often.
|
|
3297
1442
|
const now = Date.now();
|
|
3298
|
-
if (this.#frameIndex === -1 || now - this.#
|
|
3299
|
-
this.#frameIndex =
|
|
3300
|
-
this.#
|
|
1443
|
+
if (this.#frameIndex === -1 || now - this.#lastSpinnerFrameTime >= this.interval) {
|
|
1444
|
+
this.#frameIndex = ++this.#frameIndex % this.#spinner.frames.length;
|
|
1445
|
+
this.#lastSpinnerFrameTime = now;
|
|
3301
1446
|
}
|
|
3302
1447
|
|
|
3303
1448
|
const {frames} = this.#spinner;
|
|
@@ -3307,166 +1452,46 @@ class Ora {
|
|
|
3307
1452
|
frame = chalk[this.color](frame);
|
|
3308
1453
|
}
|
|
3309
1454
|
|
|
3310
|
-
const fullPrefixText = this.#
|
|
1455
|
+
const fullPrefixText = (typeof this.#prefixText === 'string' && this.#prefixText !== '') ? this.#prefixText + ' ' : '';
|
|
3311
1456
|
const fullText = typeof this.text === 'string' ? ' ' + this.text : '';
|
|
3312
|
-
const fullSuffixText = this.#
|
|
1457
|
+
const fullSuffixText = (typeof this.#suffixText === 'string' && this.#suffixText !== '') ? ' ' + this.#suffixText : '';
|
|
3313
1458
|
|
|
3314
1459
|
return fullPrefixText + frame + fullText + fullSuffixText;
|
|
3315
1460
|
}
|
|
3316
1461
|
|
|
3317
1462
|
clear() {
|
|
3318
|
-
if (!this
|
|
1463
|
+
if (!this.#isEnabled || !this.#stream.isTTY) {
|
|
3319
1464
|
return this;
|
|
3320
1465
|
}
|
|
3321
1466
|
|
|
3322
|
-
|
|
3323
|
-
this.#internalWrite(() => {
|
|
3324
|
-
this.#stream.cursorTo(0);
|
|
3325
|
-
|
|
3326
|
-
for (let index = 0; index < this.#linesToClear; index++) {
|
|
3327
|
-
if (index > 0) {
|
|
3328
|
-
this.#stream.moveCursor(0, -1);
|
|
3329
|
-
}
|
|
1467
|
+
this.#stream.cursorTo(0);
|
|
3330
1468
|
|
|
3331
|
-
|
|
1469
|
+
for (let index = 0; index < this.#linesToClear; index++) {
|
|
1470
|
+
if (index > 0) {
|
|
1471
|
+
this.#stream.moveCursor(0, -1);
|
|
3332
1472
|
}
|
|
3333
1473
|
|
|
3334
|
-
|
|
3335
|
-
this.#stream.cursorTo(this.#options.indent);
|
|
3336
|
-
}
|
|
3337
|
-
});
|
|
3338
|
-
|
|
3339
|
-
this.#linesToClear = 0;
|
|
3340
|
-
|
|
3341
|
-
return this;
|
|
3342
|
-
}
|
|
3343
|
-
|
|
3344
|
-
// Helper to hook a single stream
|
|
3345
|
-
#hookStream(stream) {
|
|
3346
|
-
if (!stream || this.#hookedStreams.has(stream) || !stream.isTTY || typeof stream.write !== 'function') {
|
|
3347
|
-
return;
|
|
3348
|
-
}
|
|
3349
|
-
|
|
3350
|
-
// Detect concurrent spinners
|
|
3351
|
-
if (activeHooksPerStream.has(stream)) {
|
|
3352
|
-
console.warn('[ora] Multiple concurrent spinners detected. This may cause visual corruption. Use one spinner at a time.');
|
|
3353
|
-
}
|
|
3354
|
-
|
|
3355
|
-
const originalWrite = stream.write;
|
|
3356
|
-
this.#hookedStreams.set(stream, originalWrite);
|
|
3357
|
-
activeHooksPerStream.set(stream, this);
|
|
3358
|
-
stream.write = (chunk, encoding, callback) => this.#hookedWrite(stream, originalWrite, chunk, encoding, callback);
|
|
3359
|
-
}
|
|
3360
|
-
|
|
3361
|
-
/**
|
|
3362
|
-
Intercept stream writes while spinner is active to handle external writes cleanly without visual corruption.
|
|
3363
|
-
Hooks process stdio streams and the active spinner stream so console.log(), console.error(), and direct writes stay tidy.
|
|
3364
|
-
*/
|
|
3365
|
-
#installHook() {
|
|
3366
|
-
if (!this.isEnabled || this.#hookedStreams.size > 0) {
|
|
3367
|
-
return;
|
|
3368
|
-
}
|
|
3369
|
-
|
|
3370
|
-
const streamsToHook = new Set([this.#stream, process__default.stdout, process__default.stderr]);
|
|
3371
|
-
|
|
3372
|
-
for (const stream of streamsToHook) {
|
|
3373
|
-
this.#hookStream(stream);
|
|
3374
|
-
}
|
|
3375
|
-
}
|
|
3376
|
-
|
|
3377
|
-
#uninstallHook() {
|
|
3378
|
-
for (const [stream, originalWrite] of this.#hookedStreams) {
|
|
3379
|
-
stream.write = originalWrite;
|
|
3380
|
-
if (activeHooksPerStream.get(stream) === this) {
|
|
3381
|
-
activeHooksPerStream.delete(stream);
|
|
3382
|
-
}
|
|
3383
|
-
}
|
|
3384
|
-
|
|
3385
|
-
this.#hookedStreams.clear();
|
|
3386
|
-
}
|
|
3387
|
-
|
|
3388
|
-
// eslint-disable-next-line max-params -- Need stream and originalWrite for multi-stream support
|
|
3389
|
-
#hookedWrite(stream, originalWrite, chunk, encoding, callback) {
|
|
3390
|
-
// Handle both write(chunk, encoding, callback) and write(chunk, callback) signatures
|
|
3391
|
-
if (typeof encoding === 'function') {
|
|
3392
|
-
callback = encoding;
|
|
3393
|
-
encoding = undefined;
|
|
1474
|
+
this.#stream.clearLine(1);
|
|
3394
1475
|
}
|
|
3395
1476
|
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
return originalWrite.call(stream, chunk, encoding, callback);
|
|
1477
|
+
if (this.#indent || this.lastIndent !== this.#indent) {
|
|
1478
|
+
this.#stream.cursorTo(this.#indent);
|
|
3399
1479
|
}
|
|
3400
1480
|
|
|
3401
|
-
|
|
3402
|
-
this
|
|
3403
|
-
|
|
3404
|
-
const chunkString = this.#stringifyChunk(chunk, encoding);
|
|
3405
|
-
const chunkTerminatesLine = this.#chunkTerminatesLine(chunkString);
|
|
3406
|
-
|
|
3407
|
-
const writeResult = originalWrite.call(stream, chunk, encoding, callback);
|
|
3408
|
-
|
|
3409
|
-
// Schedule or clear render deferral based on chunk content
|
|
3410
|
-
if (chunkTerminatesLine) {
|
|
3411
|
-
this.#clearRenderDeferral();
|
|
3412
|
-
} else if (chunkString.length > 0) {
|
|
3413
|
-
this.#scheduleRenderDeferral();
|
|
3414
|
-
}
|
|
3415
|
-
|
|
3416
|
-
// Re-render spinner below the new output if still spinning and not deferred
|
|
3417
|
-
if (this.isSpinning && !this.#deferRenderTimer) {
|
|
3418
|
-
this.render();
|
|
3419
|
-
}
|
|
1481
|
+
this.lastIndent = this.#indent;
|
|
1482
|
+
this.#linesToClear = 0;
|
|
3420
1483
|
|
|
3421
|
-
return
|
|
1484
|
+
return this;
|
|
3422
1485
|
}
|
|
3423
1486
|
|
|
3424
1487
|
render() {
|
|
3425
|
-
if (
|
|
1488
|
+
if (this.#isSilent) {
|
|
3426
1489
|
return this;
|
|
3427
1490
|
}
|
|
3428
1491
|
|
|
3429
|
-
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
try {
|
|
3433
|
-
if (useSynchronizedOutput) {
|
|
3434
|
-
this.#internalWrite(() => this.#stream.write(SYNCHRONIZED_OUTPUT_ENABLE));
|
|
3435
|
-
shouldDisableSynchronizedOutput = true;
|
|
3436
|
-
}
|
|
3437
|
-
|
|
3438
|
-
this.clear();
|
|
3439
|
-
|
|
3440
|
-
let frameContent = this.frame();
|
|
3441
|
-
const columns = this.#stream.columns ?? 80;
|
|
3442
|
-
const actualLineCount = this.#computeLineCountFrom(frameContent, columns);
|
|
3443
|
-
|
|
3444
|
-
// If content would exceed viewport height, truncate it to prevent garbage
|
|
3445
|
-
const consoleHeight = this.#stream.rows;
|
|
3446
|
-
if (consoleHeight && consoleHeight > 1 && actualLineCount > consoleHeight) {
|
|
3447
|
-
const lines = frameContent.split('\n');
|
|
3448
|
-
const maxLines = consoleHeight - 1; // Reserve one line for truncation message
|
|
3449
|
-
frameContent = [...lines.slice(0, maxLines), '... (content truncated to fit terminal)'].join('\n');
|
|
3450
|
-
}
|
|
3451
|
-
|
|
3452
|
-
const canContinue = this.#internalWrite(() => this.#stream.write(frameContent));
|
|
3453
|
-
|
|
3454
|
-
// Handle backpressure - pause rendering if stream buffer is full
|
|
3455
|
-
if (canContinue === false && this.#stream.isTTY) {
|
|
3456
|
-
this.#drainHandler = () => {
|
|
3457
|
-
this.#drainHandler = undefined;
|
|
3458
|
-
this.#tryRender();
|
|
3459
|
-
};
|
|
3460
|
-
|
|
3461
|
-
this.#stream.once('drain', this.#drainHandler);
|
|
3462
|
-
}
|
|
3463
|
-
|
|
3464
|
-
this.#linesToClear = this.#computeLineCountFrom(frameContent, columns);
|
|
3465
|
-
} finally {
|
|
3466
|
-
if (shouldDisableSynchronizedOutput) {
|
|
3467
|
-
this.#internalWrite(() => this.#stream.write(SYNCHRONIZED_OUTPUT_DISABLE));
|
|
3468
|
-
}
|
|
3469
|
-
}
|
|
1492
|
+
this.clear();
|
|
1493
|
+
this.#stream.write(this.frame());
|
|
1494
|
+
this.#linesToClear = this.#lineCount;
|
|
3470
1495
|
|
|
3471
1496
|
return this;
|
|
3472
1497
|
}
|
|
@@ -3476,16 +1501,13 @@ class Ora {
|
|
|
3476
1501
|
this.text = text;
|
|
3477
1502
|
}
|
|
3478
1503
|
|
|
3479
|
-
if (this
|
|
1504
|
+
if (this.#isSilent) {
|
|
3480
1505
|
return this;
|
|
3481
1506
|
}
|
|
3482
1507
|
|
|
3483
|
-
if (!this
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
3487
|
-
if (line.trim() !== '') {
|
|
3488
|
-
this.#internalWrite(() => this.#stream.write(line + '\n'));
|
|
1508
|
+
if (!this.#isEnabled) {
|
|
1509
|
+
if (this.text) {
|
|
1510
|
+
this.#stream.write(`- ${this.text}\n`);
|
|
3489
1511
|
}
|
|
3490
1512
|
|
|
3491
1513
|
return this;
|
|
@@ -3500,11 +1522,10 @@ class Ora {
|
|
|
3500
1522
|
}
|
|
3501
1523
|
|
|
3502
1524
|
if (this.#options.discardStdin && process__default.stdin.isTTY) {
|
|
3503
|
-
stdinDiscarder$1.start();
|
|
3504
1525
|
this.#isDiscardingStdin = true;
|
|
1526
|
+
stdinDiscarder.start();
|
|
3505
1527
|
}
|
|
3506
1528
|
|
|
3507
|
-
this.#installHook();
|
|
3508
1529
|
this.render();
|
|
3509
1530
|
this.#id = setInterval(this.render.bind(this), this.interval);
|
|
3510
1531
|
|
|
@@ -3512,65 +1533,63 @@ class Ora {
|
|
|
3512
1533
|
}
|
|
3513
1534
|
|
|
3514
1535
|
stop() {
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
this.#frameIndex = -1;
|
|
3518
|
-
this.#lastFrameTime = 0;
|
|
3519
|
-
|
|
3520
|
-
this.#clearRenderDeferral();
|
|
3521
|
-
this.#uninstallHook();
|
|
3522
|
-
|
|
3523
|
-
// Clean up drain handler if it exists
|
|
3524
|
-
if (this.#drainHandler) {
|
|
3525
|
-
this.#stream.removeListener('drain', this.#drainHandler);
|
|
3526
|
-
this.#drainHandler = undefined;
|
|
1536
|
+
if (!this.#isEnabled) {
|
|
1537
|
+
return this;
|
|
3527
1538
|
}
|
|
3528
1539
|
|
|
3529
|
-
|
|
3530
|
-
|
|
3531
|
-
|
|
3532
|
-
|
|
3533
|
-
|
|
1540
|
+
clearInterval(this.#id);
|
|
1541
|
+
this.#id = undefined;
|
|
1542
|
+
this.#frameIndex = 0;
|
|
1543
|
+
this.clear();
|
|
1544
|
+
if (this.#options.hideCursor) {
|
|
1545
|
+
cliCursor.show(this.#stream);
|
|
3534
1546
|
}
|
|
3535
1547
|
|
|
3536
|
-
if (this.#isDiscardingStdin) {
|
|
1548
|
+
if (this.#options.discardStdin && process__default.stdin.isTTY && this.#isDiscardingStdin) {
|
|
1549
|
+
stdinDiscarder.stop();
|
|
3537
1550
|
this.#isDiscardingStdin = false;
|
|
3538
|
-
stdinDiscarder$1.stop();
|
|
3539
1551
|
}
|
|
3540
1552
|
|
|
3541
1553
|
return this;
|
|
3542
1554
|
}
|
|
3543
1555
|
|
|
3544
1556
|
succeed(text) {
|
|
3545
|
-
return this.stopAndPersist({symbol: success, text});
|
|
1557
|
+
return this.stopAndPersist({symbol: logSymbols.success, text});
|
|
3546
1558
|
}
|
|
3547
1559
|
|
|
3548
1560
|
fail(text) {
|
|
3549
|
-
return this.stopAndPersist({symbol: error, text});
|
|
1561
|
+
return this.stopAndPersist({symbol: logSymbols.error, text});
|
|
3550
1562
|
}
|
|
3551
1563
|
|
|
3552
1564
|
warn(text) {
|
|
3553
|
-
return this.stopAndPersist({symbol: warning, text});
|
|
1565
|
+
return this.stopAndPersist({symbol: logSymbols.warning, text});
|
|
3554
1566
|
}
|
|
3555
1567
|
|
|
3556
1568
|
info(text) {
|
|
3557
|
-
return this.stopAndPersist({symbol: info, text});
|
|
1569
|
+
return this.stopAndPersist({symbol: logSymbols.info, text});
|
|
3558
1570
|
}
|
|
3559
1571
|
|
|
3560
1572
|
stopAndPersist(options = {}) {
|
|
3561
|
-
if (this
|
|
1573
|
+
if (this.#isSilent) {
|
|
3562
1574
|
return this;
|
|
3563
1575
|
}
|
|
3564
1576
|
|
|
3565
|
-
const
|
|
1577
|
+
const prefixText = options.prefixText ?? this.#prefixText;
|
|
1578
|
+
const fullPrefixText = this.#getFullPrefixText(prefixText, ' ');
|
|
1579
|
+
|
|
1580
|
+
const symbolText = options.symbol ?? ' ';
|
|
1581
|
+
|
|
3566
1582
|
const text = options.text ?? this.text;
|
|
3567
|
-
const
|
|
3568
|
-
const
|
|
1583
|
+
const separatorText = symbolText ? ' ' : '';
|
|
1584
|
+
const fullText = (typeof text === 'string') ? separatorText + text : '';
|
|
1585
|
+
|
|
1586
|
+
const suffixText = options.suffixText ?? this.#suffixText;
|
|
1587
|
+
const fullSuffixText = this.#getFullSuffixText(suffixText, ' ');
|
|
3569
1588
|
|
|
3570
|
-
const textToWrite =
|
|
1589
|
+
const textToWrite = fullPrefixText + symbolText + fullText + fullSuffixText + '\n';
|
|
3571
1590
|
|
|
3572
1591
|
this.stop();
|
|
3573
|
-
this.#
|
|
1592
|
+
this.#stream.write(textToWrite);
|
|
3574
1593
|
|
|
3575
1594
|
return this;
|
|
3576
1595
|
}
|
|
@@ -3580,4 +1599,4 @@ function ora(options) {
|
|
|
3580
1599
|
return new Ora(options);
|
|
3581
1600
|
}
|
|
3582
1601
|
|
|
3583
|
-
export { ora as default, spinners };
|
|
1602
|
+
export { ora as default, cliSpinners as spinners };
|