@salespark/toolkit 2.0.1 → 2.1.1

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/index.js CHANGED
@@ -133,6 +133,33 @@ function flattenDepth(array, depth = 1, options) {
133
133
  return flattenDepthBase(array, depth, predicate, isStrict);
134
134
  }
135
135
 
136
+ // src/utils/bool.ts
137
+ var toBool = (value, def = false) => {
138
+ try {
139
+ if (value === null || value === void 0) return def;
140
+ if (typeof value === "boolean") return value;
141
+ if (typeof value === "number") return value === 1;
142
+ if (typeof value === "string") {
143
+ switch (value.toLowerCase().trim()) {
144
+ case "true":
145
+ case "yes":
146
+ case "1":
147
+ return true;
148
+ case "false":
149
+ case "no":
150
+ case "0":
151
+ return false;
152
+ default:
153
+ return def;
154
+ }
155
+ }
156
+ return def;
157
+ } catch {
158
+ return false;
159
+ }
160
+ };
161
+ var parseToBool = toBool;
162
+
136
163
  // src/utils/object.ts
137
164
  function pick(obj, keys) {
138
165
  const out = {};
@@ -440,12 +467,1129 @@ var addThousandsSpace = (value) => {
440
467
  return value;
441
468
  }
442
469
  };
470
+ var delay = (ms) => new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
471
+ var isNilTextOrEmpty = (value) => {
472
+ try {
473
+ if (value === null || value === void 0 || value === "") return true;
474
+ if (typeof value === "string") {
475
+ const v = value.trim().toLowerCase();
476
+ return v === "null" || v === "undefined";
477
+ }
478
+ return false;
479
+ } catch {
480
+ return true;
481
+ }
482
+ };
483
+ var formatCurrency = (value, withoutCurrencySymbol = false, currency = "EUR", locale = "pt-PT") => {
484
+ try {
485
+ const numValue = value === void 0 || value === null || value === "" ? 0 : Number(value);
486
+ if (isNaN(numValue) || !isFinite(numValue)) {
487
+ return withoutCurrencySymbol ? "0,00" : "0,00 \u20AC";
488
+ }
489
+ const intlOptions = {
490
+ style: withoutCurrencySymbol ? "decimal" : "currency",
491
+ currency,
492
+ minimumFractionDigits: 2,
493
+ maximumFractionDigits: 2
494
+ };
495
+ return new Intl.NumberFormat(locale, intlOptions).format(numValue);
496
+ } catch (error) {
497
+ const numValue = Number(value) || 0;
498
+ const formatted = numValue.toFixed(2).replace(".", ",");
499
+ return withoutCurrencySymbol ? formatted : `${formatted} \u20AC`;
500
+ }
501
+ };
502
+ var parseName = (name) => {
503
+ try {
504
+ if (name === void 0 || name === null || name === "") {
505
+ return { firstName: "", lastName: "" };
506
+ }
507
+ const cleanName = name.toString().trim().replace(/\s+/g, " ");
508
+ if (cleanName === "") {
509
+ return { firstName: "", lastName: "" };
510
+ }
511
+ if (!cleanName.includes(" ")) {
512
+ return { firstName: cleanName, lastName: "" };
513
+ }
514
+ const nameParts = cleanName.split(" ");
515
+ const firstName = nameParts[0];
516
+ const lastName = nameParts[nameParts.length - 1];
517
+ return { firstName, lastName };
518
+ } catch (error) {
519
+ const fallbackName = name ? String(name).trim() : "";
520
+ return { firstName: fallbackName, lastName: "" };
521
+ }
522
+ };
523
+ var symbolToCurrency = (symbol) => {
524
+ try {
525
+ if (!symbol || typeof symbol !== "string") {
526
+ return "EUR";
527
+ }
528
+ const normalizedSymbol = symbol.trim();
529
+ switch (normalizedSymbol) {
530
+ case "\u20AC":
531
+ return "EUR";
532
+ case "\xA3":
533
+ return "GBP";
534
+ case "$":
535
+ return "USD";
536
+ case "\xA5":
537
+ case "\uFFE5":
538
+ return "JPY";
539
+ case "\u20B9":
540
+ return "INR";
541
+ case "\u20BD":
542
+ return "RUB";
543
+ case "\xA2":
544
+ return "USD";
545
+ // US cents
546
+ case "\u20A9":
547
+ return "KRW";
548
+ // South Korean Won
549
+ case "\u20AA":
550
+ return "ILS";
551
+ // Israeli Shekel
552
+ case "\u20A6":
553
+ return "NGN";
554
+ // Nigerian Naira
555
+ case "\u20A8":
556
+ return "PKR";
557
+ // Pakistani Rupee
558
+ case "\u20B1":
559
+ return "PHP";
560
+ // Philippine Peso
561
+ case "\u20AB":
562
+ return "VND";
563
+ // Vietnamese Dong
564
+ case "\u20A1":
565
+ return "CRC";
566
+ // Costa Rican Colon
567
+ case "\u20B2":
568
+ return "PYG";
569
+ // Paraguayan Guarani
570
+ case "\u20B4":
571
+ return "UAH";
572
+ // Ukrainian Hryvnia
573
+ case "\u20B5":
574
+ return "GHS";
575
+ // Ghanaian Cedi
576
+ case "\u20B6":
577
+ return "EUR";
578
+ // Livre tournois (historical, fallback to EUR)
579
+ case "\u20B8":
580
+ return "KZT";
581
+ // Kazakhstani Tenge
582
+ case "\u20BA":
583
+ return "TRY";
584
+ // Turkish Lira
585
+ case "\u20BB":
586
+ return "EUR";
587
+ // Nordic mark (historical, fallback to EUR)
588
+ case "\u20BC":
589
+ return "AZN";
590
+ // Azerbaijani Manat
591
+ case "\u20BE":
592
+ return "GEL";
593
+ // Georgian Lari
594
+ case "\u20BF":
595
+ return "BTC";
596
+ // Bitcoin
597
+ case "\uFDFC":
598
+ return "SAR";
599
+ // Saudi Riyal
600
+ case "\uFF04":
601
+ return "USD";
602
+ // Full-width dollar sign
603
+ case "\uFFE0":
604
+ return "USD";
605
+ // Full-width cent sign
606
+ case "\uFFE1":
607
+ return "GBP";
608
+ // Full-width pound sign
609
+ case "\uFFE2":
610
+ return "GBP";
611
+ // Full-width not sign (sometimes used for pound)
612
+ case "\uFFE3":
613
+ return "JPY";
614
+ // Full-width macron (sometimes used for yen)
615
+ case "\uFFE4":
616
+ return "EUR";
617
+ // Full-width lira sign
618
+ case "\uFFE6":
619
+ return "KRW";
620
+ // Full-width won sign
621
+ // Additional common symbols
622
+ case "R":
623
+ return "ZAR";
624
+ // South African Rand (when used as symbol)
625
+ case "R$":
626
+ return "BRL";
627
+ // Brazilian Real
628
+ case "C$":
629
+ return "CAD";
630
+ // Canadian Dollar
631
+ case "A$":
632
+ return "AUD";
633
+ // Australian Dollar
634
+ case "S$":
635
+ return "SGD";
636
+ // Singapore Dollar
637
+ case "HK$":
638
+ return "HKD";
639
+ // Hong Kong Dollar
640
+ case "NZ$":
641
+ return "NZD";
642
+ // New Zealand Dollar
643
+ case "kr":
644
+ case "Kr":
645
+ return "SEK";
646
+ // Swedish Krona (fallback, could be NOK or DKK)
647
+ case "z\u0142":
648
+ return "PLN";
649
+ // Polish Zloty
650
+ case "K\u010D":
651
+ return "CZK";
652
+ // Czech Koruna
653
+ case "Ft":
654
+ return "HUF";
655
+ // Hungarian Forint
656
+ case "lei":
657
+ return "RON";
658
+ // Romanian Leu
659
+ case "\u043B\u0432":
660
+ return "BGN";
661
+ // Bulgarian Lev
662
+ case "kn":
663
+ return "HRK";
664
+ // Croatian Kuna
665
+ case "din":
666
+ return "RSD";
667
+ // Serbian Dinar
668
+ case "\u0434\u0435\u043D":
669
+ return "MKD";
670
+ // Macedonian Denar
671
+ default:
672
+ return "EUR";
673
+ }
674
+ } catch (error) {
675
+ return "EUR";
676
+ }
677
+ };
678
+ var currencyToSymbol = (currency) => {
679
+ try {
680
+ if (!currency || typeof currency !== "string") {
681
+ return "\u20AC";
682
+ }
683
+ const normalizedCurrency = currency.trim().toUpperCase();
684
+ switch (normalizedCurrency) {
685
+ case "EUR":
686
+ return "\u20AC";
687
+ case "GBP":
688
+ return "\xA3";
689
+ case "USD":
690
+ return "$";
691
+ case "JPY":
692
+ return "\xA5";
693
+ case "INR":
694
+ return "\u20B9";
695
+ case "RUB":
696
+ return "\u20BD";
697
+ case "CNY":
698
+ return "\xA5";
699
+ case "KRW":
700
+ return "\u20A9";
701
+ // South Korean Won
702
+ case "ILS":
703
+ return "\u20AA";
704
+ // Israeli Shekel
705
+ case "NGN":
706
+ return "\u20A6";
707
+ // Nigerian Naira
708
+ case "PKR":
709
+ return "\u20A8";
710
+ // Pakistani Rupee
711
+ case "PHP":
712
+ return "\u20B1";
713
+ // Philippine Peso
714
+ case "VND":
715
+ return "\u20AB";
716
+ // Vietnamese Dong
717
+ case "CRC":
718
+ return "\u20A1";
719
+ // Costa Rican Colon
720
+ case "PYG":
721
+ return "\u20B2";
722
+ // Paraguayan Guarani
723
+ case "UAH":
724
+ return "\u20B4";
725
+ // Ukrainian Hryvnia
726
+ case "GHS":
727
+ return "\u20B5";
728
+ // Ghanaian Cedi
729
+ case "KZT":
730
+ return "\u20B8";
731
+ // Kazakhstani Tenge
732
+ case "TRY":
733
+ return "\u20BA";
734
+ // Turkish Lira
735
+ case "AZN":
736
+ return "\u20BC";
737
+ // Azerbaijani Manat
738
+ case "GEL":
739
+ return "\u20BE";
740
+ // Georgian Lari
741
+ case "BTC":
742
+ return "\u20BF";
743
+ // Bitcoin
744
+ case "SAR":
745
+ return "\uFDFC";
746
+ // Saudi Riyal
747
+ case "ZAR":
748
+ return "R";
749
+ // South African Rand
750
+ case "BRL":
751
+ return "R$";
752
+ // Brazilian Real
753
+ case "CAD":
754
+ return "C$";
755
+ // Canadian Dollar
756
+ case "AUD":
757
+ return "A$";
758
+ // Australian Dollar
759
+ case "SGD":
760
+ return "S$";
761
+ // Singapore Dollar
762
+ case "HKD":
763
+ return "HK$";
764
+ // Hong Kong Dollar
765
+ case "NZD":
766
+ return "NZ$";
767
+ // New Zealand Dollar
768
+ case "SEK":
769
+ return "kr";
770
+ // Swedish Krona
771
+ case "NOK":
772
+ return "kr";
773
+ // Norwegian Krone
774
+ case "DKK":
775
+ return "kr";
776
+ // Danish Krone
777
+ case "PLN":
778
+ return "z\u0142";
779
+ // Polish Zloty
780
+ case "CZK":
781
+ return "K\u010D";
782
+ // Czech Koruna
783
+ case "HUF":
784
+ return "Ft";
785
+ // Hungarian Forint
786
+ case "RON":
787
+ return "lei";
788
+ // Romanian Leu
789
+ case "BGN":
790
+ return "\u043B\u0432";
791
+ // Bulgarian Lev
792
+ case "HRK":
793
+ return "kn";
794
+ // Croatian Kuna
795
+ case "RSD":
796
+ return "din";
797
+ // Serbian Dinar
798
+ case "MKD":
799
+ return "\u0434\u0435\u043D";
800
+ // Macedonian Denar
801
+ case "CHF":
802
+ return "CHF";
803
+ // Swiss Franc (commonly written as CHF)
804
+ case "THB":
805
+ return "\u0E3F";
806
+ // Thai Baht
807
+ case "MYR":
808
+ return "RM";
809
+ // Malaysian Ringgit
810
+ case "IDR":
811
+ return "Rp";
812
+ // Indonesian Rupiah
813
+ case "CLP":
814
+ return "$";
815
+ // Chilean Peso (uses $ symbol)
816
+ case "COP":
817
+ return "$";
818
+ // Colombian Peso (uses $ symbol)
819
+ case "MXN":
820
+ return "$";
821
+ // Mexican Peso (uses $ symbol)
822
+ case "ARS":
823
+ return "$";
824
+ // Argentine Peso (uses $ symbol)
825
+ case "UYU":
826
+ return "$";
827
+ // Uruguayan Peso (uses $ symbol)
828
+ case "PEN":
829
+ return "S/";
830
+ // Peruvian Sol
831
+ case "BOB":
832
+ return "Bs";
833
+ // Bolivian Boliviano
834
+ case "EGP":
835
+ return "\xA3";
836
+ // Egyptian Pound (uses £ symbol)
837
+ case "LBP":
838
+ return "\xA3";
839
+ // Lebanese Pound (uses £ symbol)
840
+ case "SYP":
841
+ return "\xA3";
842
+ // Syrian Pound (uses £ symbol)
843
+ default:
844
+ return "\u20AC";
845
+ }
846
+ } catch (error) {
847
+ return "\u20AC";
848
+ }
849
+ };
850
+ var isNullUndefinedOrEmptyEnforced = isNilTextOrEmpty;
443
851
  var addSpaceBetweenNumbers = addThousandsSpace;
444
852
 
853
+ // src/utils/validations.ts
854
+ function isPTTaxId(value) {
855
+ try {
856
+ if (value === null || value === void 0) return false;
857
+ let nif = String(value).trim();
858
+ nif = nif.replace(/[^0-9]/g, "");
859
+ if (nif.length !== 9) return false;
860
+ if (!/^\d{9}$/.test(nif)) return false;
861
+ if (/^(\d)\1{8}$/.test(nif)) return false;
862
+ const first = nif[0];
863
+ const defaultAllowed = /* @__PURE__ */ new Set(["1", "2", "3", "5", "6", "8", "9"]);
864
+ if (!defaultAllowed.has(first)) return false;
865
+ let sum = 0;
866
+ for (let i = 0; i < 8; i++) {
867
+ const digit = parseInt(nif[i], 10);
868
+ const weight = 9 - i;
869
+ sum += digit * weight;
870
+ }
871
+ const mod11 = sum % 11;
872
+ const checkDigit = mod11 < 2 ? 0 : 11 - mod11;
873
+ return checkDigit === parseInt(nif[8], 10);
874
+ } catch {
875
+ return false;
876
+ }
877
+ }
878
+ var isValidPTTaxId = isPTTaxId;
879
+
880
+ // src/utils/iban.ts
881
+ function isValidIBAN(value) {
882
+ try {
883
+ if (!value || typeof value !== "string") return false;
884
+ const iban = value.replace(/[\s-]/g, "").toUpperCase();
885
+ if (iban.length < 15 || iban.length > 34) return false;
886
+ if (!/^[A-Z]{2}[0-9]{2}[A-Z0-9]+$/.test(iban)) return false;
887
+ const countryCode = iban.slice(0, 2);
888
+ const spec = countrySpecs[countryCode];
889
+ if (!spec?.bban_regexp || !spec.chars) return false;
890
+ if (spec.chars !== iban.length) return false;
891
+ if (!/^[0-9]{2}$/.test(iban.slice(2, 4))) return false;
892
+ const bban = iban.slice(4);
893
+ if (!new RegExp(spec.bban_regexp).test(bban)) return false;
894
+ if (spec.bban_validation_func && !spec.bban_validation_func(bban))
895
+ return false;
896
+ return isValidIBANChecksum(iban);
897
+ } catch {
898
+ return false;
899
+ }
900
+ }
901
+ function isValidIBANChecksum(iban) {
902
+ const rearranged = iban.slice(4) + iban.slice(0, 4);
903
+ const numericString = rearranged.split("").map((char) => {
904
+ const code = char.charCodeAt(0);
905
+ return code >= 65 ? (code - 55).toString() : char;
906
+ }).join("");
907
+ return mod97(numericString) === 1;
908
+ }
909
+ function mod97(numStr) {
910
+ let remainder = numStr;
911
+ while (remainder.length > 2) {
912
+ const chunk2 = remainder.slice(0, 9);
913
+ const chunkNum = parseInt(chunk2, 10);
914
+ if (isNaN(chunkNum)) return NaN;
915
+ remainder = chunkNum % 97 + remainder.slice(chunk2.length);
916
+ }
917
+ return parseInt(remainder, 10) % 97;
918
+ }
919
+ var countrySpecs = {
920
+ AD: {
921
+ chars: 24,
922
+ bban_regexp: "^[0-9]{8}[A-Z0-9]{12}$",
923
+ IBANRegistry: true,
924
+ SEPA: true
925
+ },
926
+ AE: { chars: 23, bban_regexp: "^[0-9]{3}[0-9]{16}$", IBANRegistry: true },
927
+ AL: { chars: 28, bban_regexp: "^[0-9]{8}[A-Z0-9]{16}$", IBANRegistry: true },
928
+ AT: { chars: 20, bban_regexp: "^[0-9]{16}$", IBANRegistry: true, SEPA: true },
929
+ AZ: { chars: 28, bban_regexp: "^[A-Z]{4}[A-Z0-9]{20}$", IBANRegistry: true },
930
+ BA: {
931
+ chars: 20,
932
+ bban_regexp: "^[0-9]{16}$",
933
+ bban_validation_func: checkMod97BBAN,
934
+ IBANRegistry: true
935
+ },
936
+ BE: {
937
+ chars: 16,
938
+ bban_regexp: "^[0-9]{12}$",
939
+ bban_validation_func: checkBelgianBBAN,
940
+ IBANRegistry: true,
941
+ SEPA: true
942
+ },
943
+ BG: {
944
+ chars: 22,
945
+ bban_regexp: "^[A-Z]{4}[0-9]{6}[A-Z0-9]{8}$",
946
+ IBANRegistry: true,
947
+ SEPA: true
948
+ },
949
+ BH: { chars: 22, bban_regexp: "^[A-Z]{4}[A-Z0-9]{14}$", IBANRegistry: true },
950
+ BR: {
951
+ chars: 29,
952
+ bban_regexp: "^[0-9]{23}[A-Z]{1}[A-Z0-9]{1}$",
953
+ IBANRegistry: true
954
+ },
955
+ BY: {
956
+ chars: 28,
957
+ bban_regexp: "^[A-Z]{4}[0-9]{4}[A-Z0-9]{16}$",
958
+ IBANRegistry: true
959
+ },
960
+ CH: {
961
+ chars: 21,
962
+ bban_regexp: "^[0-9]{5}[A-Z0-9]{12}$",
963
+ IBANRegistry: true,
964
+ SEPA: true
965
+ },
966
+ CR: { chars: 22, bban_regexp: "^[0-9]{18}$", IBANRegistry: true },
967
+ CY: {
968
+ chars: 28,
969
+ bban_regexp: "^[0-9]{8}[A-Z0-9]{16}$",
970
+ IBANRegistry: true,
971
+ SEPA: true
972
+ },
973
+ CZ: {
974
+ chars: 24,
975
+ bban_regexp: "^[0-9]{20}$",
976
+ bban_validation_func: checkCzechSlovakBBAN,
977
+ IBANRegistry: true,
978
+ SEPA: true
979
+ },
980
+ DE: { chars: 22, bban_regexp: "^[0-9]{18}$", IBANRegistry: true, SEPA: true },
981
+ DK: { chars: 18, bban_regexp: "^[0-9]{14}$", IBANRegistry: true, SEPA: true },
982
+ DO: { chars: 28, bban_regexp: "^[A-Z]{4}[0-9]{20}$", IBANRegistry: true },
983
+ EE: {
984
+ chars: 20,
985
+ bban_regexp: "^[0-9]{16}$",
986
+ bban_validation_func: checkEstonianBBAN,
987
+ IBANRegistry: true,
988
+ SEPA: true
989
+ },
990
+ EG: { chars: 29, bban_regexp: "^[0-9]{25}$", IBANRegistry: true },
991
+ ES: {
992
+ chars: 24,
993
+ bban_regexp: "^[0-9]{20}$",
994
+ bban_validation_func: checkSpanishBBAN,
995
+ IBANRegistry: true,
996
+ SEPA: true
997
+ },
998
+ FI: { chars: 18, bban_regexp: "^[0-9]{14}$", IBANRegistry: true, SEPA: true },
999
+ FO: { chars: 18, bban_regexp: "^[0-9]{14}$", IBANRegistry: true },
1000
+ FR: {
1001
+ chars: 27,
1002
+ bban_regexp: "^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$",
1003
+ bban_validation_func: checkFrenchBBAN,
1004
+ IBANRegistry: true,
1005
+ SEPA: true
1006
+ },
1007
+ GB: {
1008
+ chars: 22,
1009
+ bban_regexp: "^[A-Z]{4}[0-9]{14}$",
1010
+ IBANRegistry: true,
1011
+ SEPA: true
1012
+ },
1013
+ GE: { chars: 22, bban_regexp: "^[A-Z0-9]{2}[0-9]{16}$", IBANRegistry: true },
1014
+ GI: {
1015
+ chars: 23,
1016
+ bban_regexp: "^[A-Z]{4}[A-Z0-9]{15}$",
1017
+ IBANRegistry: true,
1018
+ SEPA: true
1019
+ },
1020
+ GL: { chars: 18, bban_regexp: "^[0-9]{14}$", IBANRegistry: true },
1021
+ GR: {
1022
+ chars: 27,
1023
+ bban_regexp: "^[0-9]{7}[A-Z0-9]{16}$",
1024
+ IBANRegistry: true,
1025
+ SEPA: true
1026
+ },
1027
+ GT: { chars: 28, bban_regexp: "^[A-Z0-9]{24}$", IBANRegistry: true },
1028
+ HR: {
1029
+ chars: 21,
1030
+ bban_regexp: "^[0-9]{17}$",
1031
+ bban_validation_func: checkCroatianBBAN,
1032
+ IBANRegistry: true,
1033
+ SEPA: true
1034
+ },
1035
+ HU: {
1036
+ chars: 28,
1037
+ bban_regexp: "^[0-9]{24}$",
1038
+ bban_validation_func: checkHungarianBBAN,
1039
+ IBANRegistry: true,
1040
+ SEPA: true
1041
+ },
1042
+ IE: {
1043
+ chars: 22,
1044
+ bban_regexp: "^[A-Z0-9]{4}[0-9]{14}$",
1045
+ IBANRegistry: true,
1046
+ SEPA: true
1047
+ },
1048
+ IL: { chars: 23, bban_regexp: "^[0-9]{19}$", IBANRegistry: true },
1049
+ IS: { chars: 26, bban_regexp: "^[0-9]{22}$", IBANRegistry: true, SEPA: true },
1050
+ IT: {
1051
+ chars: 27,
1052
+ bban_regexp: "^[A-Z]{1}[0-9]{10}[A-Z0-9]{12}$",
1053
+ IBANRegistry: true,
1054
+ SEPA: true
1055
+ },
1056
+ JO: {
1057
+ chars: 30,
1058
+ bban_regexp: "^[A-Z]{4}[0-9]{4}[A-Z0-9]{18}$",
1059
+ IBANRegistry: true
1060
+ },
1061
+ KW: { chars: 30, bban_regexp: "^[A-Z]{4}[A-Z0-9]{22}$", IBANRegistry: true },
1062
+ KZ: { chars: 20, bban_regexp: "^[0-9]{3}[A-Z0-9]{13}$", IBANRegistry: true },
1063
+ LB: { chars: 28, bban_regexp: "^[0-9]{4}[A-Z0-9]{20}$", IBANRegistry: true },
1064
+ LC: { chars: 32, bban_regexp: "^[A-Z]{4}[A-Z0-9]{24}$", IBANRegistry: true },
1065
+ LI: {
1066
+ chars: 21,
1067
+ bban_regexp: "^[0-9]{5}[A-Z0-9]{12}$",
1068
+ IBANRegistry: true,
1069
+ SEPA: true
1070
+ },
1071
+ LT: { chars: 20, bban_regexp: "^[0-9]{16}$", IBANRegistry: true, SEPA: true },
1072
+ LU: {
1073
+ chars: 20,
1074
+ bban_regexp: "^[0-9]{3}[A-Z0-9]{13}$",
1075
+ IBANRegistry: true,
1076
+ SEPA: true
1077
+ },
1078
+ LV: {
1079
+ chars: 21,
1080
+ bban_regexp: "^[A-Z]{4}[A-Z0-9]{13}$",
1081
+ IBANRegistry: true,
1082
+ SEPA: true
1083
+ },
1084
+ MC: {
1085
+ chars: 27,
1086
+ bban_regexp: "^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$",
1087
+ bban_validation_func: checkFrenchBBAN,
1088
+ IBANRegistry: true,
1089
+ SEPA: true
1090
+ },
1091
+ MD: {
1092
+ chars: 24,
1093
+ bban_regexp: "^[A-Z0-9]{2}[A-Z0-9]{18}$",
1094
+ IBANRegistry: true
1095
+ },
1096
+ ME: {
1097
+ chars: 22,
1098
+ bban_regexp: "^[0-9]{18}$",
1099
+ bban_validation_func: checkMod97BBAN,
1100
+ IBANRegistry: true
1101
+ },
1102
+ MK: {
1103
+ chars: 19,
1104
+ bban_regexp: "^[0-9]{3}[A-Z0-9]{10}[0-9]{2}$",
1105
+ bban_validation_func: checkMod97BBAN,
1106
+ IBANRegistry: true
1107
+ },
1108
+ MR: { chars: 27, bban_regexp: "^[0-9]{23}$", IBANRegistry: true },
1109
+ MT: {
1110
+ chars: 31,
1111
+ bban_regexp: "^[A-Z]{4}[0-9]{5}[A-Z0-9]{18}$",
1112
+ IBANRegistry: true,
1113
+ SEPA: true
1114
+ },
1115
+ MU: {
1116
+ chars: 30,
1117
+ bban_regexp: "^[A-Z]{4}[0-9]{19}[A-Z]{3}$",
1118
+ IBANRegistry: true
1119
+ },
1120
+ NL: {
1121
+ chars: 18,
1122
+ bban_regexp: "^[A-Z]{4}[0-9]{10}$",
1123
+ IBANRegistry: true,
1124
+ SEPA: true
1125
+ },
1126
+ NO: {
1127
+ chars: 15,
1128
+ bban_regexp: "^[0-9]{11}$",
1129
+ bban_validation_func: checkNorwegianBBAN,
1130
+ IBANRegistry: true,
1131
+ SEPA: true
1132
+ },
1133
+ PK: { chars: 24, bban_regexp: "^[A-Z0-9]{4}[0-9]{16}$", IBANRegistry: true },
1134
+ PL: {
1135
+ chars: 28,
1136
+ bban_regexp: "^[0-9]{24}$",
1137
+ bban_validation_func: checkPolishBBAN,
1138
+ IBANRegistry: true,
1139
+ SEPA: true
1140
+ },
1141
+ PS: { chars: 29, bban_regexp: "^[A-Z0-9]{4}[0-9]{21}$", IBANRegistry: true },
1142
+ PT: {
1143
+ chars: 25,
1144
+ bban_regexp: "^[0-9]{21}$",
1145
+ bban_validation_func: checkMod97BBAN,
1146
+ IBANRegistry: true,
1147
+ SEPA: true
1148
+ },
1149
+ QA: { chars: 29, bban_regexp: "^[A-Z]{4}[A-Z0-9]{21}$", IBANRegistry: true },
1150
+ RO: {
1151
+ chars: 24,
1152
+ bban_regexp: "^[A-Z]{4}[A-Z0-9]{16}$",
1153
+ IBANRegistry: true,
1154
+ SEPA: true
1155
+ },
1156
+ RS: {
1157
+ chars: 22,
1158
+ bban_regexp: "^[0-9]{18}$",
1159
+ bban_validation_func: checkMod97BBAN,
1160
+ IBANRegistry: true
1161
+ },
1162
+ SA: { chars: 24, bban_regexp: "^[0-9]{2}[A-Z0-9]{18}$", IBANRegistry: true },
1163
+ SE: { chars: 24, bban_regexp: "^[0-9]{20}$", IBANRegistry: true, SEPA: true },
1164
+ SI: {
1165
+ chars: 19,
1166
+ bban_regexp: "^[0-9]{15}$",
1167
+ bban_validation_func: checkMod97BBAN,
1168
+ IBANRegistry: true,
1169
+ SEPA: true
1170
+ },
1171
+ SK: {
1172
+ chars: 24,
1173
+ bban_regexp: "^[0-9]{20}$",
1174
+ bban_validation_func: checkCzechSlovakBBAN,
1175
+ IBANRegistry: true,
1176
+ SEPA: true
1177
+ },
1178
+ SM: {
1179
+ chars: 27,
1180
+ bban_regexp: "^[A-Z]{1}[0-9]{10}[A-Z0-9]{12}$",
1181
+ IBANRegistry: true,
1182
+ SEPA: true
1183
+ },
1184
+ TN: { chars: 24, bban_regexp: "^[0-9]{20}$", IBANRegistry: true },
1185
+ TR: { chars: 26, bban_regexp: "^[0-9]{5}[A-Z0-9]{17}$", IBANRegistry: true },
1186
+ UA: { chars: 29, bban_regexp: "^[0-9]{6}[A-Z0-9]{19}$", IBANRegistry: true },
1187
+ VG: { chars: 24, bban_regexp: "^[A-Z0-9]{4}[0-9]{16}$", IBANRegistry: true },
1188
+ XK: { chars: 20, bban_regexp: "^[0-9]{16}$", IBANRegistry: true }
1189
+ };
1190
+ function checkMod97BBAN(bban) {
1191
+ const stripped = bban.replace(/[\s.]+/g, "");
1192
+ return mod97(stripped) === 1;
1193
+ }
1194
+ function checkBelgianBBAN(bban) {
1195
+ const stripped = bban.replace(/[\s.]+/g, "");
1196
+ const checkingPart = parseInt(stripped.substring(0, stripped.length - 2), 10);
1197
+ const checksum = parseInt(stripped.substring(stripped.length - 2), 10);
1198
+ const remainder = checkingPart % 97 === 0 ? 97 : checkingPart % 97;
1199
+ return remainder === checksum;
1200
+ }
1201
+ function checkCzechSlovakBBAN(bban) {
1202
+ const weightsPrefix = [10, 5, 8, 4, 2, 1];
1203
+ const weightsSuffix = [6, 3, 7, 9, 10, 5, 8, 4, 2, 1];
1204
+ const controlPrefix = parseInt(bban.charAt(9), 10);
1205
+ const controlSuffix = parseInt(bban.charAt(19), 10);
1206
+ const prefix = bban.substring(4, 9);
1207
+ const suffix = bban.substring(10, 19);
1208
+ let sum = 0;
1209
+ for (let i = 0; i < prefix.length; i++) {
1210
+ sum += parseInt(prefix.charAt(i), 10) * weightsPrefix[i];
1211
+ }
1212
+ let remainder = sum % 11;
1213
+ if (controlPrefix !== (remainder === 0 ? 0 : remainder === 1 ? 1 : 11 - remainder)) {
1214
+ return false;
1215
+ }
1216
+ sum = 0;
1217
+ for (let i = 0; i < suffix.length; i++) {
1218
+ sum += parseInt(suffix.charAt(i), 10) * weightsSuffix[i];
1219
+ }
1220
+ remainder = sum % 11;
1221
+ return controlSuffix === (remainder === 0 ? 0 : remainder === 1 ? 1 : 11 - remainder);
1222
+ }
1223
+ function checkEstonianBBAN(bban) {
1224
+ const weights = [7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7];
1225
+ const controlDigit = parseInt(bban.charAt(15), 10);
1226
+ const toCheck = bban.substring(2, 15);
1227
+ let sum = 0;
1228
+ for (let i = 0; i < toCheck.length; i++) {
1229
+ sum += parseInt(toCheck.charAt(i), 10) * weights[i];
1230
+ }
1231
+ const remainder = sum % 10;
1232
+ return controlDigit === (remainder === 0 ? 0 : 10 - remainder);
1233
+ }
1234
+ function checkSpanishBBAN(bban) {
1235
+ const weightsBankBranch = [4, 8, 5, 10, 9, 7, 3, 6];
1236
+ const weightsAccount = [1, 2, 4, 8, 5, 10, 9, 7, 3, 6];
1237
+ const controlBankBranch = parseInt(bban.charAt(8), 10);
1238
+ const controlAccount = parseInt(bban.charAt(9), 10);
1239
+ const bankBranch = bban.substring(0, 8);
1240
+ const account = bban.substring(10, 20);
1241
+ let sum = 0;
1242
+ for (let i = 0; i < 8; i++) {
1243
+ sum += parseInt(bankBranch.charAt(i), 10) * weightsBankBranch[i];
1244
+ }
1245
+ let remainder = sum % 11;
1246
+ if (controlBankBranch !== (remainder === 0 ? 0 : remainder === 1 ? 1 : 11 - remainder)) {
1247
+ return false;
1248
+ }
1249
+ sum = 0;
1250
+ for (let i = 0; i < 10; i++) {
1251
+ sum += parseInt(account.charAt(i), 10) * weightsAccount[i];
1252
+ }
1253
+ remainder = sum % 11;
1254
+ return controlAccount === (remainder === 0 ? 0 : remainder === 1 ? 1 : 11 - remainder);
1255
+ }
1256
+ function checkFrenchBBAN(bban) {
1257
+ const stripped = bban.replace(/[\s.]+/g, "");
1258
+ const normalized = Array.from(stripped);
1259
+ for (let i = 0; i < stripped.length; i++) {
1260
+ const c = normalized[i].charCodeAt(0);
1261
+ if (c >= 65) {
1262
+ switch (c) {
1263
+ case 65:
1264
+ case 74:
1265
+ normalized[i] = "1";
1266
+ break;
1267
+ case 66:
1268
+ case 75:
1269
+ case 83:
1270
+ normalized[i] = "2";
1271
+ break;
1272
+ case 67:
1273
+ case 76:
1274
+ case 84:
1275
+ normalized[i] = "3";
1276
+ break;
1277
+ case 68:
1278
+ case 77:
1279
+ case 85:
1280
+ normalized[i] = "4";
1281
+ break;
1282
+ case 69:
1283
+ case 78:
1284
+ case 86:
1285
+ normalized[i] = "5";
1286
+ break;
1287
+ case 70:
1288
+ case 79:
1289
+ case 87:
1290
+ normalized[i] = "6";
1291
+ break;
1292
+ case 71:
1293
+ case 80:
1294
+ case 88:
1295
+ normalized[i] = "7";
1296
+ break;
1297
+ case 72:
1298
+ case 81:
1299
+ case 89:
1300
+ normalized[i] = "8";
1301
+ break;
1302
+ case 73:
1303
+ case 82:
1304
+ case 90:
1305
+ normalized[i] = "9";
1306
+ break;
1307
+ }
1308
+ }
1309
+ }
1310
+ return mod97(normalized.join("")) === 0;
1311
+ }
1312
+ function checkCroatianBBAN(bban) {
1313
+ const controlBankBranch = parseInt(bban.charAt(6), 10);
1314
+ const controlAccount = parseInt(bban.charAt(16), 10);
1315
+ const bankBranch = bban.substring(0, 6);
1316
+ const account = bban.substring(7, 16);
1317
+ return checkMod11(bankBranch, controlBankBranch) && checkMod11(account, controlAccount);
1318
+ }
1319
+ function checkMod11(toCheck, control) {
1320
+ let nr = 10;
1321
+ for (let i = 0; i < toCheck.length; i++) {
1322
+ nr += parseInt(toCheck.charAt(i), 10);
1323
+ if (nr % 10 !== 0) {
1324
+ nr = nr % 10;
1325
+ }
1326
+ nr = nr * 2;
1327
+ nr = nr % 11;
1328
+ }
1329
+ return control === (11 - nr === 10 ? 0 : 11 - nr);
1330
+ }
1331
+ function checkHungarianBBAN(bban) {
1332
+ const weights = [9, 7, 3, 1, 9, 7, 3, 1, 9, 7, 3, 1, 9, 7, 3];
1333
+ const controlDigitBankBranch = parseInt(bban.charAt(7), 10);
1334
+ const toCheckBankBranch = bban.substring(0, 7);
1335
+ let sum = 0;
1336
+ for (let i = 0; i < toCheckBankBranch.length; i++) {
1337
+ sum += parseInt(toCheckBankBranch.charAt(i), 10) * weights[i];
1338
+ }
1339
+ const remainder = sum % 10;
1340
+ if (controlDigitBankBranch !== (remainder === 0 ? 0 : 10 - remainder)) {
1341
+ return false;
1342
+ }
1343
+ if (bban.endsWith("00000000")) {
1344
+ const toCheckAccount = bban.substring(8, 15);
1345
+ const controlDigitAccount = parseInt(bban.charAt(15), 10);
1346
+ sum = 0;
1347
+ for (let i = 0; i < toCheckAccount.length; i++) {
1348
+ sum += parseInt(toCheckAccount.charAt(i), 10) * weights[i];
1349
+ }
1350
+ const accountRemainder = sum % 10;
1351
+ return controlDigitAccount === (accountRemainder === 0 ? 0 : 10 - accountRemainder);
1352
+ } else {
1353
+ const toCheckAccount = bban.substring(8, 23);
1354
+ const controlDigitAccount = parseInt(bban.charAt(23), 10);
1355
+ sum = 0;
1356
+ for (let i = 0; i < toCheckAccount.length; i++) {
1357
+ sum += parseInt(toCheckAccount.charAt(i), 10) * weights[i];
1358
+ }
1359
+ const accountRemainder = sum % 10;
1360
+ return controlDigitAccount === (accountRemainder === 0 ? 0 : 10 - accountRemainder);
1361
+ }
1362
+ }
1363
+ function checkNorwegianBBAN(bban) {
1364
+ const weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
1365
+ const stripped = bban.replace(/[\s.]+/g, "");
1366
+ const controlDigit = parseInt(stripped.charAt(10), 10);
1367
+ const toCheck = stripped.substring(0, 10);
1368
+ let sum = 0;
1369
+ for (let i = 0; i < 10; i++) {
1370
+ sum += parseInt(toCheck.charAt(i), 10) * weights[i];
1371
+ }
1372
+ const remainder = sum % 11;
1373
+ return controlDigit === (remainder === 0 ? 0 : 11 - remainder);
1374
+ }
1375
+ function checkPolishBBAN(bban) {
1376
+ const weights = [3, 9, 7, 1, 3, 9, 7];
1377
+ const controlDigit = parseInt(bban.charAt(7), 10);
1378
+ const toCheck = bban.substring(0, 7);
1379
+ let sum = 0;
1380
+ for (let i = 0; i < 7; i++) {
1381
+ sum += parseInt(toCheck.charAt(i), 10) * weights[i];
1382
+ }
1383
+ const remainder = sum % 10;
1384
+ return controlDigit === (remainder === 0 ? 0 : 10 - remainder);
1385
+ }
1386
+
1387
+ // src/utils/security.ts
1388
+ var checkMarkdownSecurity = (markdownText) => {
1389
+ if (!markdownText || typeof markdownText !== "string") {
1390
+ return {
1391
+ isValid: true,
1392
+ text: "",
1393
+ risks: [],
1394
+ sanitized: false
1395
+ };
1396
+ }
1397
+ const securityCheck = {
1398
+ isValid: true,
1399
+ text: markdownText,
1400
+ risks: [],
1401
+ sanitized: false
1402
+ };
1403
+ const securityPatterns = {
1404
+ // Critical risks
1405
+ scriptTags: {
1406
+ pattern: /<\s*script\b[^>]*>[\s\S]*?<\s*\/\s*script\s*>/gi,
1407
+ severity: "critical",
1408
+ description: "Script tags detected - high XSS risk"
1409
+ },
1410
+ eventHandlers: {
1411
+ pattern: /on\w+\s*=\s*["'][^"']*["']/gi,
1412
+ severity: "critical",
1413
+ description: "JavaScript event handlers detected"
1414
+ },
1415
+ javascriptUrls: {
1416
+ pattern: /javascript\s*:[^"'\s>]*/gi,
1417
+ severity: "critical",
1418
+ description: "JavaScript URLs detected"
1419
+ },
1420
+ // High risks
1421
+ iframes: {
1422
+ pattern: /<\s*iframe\b[^>]*>[\s\S]*?<\s*\/\s*iframe\s*>/gi,
1423
+ severity: "high",
1424
+ description: "Iframe elements detected - potential embedding risk"
1425
+ },
1426
+ objectTags: {
1427
+ pattern: /<\s*object\b[^>]*>[\s\S]*?<\s*\/\s*object\s*>/gi,
1428
+ severity: "high",
1429
+ description: "Object tags detected - potential code execution"
1430
+ },
1431
+ embedTags: {
1432
+ pattern: /<\s*embed\b[^>]*>[\s\S]*?<\s*\/\s*embed\s*>/gi,
1433
+ severity: "high",
1434
+ description: "Embed tags detected - potential code execution"
1435
+ },
1436
+ formTags: {
1437
+ pattern: /<\s*form\b[^>]*>[\s\S]*?<\s*\/\s*form\s*>/gi,
1438
+ severity: "high",
1439
+ description: "Form elements detected - potential data submission risk"
1440
+ },
1441
+ // Medium risks
1442
+ dataUrls: {
1443
+ pattern: /data:\s*[^,\s]+,[^"'\s)>]*/gi,
1444
+ severity: "medium",
1445
+ description: "Data URLs detected - potential data exfiltration"
1446
+ },
1447
+ baseTags: {
1448
+ pattern: /<\s*base\b[^>]*\/?>/gi,
1449
+ severity: "medium",
1450
+ description: "Base tags detected - potential URL hijacking"
1451
+ },
1452
+ styleTags: {
1453
+ pattern: /<\s*style\b[^>]*>[\s\S]*?<\s*\/\s*style\s*>/gi,
1454
+ severity: "medium",
1455
+ description: "Style tags detected - potential CSS injection"
1456
+ },
1457
+ linkTags: {
1458
+ pattern: /<\s*link\b[^>]*\/?>/gi,
1459
+ severity: "medium",
1460
+ description: "Link tags detected - potential resource hijacking"
1461
+ },
1462
+ // Low risks
1463
+ metaTags: {
1464
+ pattern: /<\s*meta\b[^>]*\/?>/gi,
1465
+ severity: "low",
1466
+ description: "Meta tags detected - potential information disclosure"
1467
+ }
1468
+ };
1469
+ const additionalChecks = [
1470
+ {
1471
+ pattern: /(file|ftp|ws|wss|gopher|ldap|telnet):/gi,
1472
+ type: "suspiciousProtocol",
1473
+ description: "Suspicious URL protocol detected",
1474
+ severity: "high"
1475
+ },
1476
+ {
1477
+ pattern: /(contenteditable|autofocus|formaction|srcdoc|srclang)/gi,
1478
+ type: "dangerousAttributes",
1479
+ description: "Potentially dangerous HTML attributes detected",
1480
+ severity: "medium"
1481
+ },
1482
+ {
1483
+ pattern: /(expression|eval|setTimeout|setInterval|Function|constructor)/gi,
1484
+ type: "dangerousJavaScript",
1485
+ description: "Potentially dangerous JavaScript functions detected",
1486
+ severity: "high"
1487
+ },
1488
+ {
1489
+ pattern: /(vbscript|livescript|mocha):/gi,
1490
+ type: "dangerousScriptProtocol",
1491
+ description: "Dangerous scripting protocols detected",
1492
+ severity: "critical"
1493
+ },
1494
+ {
1495
+ pattern: /<!--[\s\S]*?-->/g,
1496
+ type: "htmlComments",
1497
+ description: "HTML comments detected - potential information leakage",
1498
+ severity: "low"
1499
+ }
1500
+ ];
1501
+ const sanitizeContent = (text, pattern, replacement = "") => {
1502
+ return text.replace(pattern, replacement);
1503
+ };
1504
+ let contentWasSanitized = false;
1505
+ Object.entries(securityPatterns).forEach(([riskType, config]) => {
1506
+ if (config.pattern.test(markdownText)) {
1507
+ securityCheck.isValid = false;
1508
+ securityCheck.risks.push({
1509
+ type: riskType,
1510
+ description: config.description,
1511
+ severity: config.severity
1512
+ });
1513
+ securityCheck.text = sanitizeContent(securityCheck.text, config.pattern);
1514
+ contentWasSanitized = true;
1515
+ }
1516
+ });
1517
+ additionalChecks.forEach((check) => {
1518
+ if (check.pattern.test(markdownText)) {
1519
+ securityCheck.isValid = false;
1520
+ securityCheck.risks.push({
1521
+ type: check.type,
1522
+ description: check.description,
1523
+ severity: check.severity
1524
+ });
1525
+ securityCheck.text = sanitizeContent(securityCheck.text, check.pattern);
1526
+ contentWasSanitized = true;
1527
+ }
1528
+ });
1529
+ securityCheck.sanitized = contentWasSanitized;
1530
+ const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
1531
+ securityCheck.risks.sort((a, b) => {
1532
+ const aSeverity = severityOrder[a.severity || "low"];
1533
+ const bSeverity = severityOrder[b.severity || "low"];
1534
+ return aSeverity - bSeverity;
1535
+ });
1536
+ return securityCheck;
1537
+ };
1538
+ var sanitizeMarkdown = (text) => {
1539
+ if (!text || typeof text !== "string") {
1540
+ return "";
1541
+ }
1542
+ try {
1543
+ return text.replace(/<[^>]*>/g, "").replace(/javascript:/gi, "").replace(/data:[^,]*,[^"'\s>)]*/gi, "").replace(/(file|ftp|ws|wss|vbscript|livescript|mocha):/gi, "").replace(/&[#\w]+;/g, "").replace(/expression\s*\([^)]*\)/gi, "").replace(/\s+/g, " ").trim();
1544
+ } catch (error) {
1545
+ return "";
1546
+ }
1547
+ };
1548
+ var assessSecurityRisks = (risks) => {
1549
+ if (!risks || risks.length === 0) {
1550
+ return {
1551
+ score: 0,
1552
+ level: "safe",
1553
+ recommendations: ["Content appears safe to use"]
1554
+ };
1555
+ }
1556
+ const severityScores = { critical: 100, high: 50, medium: 20, low: 5 };
1557
+ const score = risks.reduce((total, risk) => {
1558
+ return total + (severityScores[risk.severity || "low"] || 5);
1559
+ }, 0);
1560
+ let level;
1561
+ if (score >= 100) level = "critical";
1562
+ else if (score >= 50) level = "high";
1563
+ else if (score >= 20) level = "medium";
1564
+ else if (score >= 5) level = "low";
1565
+ else level = "safe";
1566
+ const recommendations = [];
1567
+ const hasCritical = risks.some((r) => r.severity === "critical");
1568
+ const hasHigh = risks.some((r) => r.severity === "high");
1569
+ if (hasCritical) {
1570
+ recommendations.push("URGENT: Critical security risks detected - do not render this content");
1571
+ recommendations.push("Use aggressive sanitization before any processing");
1572
+ }
1573
+ if (hasHigh) {
1574
+ recommendations.push("High security risks detected - sanitization strongly recommended");
1575
+ recommendations.push("Consider rejecting this content or applying strict filtering");
1576
+ }
1577
+ if (level === "medium") {
1578
+ recommendations.push("Medium security risks detected - apply sanitization");
1579
+ recommendations.push("Review content carefully before use");
1580
+ }
1581
+ if (level === "low") {
1582
+ recommendations.push("Low security risks detected - basic sanitization recommended");
1583
+ }
1584
+ recommendations.push("Always validate content from untrusted sources");
1585
+ recommendations.push("Consider implementing Content Security Policy (CSP)");
1586
+ return { score, level, recommendations };
1587
+ };
1588
+
445
1589
  // src/index.ts
446
1590
  var isBrowser = typeof globalThis !== "undefined" && typeof globalThis.document !== "undefined";
447
1591
  var isNode = typeof process !== "undefined" && !!process.versions?.node;
448
1592
 
449
- export { addSpaceBetweenNumbers, addThousandsSpace, areArraysDeepEqualUnordered, areArraysEqual, basicSanitize, chunk, clamp, cleanObject, compact, debounce, deburr, difference, fill, flatten, flattenDepth, flattenDepthBase, flattenOnce, formatBytes, getStringSimilarity, groupBy, hasNilOrEmpty, humanFileSize, intersection, isBrowser, isFlattenable, isNil, isNilEmptyOrZeroLen, isNilOrEmpty, isNilOrNaN, isNilOrZeroLen, isNilText, isNode, isNullOrUndefined, isNullOrUndefinedEmptyOrZero, isNullOrUndefinedInArray, isNullOrUndefinedOrNaN, isNullOrUndefinedTextInc, isNullUndefinedOrEmpty, isNullUndefinedOrZero, objectToString, omit, otp, parseToNumber, pick, pluck, pushAll, randomDigits, removeDiacritics, round, safeParseInt, sanitize, shuffle, slugify, sortBy, stringSimilarity, throttle, toInteger, toNumber, uniq, uniqBy };
1593
+ export { addSpaceBetweenNumbers, addThousandsSpace, areArraysDeepEqualUnordered, areArraysEqual, assessSecurityRisks, basicSanitize, checkMarkdownSecurity, chunk, clamp, cleanObject, compact, currencyToSymbol, debounce, deburr, delay, difference, fill, flatten, flattenDepth, flattenDepthBase, flattenOnce, formatBytes, formatCurrency, getStringSimilarity, groupBy, hasNilOrEmpty, humanFileSize, intersection, isBrowser, isFlattenable, isNil, isNilEmptyOrZeroLen, isNilOrEmpty, isNilOrNaN, isNilOrZeroLen, isNilText, isNilTextOrEmpty, isNode, isNullOrUndefined, isNullOrUndefinedEmptyOrZero, isNullOrUndefinedInArray, isNullOrUndefinedOrNaN, isNullOrUndefinedTextInc, isNullUndefinedOrEmpty, isNullUndefinedOrEmptyEnforced, isNullUndefinedOrZero, isPTTaxId, isValidIBAN, isValidPTTaxId, objectToString, omit, otp, parseName, parseToBool, parseToNumber, pick, pluck, pushAll, randomDigits, removeDiacritics, round, safeParseInt, sanitize, sanitizeMarkdown, shuffle, slugify, sortBy, stringSimilarity, symbolToCurrency, throttle, toBool, toInteger, toNumber, uniq, uniqBy };
450
1594
  //# sourceMappingURL=index.js.map
451
1595
  //# sourceMappingURL=index.js.map