@indodev/toolkit 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -448,6 +448,741 @@ var ABBREVIATIONS = {
448
448
  "m3.": "meter kubik",
449
449
  "ha.": "hektar"
450
450
  };
451
+ var PROFANITY = [
452
+ "anjing",
453
+ "babi",
454
+ "bangsat",
455
+ "bajingan",
456
+ "brengsek",
457
+ "goblok",
458
+ "tolol",
459
+ "idiot",
460
+ "perek",
461
+ "jablay",
462
+ "kontol",
463
+ "memek",
464
+ "ngewe",
465
+ "puki",
466
+ "jembut",
467
+ "asu",
468
+ "itil",
469
+ "lanjiao",
470
+ "pantek",
471
+ "anying",
472
+ "anjrit"
473
+ ];
474
+ var STOPWORDS = [
475
+ "ada",
476
+ "adalah",
477
+ "adanya",
478
+ "adapun",
479
+ "agak",
480
+ "agaknya",
481
+ "agar",
482
+ "akan",
483
+ "akankah",
484
+ "akhir",
485
+ "akhiri",
486
+ "akhirnya",
487
+ "aku",
488
+ "akulah",
489
+ "amat",
490
+ "amatlah",
491
+ "anda",
492
+ "andalah",
493
+ "antar",
494
+ "antara",
495
+ "antaranya",
496
+ "apa",
497
+ "apaan",
498
+ "apabila",
499
+ "apakah",
500
+ "apalagi",
501
+ "apatah",
502
+ "artinya",
503
+ "asal",
504
+ "asalkan",
505
+ "atas",
506
+ "atau",
507
+ "ataukah",
508
+ "ataupun",
509
+ "awal",
510
+ "awalnya",
511
+ "bagai",
512
+ "bagaikan",
513
+ "bagaimana",
514
+ "bagaimanakah",
515
+ "bagaimanapun",
516
+ "bagi",
517
+ "bagian",
518
+ "bahkan",
519
+ "bahwa",
520
+ "bahwasanya",
521
+ "baik",
522
+ "bakal",
523
+ "bakalan",
524
+ "balik",
525
+ "banyak",
526
+ "bapak",
527
+ "baru",
528
+ "bawah",
529
+ "beberapa",
530
+ "begini",
531
+ "beginian",
532
+ "beginikah",
533
+ "beginilah",
534
+ "begitu",
535
+ "begitukah",
536
+ "begitulah",
537
+ "begitupun",
538
+ "bekerja",
539
+ "belakang",
540
+ "belakangan",
541
+ "belum",
542
+ "belumlah",
543
+ "benar",
544
+ "benarkah",
545
+ "benarlah",
546
+ "berada",
547
+ "berakhir",
548
+ "berakhirlah",
549
+ "berakhirnya",
550
+ "berapa",
551
+ "berapakah",
552
+ "berapalah",
553
+ "berapapun",
554
+ "berarti",
555
+ "berawal",
556
+ "berbagai",
557
+ "berikut",
558
+ "berikutnya",
559
+ "berjumlah",
560
+ "berkali-kali",
561
+ "berkata",
562
+ "berkeinginan",
563
+ "berkenaan",
564
+ "berlainan",
565
+ "berlalu",
566
+ "berlangsung",
567
+ "berlebihan",
568
+ "bermacam",
569
+ "bermacam-macam",
570
+ "bermaksud",
571
+ "bermula",
572
+ "bersama",
573
+ "bersama-sama",
574
+ "bersiap",
575
+ "bersiap-siap",
576
+ "bertanya",
577
+ "bertanya-tanya",
578
+ "berturut",
579
+ "berturut-turut",
580
+ "bertutur",
581
+ "berujar",
582
+ "berupa",
583
+ "besar",
584
+ "betul",
585
+ "betulkah",
586
+ "biasa",
587
+ "biasanya",
588
+ "bila",
589
+ "bilakah",
590
+ "bisa",
591
+ "bisakah",
592
+ "boleh",
593
+ "bolehkah",
594
+ "bolehlah",
595
+ "buat",
596
+ "bukan",
597
+ "bukankah",
598
+ "bukanlah",
599
+ "bukannya",
600
+ "bulan",
601
+ "bung",
602
+ "cara",
603
+ "caranya",
604
+ "cukup",
605
+ "cukupkah",
606
+ "cukuplah",
607
+ "cuma",
608
+ "dahulu",
609
+ "dalam",
610
+ "dan",
611
+ "dapat",
612
+ "dari",
613
+ "daripada",
614
+ "datang",
615
+ "dekat",
616
+ "demi",
617
+ "demikian",
618
+ "demikianlah",
619
+ "dengan",
620
+ "depan",
621
+ "di",
622
+ "dia",
623
+ "diakhiri",
624
+ "diakhirinya",
625
+ "dialah",
626
+ "diantara",
627
+ "diantaranya",
628
+ "diberi",
629
+ "diberikan",
630
+ "diberikannya",
631
+ "dibuat",
632
+ "dibuatnya",
633
+ "didapat",
634
+ "didatangkan",
635
+ "digunakan",
636
+ "diibaratkan",
637
+ "diingat",
638
+ "diingatkan",
639
+ "diinginkan",
640
+ "dijawab",
641
+ "dijelaskan",
642
+ "dijelaskannya",
643
+ "dikarenakan",
644
+ "dikatakan",
645
+ "dikatakannya",
646
+ "dikerjakan",
647
+ "diketahui",
648
+ "diketahuinya",
649
+ "dikira",
650
+ "dilakukan",
651
+ "dilalui",
652
+ "dilihat",
653
+ "dimaksud",
654
+ "dimaksudkan",
655
+ "dimaksudkannya",
656
+ "dimana",
657
+ "dimanalah",
658
+ "dimulai",
659
+ "dimulailah",
660
+ "dimulainya",
661
+ "diminta",
662
+ "dimintai",
663
+ "dimisalkan",
664
+ "dimungkinkan",
665
+ "dini",
666
+ "dipastikan",
667
+ "diperbuat",
668
+ "diperbuatnya",
669
+ "dipergunakan",
670
+ "diperkirakan",
671
+ "diperlihatkan",
672
+ "diperlukan",
673
+ "diperlukannya",
674
+ "dipersoalkan",
675
+ "dipertanyakan",
676
+ "dipunyai",
677
+ "diri",
678
+ "dirinya",
679
+ "disampaikan",
680
+ "disebut",
681
+ "disebutkan",
682
+ "disebutkannya",
683
+ "disini",
684
+ "disinilah",
685
+ "disitulah",
686
+ "diterangkan",
687
+ "diterangkannya",
688
+ "diteruskan",
689
+ "ditujukan",
690
+ "ditunjuk",
691
+ "ditunjuki",
692
+ "ditunjukkan",
693
+ "ditunjukkannya",
694
+ "ditunjuknya",
695
+ "dituturkan",
696
+ "dituturkannya",
697
+ "diucapkan",
698
+ "diucapkannya",
699
+ "diungkapkan",
700
+ "dua",
701
+ "dulu",
702
+ "empat",
703
+ "enggak",
704
+ "enggaknya",
705
+ "entah",
706
+ "entahlah",
707
+ "guna",
708
+ "gunakan",
709
+ "hal",
710
+ "hampir",
711
+ "hanya",
712
+ "hanyalah",
713
+ "hari",
714
+ "harus",
715
+ "haruslah",
716
+ "harusnya",
717
+ "hendak",
718
+ "hendaklah",
719
+ "hendaknya",
720
+ "hingga",
721
+ "ia",
722
+ "ialah",
723
+ "ibarat",
724
+ "ibaratkan",
725
+ "ibaratnya",
726
+ "ibu",
727
+ "ikut",
728
+ "ingat",
729
+ "ingat-ingat",
730
+ "ingin",
731
+ "inginkah",
732
+ "inginkan",
733
+ "ini",
734
+ "inikah",
735
+ "inilah",
736
+ "itu",
737
+ "itukah",
738
+ "itulah",
739
+ "jadi",
740
+ "jadilah",
741
+ "jadinya",
742
+ "jangan",
743
+ "jangankan",
744
+ "janganlah",
745
+ "jauh",
746
+ "jawab",
747
+ "jawaban",
748
+ "jawabnya",
749
+ "jelas",
750
+ "jelaskan",
751
+ "jelaslah",
752
+ "jelasnya",
753
+ "jika",
754
+ "jikalau",
755
+ "juga",
756
+ "jumlah",
757
+ "jumlahnya",
758
+ "justru",
759
+ "kala",
760
+ "kalau",
761
+ "kalaulah",
762
+ "kalaupun",
763
+ "kali",
764
+ "kalian",
765
+ "kami",
766
+ "kamilah",
767
+ "kamu",
768
+ "kamulah",
769
+ "kan",
770
+ "kapan",
771
+ "kapankah",
772
+ "kapanpun",
773
+ "karena",
774
+ "karenanya",
775
+ "ke",
776
+ "keadaan",
777
+ "kebetulan",
778
+ "kecil",
779
+ "kedua",
780
+ "keduanya",
781
+ "keinginan",
782
+ "kelak",
783
+ "kelihatan",
784
+ "kelihatannya",
785
+ "kelima",
786
+ "keluar",
787
+ "kembali",
788
+ "kemudian",
789
+ "kemungkinan",
790
+ "kemungkinannya",
791
+ "kenapa",
792
+ "kepada",
793
+ "kepadanya",
794
+ "kesampaian",
795
+ "keseluruhan",
796
+ "keseluruhannya",
797
+ "keterlaluan",
798
+ "ketika",
799
+ "khususnya",
800
+ "kini",
801
+ "kinilah",
802
+ "kira",
803
+ "kira-kira",
804
+ "kiranya",
805
+ "kita",
806
+ "kitalah",
807
+ "kok",
808
+ "kurang",
809
+ "lagi",
810
+ "lagian",
811
+ "lah",
812
+ "lain",
813
+ "lainnya",
814
+ "lalu",
815
+ "lama",
816
+ "lamanya",
817
+ "lanjut",
818
+ "lanjutnya",
819
+ "lebih",
820
+ "lewat",
821
+ "luar",
822
+ "macam",
823
+ "maka",
824
+ "makanya",
825
+ "makin",
826
+ "malah",
827
+ "malahan",
828
+ "mampu",
829
+ "mampukah",
830
+ "mana",
831
+ "manakala",
832
+ "manalagi",
833
+ "masih",
834
+ "masihkah",
835
+ "masing",
836
+ "masing-masing",
837
+ "mau",
838
+ "maupun",
839
+ "melainkan",
840
+ "melakukan",
841
+ "melalui",
842
+ "melihat",
843
+ "melihatnya",
844
+ "memang",
845
+ "memastikan",
846
+ "memberi",
847
+ "memberikan",
848
+ "membuat",
849
+ "memerlukan",
850
+ "memihak",
851
+ "meminta",
852
+ "memisalkan",
853
+ "memperbuat",
854
+ "mempergunakan",
855
+ "memperkirakan",
856
+ "memperlihatkan",
857
+ "mempersiapkan",
858
+ "mempersoalkan",
859
+ "mempertanyakan",
860
+ "mempunyai",
861
+ "memulai",
862
+ "memungkinkan",
863
+ "memutuskan",
864
+ "menanti",
865
+ "menanti-nanti",
866
+ "menantikan",
867
+ "menunjuk",
868
+ "menunjuknya",
869
+ "menuju",
870
+ "menurut",
871
+ "menurutnya",
872
+ "menurutmu",
873
+ "menurutku",
874
+ "menurutnya",
875
+ "menurut mereka",
876
+ "menyampaikan",
877
+ "menyebut",
878
+ "menyebutkan",
879
+ "menjelaskan",
880
+ "menjadi",
881
+ "menjadikan",
882
+ "menjalani",
883
+ "menjelang",
884
+ "menjawab",
885
+ "menunjukkan",
886
+ "menuangkan",
887
+ "menulis",
888
+ "menyatakan",
889
+ "merupakan",
890
+ "mereka",
891
+ "merekalah",
892
+ "meski",
893
+ "meskipun",
894
+ "mula",
895
+ "mulai",
896
+ "mulailah",
897
+ "mulanya",
898
+ "mungkin",
899
+ "mungkinkah",
900
+ "nah",
901
+ "naik",
902
+ "namun",
903
+ "nanti",
904
+ "nantinya",
905
+ "nyaris",
906
+ "oleh",
907
+ "olehnya",
908
+ "orang",
909
+ "pada",
910
+ "padahal",
911
+ "padanya",
912
+ "pakai",
913
+ "paling",
914
+ "panjang",
915
+ "pantas",
916
+ "para",
917
+ "pasti",
918
+ "pastilah",
919
+ "pagi",
920
+ "per",
921
+ "pernah",
922
+ "persoalan",
923
+ "pertama",
924
+ "pertama-tama",
925
+ "perlu",
926
+ "perlukah",
927
+ "perlulah",
928
+ "pernah",
929
+ "pihak",
930
+ "pihaknya",
931
+ "pukul",
932
+ "pula",
933
+ "pun",
934
+ "punya",
935
+ "rasa",
936
+ "rasanya",
937
+ "rata",
938
+ "rupanya",
939
+ "saat",
940
+ "saatnya",
941
+ "saja",
942
+ "sajalah",
943
+ "salam",
944
+ "saling",
945
+ "sama",
946
+ "sama-sama",
947
+ "sambil",
948
+ "sampai",
949
+ "sampai-sampai",
950
+ "sampaikan",
951
+ "sana",
952
+ "sangat",
953
+ "sangatlah",
954
+ "satu",
955
+ "saya",
956
+ "sayalah",
957
+ "sayang",
958
+ "seperti",
959
+ "seperti-itu",
960
+ "sepura",
961
+ "sebab",
962
+ "sebabnya",
963
+ "sebagai",
964
+ "sebagaimana",
965
+ "sebagainya",
966
+ "sebagian",
967
+ "sebaik",
968
+ "sebaik-baiknya",
969
+ "sebaiknya",
970
+ "sebaliknya",
971
+ "sebanyak",
972
+ "sebegini",
973
+ "sebegitu",
974
+ "sebelum",
975
+ "sebelumnya",
976
+ "sebenarnya",
977
+ "seberapa",
978
+ "sebesar",
979
+ "sebetulnya",
980
+ "sebisanya",
981
+ "sebuah",
982
+ "sebut",
983
+ "sebutkan",
984
+ "sebutnya",
985
+ "secara",
986
+ "secukupnya",
987
+ "sedang",
988
+ "sedangkan",
989
+ "sedikit",
990
+ "sedikitnya",
991
+ "sedemikian",
992
+ "sediakala",
993
+ "sedikit",
994
+ "sedikitnya",
995
+ "segala",
996
+ "segalanya",
997
+ "segera",
998
+ "seharusnya",
999
+ "sehingga",
1000
+ "seingat",
1001
+ "sejak",
1002
+ "sejauh",
1003
+ "sejenak",
1004
+ "sejumlah",
1005
+ "sekali",
1006
+ "sekali-kali",
1007
+ "sekalian",
1008
+ "sekaligus",
1009
+ "sekalipun",
1010
+ "sekarang",
1011
+ "sekaranglah",
1012
+ "sekecil",
1013
+ "seketika",
1014
+ "sekiranya",
1015
+ "sekitar",
1016
+ "sekitarnya",
1017
+ "sekurang",
1018
+ "sekurangnya",
1019
+ "sela",
1020
+ "selalu",
1021
+ "selama",
1022
+ "selama-lamanya",
1023
+ "selamanya",
1024
+ "selanjutnya",
1025
+ "seluruh",
1026
+ "seluruhnya",
1027
+ "semacam",
1028
+ "semakin",
1029
+ "semampu",
1030
+ "semampunya",
1031
+ "semasa",
1032
+ "semata",
1033
+ "semata-mata",
1034
+ "semaunya",
1035
+ "sementara",
1036
+ "semisal",
1037
+ "semisalnya",
1038
+ "sempat",
1039
+ "semua",
1040
+ "semuanya",
1041
+ "semula",
1042
+ "sendiri",
1043
+ "sendirinya",
1044
+ "seolah",
1045
+ "seolah-olah",
1046
+ "seorang",
1047
+ "sepanjang",
1048
+ "sepantasnya",
1049
+ "sepantasnyalah",
1050
+ "seperempat",
1051
+ "seperti",
1052
+ "sepertinya",
1053
+ "sepihak",
1054
+ "sepuluh",
1055
+ "seratus",
1056
+ "seribu",
1057
+ "sering",
1058
+ "seringnya",
1059
+ "serta",
1060
+ "serupa",
1061
+ "sesaat",
1062
+ "sesama",
1063
+ "sesampai",
1064
+ "sesampainya",
1065
+ "sesegera",
1066
+ "sesekali",
1067
+ "seseorang",
1068
+ "sesuatu",
1069
+ "sesuatunya",
1070
+ "sesudah",
1071
+ "sesudahnya",
1072
+ "setelah",
1073
+ "setempat",
1074
+ "setengah",
1075
+ "seterusnya",
1076
+ "setiap",
1077
+ "setidaknya",
1078
+ "setinggi",
1079
+ "seusai",
1080
+ "sewaktu",
1081
+ "siap",
1082
+ "siapa",
1083
+ "siapakah",
1084
+ "siapapun",
1085
+ "sini",
1086
+ "sinilah",
1087
+ "situ",
1088
+ "situlah",
1089
+ "suatu",
1090
+ "sudah",
1091
+ "sudahkah",
1092
+ "sudahlah",
1093
+ "supaya",
1094
+ "tadi",
1095
+ "tadinya",
1096
+ "tahu",
1097
+ "tak",
1098
+ "tambah",
1099
+ "tambahnya",
1100
+ "tampak",
1101
+ "tampaknya",
1102
+ "tandas",
1103
+ "tandasnya",
1104
+ "tanpa",
1105
+ "tanya",
1106
+ "tanyakan",
1107
+ "tanyanya",
1108
+ "tapi",
1109
+ "tegas",
1110
+ "tegasnya",
1111
+ "telah",
1112
+ "tempat",
1113
+ "tengah",
1114
+ "tentang",
1115
+ "tentu",
1116
+ "tentulah",
1117
+ "tentunya",
1118
+ "tepat",
1119
+ "terakhir",
1120
+ "terasa",
1121
+ "terbanyak",
1122
+ "terdahulu",
1123
+ "terdapat",
1124
+ "terdiri",
1125
+ "terdiri-dari",
1126
+ "terhadap",
1127
+ "terhadapnya",
1128
+ "teringat",
1129
+ "teringat-ingat",
1130
+ "terjadi",
1131
+ "terjadilah",
1132
+ "terjadinya",
1133
+ "terkira",
1134
+ "terlalu",
1135
+ "terlebih",
1136
+ "terlihat",
1137
+ "termasuk",
1138
+ "ternyata",
1139
+ "tersampaikan",
1140
+ "tersebut",
1141
+ "tersebutlah",
1142
+ "tertentu",
1143
+ "tertuju",
1144
+ "terus",
1145
+ "terutama",
1146
+ "tetap",
1147
+ "tetapi",
1148
+ "tiap",
1149
+ "tiba",
1150
+ "tiba-tiba",
1151
+ "tidak",
1152
+ "tidakkah",
1153
+ "tidaklah",
1154
+ "tiga",
1155
+ "tadi",
1156
+ "tadinya",
1157
+ "tinggi",
1158
+ "toh",
1159
+ "tuju",
1160
+ "tunjuk",
1161
+ "turut",
1162
+ "tutur",
1163
+ "tuturnya",
1164
+ "ucap",
1165
+ "ucapnya",
1166
+ "ujar",
1167
+ "ujarnya",
1168
+ "umumnya",
1169
+ "ungkap",
1170
+ "ungkapnya",
1171
+ "untuk",
1172
+ "untaian",
1173
+ "usai",
1174
+ "usah",
1175
+ "waduh",
1176
+ "wah",
1177
+ "wahai",
1178
+ "walau",
1179
+ "walaupun",
1180
+ "wong",
1181
+ "yaitu",
1182
+ "yakin",
1183
+ "yakni",
1184
+ "yang"
1185
+ ];
451
1186
 
452
1187
  // src/text/capitalization.ts
453
1188
  function capitalize(text) {
@@ -785,6 +1520,78 @@ function contractAbbreviation(text, options) {
785
1520
  return result;
786
1521
  }
787
1522
 
1523
+ // src/text/filter.ts
1524
+ function profanityFilter(text, mask = "*") {
1525
+ let filtered = text;
1526
+ PROFANITY.forEach((word) => {
1527
+ const regex = new RegExp(`\\b${word}\\b`, "gi");
1528
+ filtered = filtered.replace(regex, mask.repeat(word.length));
1529
+ });
1530
+ return filtered;
1531
+ }
1532
+ function removeStopwords(text) {
1533
+ const words = text.split(/\s+/);
1534
+ const filtered = words.filter(
1535
+ (word) => !STOPWORDS.includes(word.toLowerCase())
1536
+ );
1537
+ return filtered.join(" ");
1538
+ }
1539
+
1540
+ // src/text/normalization.ts
1541
+ var INFORMAL_MAP = {
1542
+ gw: "saya",
1543
+ gua: "saya",
1544
+ lu: "kamu",
1545
+ lo: "kamu",
1546
+ elo: "kamu",
1547
+ lagi: "sedang",
1548
+ gue: "saya",
1549
+ gwe: "saya",
1550
+ gak: "tidak",
1551
+ ga: "tidak",
1552
+ nggak: "tidak",
1553
+ kalo: "kalau",
1554
+ karna: "karena",
1555
+ tapi: "tetapi",
1556
+ udah: "sudah",
1557
+ dah: "sudah",
1558
+ aja: "saja",
1559
+ banget: "sekali",
1560
+ emang: "memang",
1561
+ pake: "pakai",
1562
+ bikin: "membuat",
1563
+ kasih: "memberi",
1564
+ dapet: "dapat",
1565
+ liat: "lihat",
1566
+ ngasih: "memberi",
1567
+ nyari: "mencari",
1568
+ nanya: "bertanya",
1569
+ bilang: "berkata"
1570
+ };
1571
+ function toFormal(text) {
1572
+ const words = text.split(/\s+/);
1573
+ const formalized = words.map((word) => {
1574
+ const lower = word.toLowerCase().replace(/[^\w]/g, "");
1575
+ const formal = INFORMAL_MAP[lower];
1576
+ if (formal) {
1577
+ if (word[0] === word[0].toUpperCase()) {
1578
+ return formal.charAt(0).toUpperCase() + formal.slice(1);
1579
+ }
1580
+ return formal;
1581
+ }
1582
+ return word;
1583
+ });
1584
+ return formalized.join(" ");
1585
+ }
1586
+ function isAlay(text) {
1587
+ if (!text) return false;
1588
+ const alternatingCaps = /([a-z][A-Z][a-z]|[A-Z][a-z][A-Z])/.test(text);
1589
+ const numberSub = /\b\w*[0431572]\w*\b/.test(text);
1590
+ const qSub = /q/i.test(text) && !/u/i.test(text);
1591
+ const excessiveChars = /(.)\1{2,}/.test(text);
1592
+ return alternatingCaps || numberSub || qSub || excessiveChars;
1593
+ }
1594
+
788
1595
  // src/text/extract.ts
789
1596
  function truncate(text, maxLength, options) {
790
1597
  if (!text || maxLength <= 0) {
@@ -893,6 +1700,6 @@ function similarity(str1, str2) {
893
1700
  return 1 - distance / maxLength;
894
1701
  }
895
1702
 
896
- export { ABBREVIATIONS, ACRONYMS, LOWERCASE_WORDS, capitalize, compareStrings, contractAbbreviation, expandAbbreviation, extractWords, normalizeWhitespace, removeAccents, sanitize, similarity, slugify, toSentenceCase, toTitleCase, truncate };
1703
+ export { ABBREVIATIONS, ACRONYMS, LOWERCASE_WORDS, capitalize, compareStrings, contractAbbreviation, expandAbbreviation, extractWords, isAlay, normalizeWhitespace, profanityFilter, removeAccents, removeStopwords, sanitize, similarity, slugify, toFormal, toSentenceCase, toTitleCase, truncate };
897
1704
  //# sourceMappingURL=index.js.map
898
1705
  //# sourceMappingURL=index.js.map