glin-profanity 2.3.8 → 3.1.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.
- package/README.md +197 -0
- package/dist/chunk-KNHWF6MX.js +5050 -0
- package/dist/index.cjs +2041 -272
- package/dist/index.d.cts +252 -87
- package/dist/index.d.ts +252 -87
- package/dist/index.js +50 -3306
- package/dist/ml/index.cjs +5513 -0
- package/dist/ml/index.d.cts +357 -0
- package/dist/ml/index.d.ts +357 -0
- package/dist/ml/index.js +557 -0
- package/dist/types-BgQe4FSE.d.cts +350 -0
- package/dist/types-BgQe4FSE.d.ts +350 -0
- package/package.json +38 -3
package/dist/index.cjs
CHANGED
|
@@ -1,26 +1,9 @@
|
|
|
1
1
|
var __create = Object.create;
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
|
-
var __defProps = Object.defineProperties;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
5
|
var __getProtoOf = Object.getPrototypeOf;
|
|
9
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
11
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
|
-
var __spreadValues = (a, b) => {
|
|
13
|
-
for (var prop in b || (b = {}))
|
|
14
|
-
if (__hasOwnProp.call(b, prop))
|
|
15
|
-
__defNormalProp(a, prop, b[prop]);
|
|
16
|
-
if (__getOwnPropSymbols)
|
|
17
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
18
|
-
if (__propIsEnum.call(b, prop))
|
|
19
|
-
__defNormalProp(a, prop, b[prop]);
|
|
20
|
-
}
|
|
21
|
-
return a;
|
|
22
|
-
};
|
|
23
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
24
7
|
var __commonJS = (cb, mod) => function __require() {
|
|
25
8
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
26
9
|
};
|
|
@@ -45,26 +28,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
45
28
|
mod
|
|
46
29
|
));
|
|
47
30
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
48
|
-
var __async = (__this, __arguments, generator) => {
|
|
49
|
-
return new Promise((resolve, reject) => {
|
|
50
|
-
var fulfilled = (value) => {
|
|
51
|
-
try {
|
|
52
|
-
step(generator.next(value));
|
|
53
|
-
} catch (e) {
|
|
54
|
-
reject(e);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
var rejected = (value) => {
|
|
58
|
-
try {
|
|
59
|
-
step(generator.throw(value));
|
|
60
|
-
} catch (e) {
|
|
61
|
-
reject(e);
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
65
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
66
|
-
});
|
|
67
|
-
};
|
|
68
31
|
|
|
69
32
|
// ../../node_modules/react/cjs/react.production.min.js
|
|
70
33
|
var require_react_production_min = __commonJS({
|
|
@@ -2233,7 +2196,19 @@ __export(index_exports, {
|
|
|
2233
2196
|
SeverityLevel: () => SeverityLevel,
|
|
2234
2197
|
checkProfanity: () => checkProfanity,
|
|
2235
2198
|
checkProfanityAsync: () => checkProfanityAsync,
|
|
2199
|
+
collapseRepeatedCharacters: () => collapseRepeatedCharacters,
|
|
2200
|
+
collapseSpacedCharacters: () => collapseSpacedCharacters,
|
|
2201
|
+
containsLeetspeak: () => containsLeetspeak,
|
|
2202
|
+
containsUnicodeObfuscation: () => containsUnicodeObfuscation,
|
|
2203
|
+
convertFullWidth: () => convertFullWidth,
|
|
2204
|
+
convertHomoglyphs: () => convertHomoglyphs,
|
|
2205
|
+
detectCharacterSets: () => detectCharacterSets,
|
|
2206
|
+
generateLeetspeakVariants: () => generateLeetspeakVariants,
|
|
2236
2207
|
isWordProfane: () => isWordProfane,
|
|
2208
|
+
normalizeLeetspeak: () => normalizeLeetspeak,
|
|
2209
|
+
normalizeNFKD: () => normalizeNFKD,
|
|
2210
|
+
normalizeUnicode: () => normalizeUnicode,
|
|
2211
|
+
removeZeroWidthCharacters: () => removeZeroWidthCharacters,
|
|
2237
2212
|
useProfanityChecker: () => useProfanityChecker
|
|
2238
2213
|
});
|
|
2239
2214
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -2770,6 +2745,203 @@ var danish_default = {
|
|
|
2770
2745
|
]
|
|
2771
2746
|
};
|
|
2772
2747
|
|
|
2748
|
+
// ../../shared/dictionaries/dutch.json
|
|
2749
|
+
var dutch_default = {
|
|
2750
|
+
words: [
|
|
2751
|
+
"aardappels afgieteng",
|
|
2752
|
+
"achter het raam zitten",
|
|
2753
|
+
"afberen",
|
|
2754
|
+
"aflebberen",
|
|
2755
|
+
"afrossen",
|
|
2756
|
+
"afrukken",
|
|
2757
|
+
"aftrekken",
|
|
2758
|
+
"afwerkplaats",
|
|
2759
|
+
"afzeiken",
|
|
2760
|
+
"afzuigen",
|
|
2761
|
+
"anderhalve man en een paardekop",
|
|
2762
|
+
"anita",
|
|
2763
|
+
"asbak",
|
|
2764
|
+
"aso",
|
|
2765
|
+
"bagger schijten",
|
|
2766
|
+
"balen",
|
|
2767
|
+
"bedonderen",
|
|
2768
|
+
"befborstelg",
|
|
2769
|
+
"beffen",
|
|
2770
|
+
"bekken",
|
|
2771
|
+
"belazeren",
|
|
2772
|
+
"besodemieterd zijn",
|
|
2773
|
+
"besodemieteren",
|
|
2774
|
+
"beurt",
|
|
2775
|
+
"boemelen",
|
|
2776
|
+
"boerelul",
|
|
2777
|
+
"boerenpummelg",
|
|
2778
|
+
"bokkelul",
|
|
2779
|
+
"botergeil",
|
|
2780
|
+
"broekhoesten",
|
|
2781
|
+
"brugpieperg",
|
|
2782
|
+
"buffelen",
|
|
2783
|
+
"buiten de pot piesen",
|
|
2784
|
+
"da's kloten van de bok",
|
|
2785
|
+
"de ballen",
|
|
2786
|
+
"de hoer spelen",
|
|
2787
|
+
"de hond uitlaten",
|
|
2788
|
+
"de koffer induiken",
|
|
2789
|
+
"delg",
|
|
2790
|
+
"de pijp aan maarten geven",
|
|
2791
|
+
"de pijp uitgaan",
|
|
2792
|
+
"dombo",
|
|
2793
|
+
"draaikontg",
|
|
2794
|
+
"driehoog achter wonen",
|
|
2795
|
+
"drolg",
|
|
2796
|
+
"drooggeiler",
|
|
2797
|
+
"droogkloot",
|
|
2798
|
+
"een beurt geven",
|
|
2799
|
+
"een nummertje maken",
|
|
2800
|
+
"een wip maken",
|
|
2801
|
+
"eikel",
|
|
2802
|
+
"engerd",
|
|
2803
|
+
"flamoes",
|
|
2804
|
+
"flikken",
|
|
2805
|
+
"flikker",
|
|
2806
|
+
"gadverdamme",
|
|
2807
|
+
"galbak",
|
|
2808
|
+
"gat",
|
|
2809
|
+
"gedoogzone",
|
|
2810
|
+
"geilneef",
|
|
2811
|
+
"gesodemieter",
|
|
2812
|
+
"godverdomme",
|
|
2813
|
+
"graftak",
|
|
2814
|
+
"gras maaien",
|
|
2815
|
+
"gratenkutg",
|
|
2816
|
+
"greppeldel",
|
|
2817
|
+
"griet",
|
|
2818
|
+
"hoempert",
|
|
2819
|
+
"hoer",
|
|
2820
|
+
"hoerenbuurt",
|
|
2821
|
+
"hoerenloper",
|
|
2822
|
+
"hoerig",
|
|
2823
|
+
"hol",
|
|
2824
|
+
"hufter",
|
|
2825
|
+
"huisdealer",
|
|
2826
|
+
"johny",
|
|
2827
|
+
"kanen",
|
|
2828
|
+
"kettingzeugg",
|
|
2829
|
+
"klaarkomen",
|
|
2830
|
+
"klerebeer",
|
|
2831
|
+
"klojo",
|
|
2832
|
+
"klooien",
|
|
2833
|
+
"klootjesvolk",
|
|
2834
|
+
"klootoog",
|
|
2835
|
+
"klootzak",
|
|
2836
|
+
"kloten",
|
|
2837
|
+
"knor",
|
|
2838
|
+
"kontg",
|
|
2839
|
+
"kontneuken",
|
|
2840
|
+
"krentekakker",
|
|
2841
|
+
"kut",
|
|
2842
|
+
"kuttelikkertje",
|
|
2843
|
+
"kwakkieg",
|
|
2844
|
+
"liefdesgrot",
|
|
2845
|
+
"lul",
|
|
2846
|
+
"lul-de-behanger",
|
|
2847
|
+
"lulhannes",
|
|
2848
|
+
"lummel",
|
|
2849
|
+
"mafketel",
|
|
2850
|
+
"matennaaierg",
|
|
2851
|
+
"matje",
|
|
2852
|
+
"mof",
|
|
2853
|
+
"mutsg",
|
|
2854
|
+
"naaien",
|
|
2855
|
+
"naakt",
|
|
2856
|
+
"neuken",
|
|
2857
|
+
"neukstier",
|
|
2858
|
+
"nicht",
|
|
2859
|
+
"oetlul",
|
|
2860
|
+
"opgeilen",
|
|
2861
|
+
"opkankeren",
|
|
2862
|
+
"oprotten",
|
|
2863
|
+
"opsodemieteren",
|
|
2864
|
+
"op z'n hondjes",
|
|
2865
|
+
"op z'n sodemieter geven",
|
|
2866
|
+
"opzouten",
|
|
2867
|
+
"ouwehoer",
|
|
2868
|
+
"ouwehoeren",
|
|
2869
|
+
"ouwe rukker",
|
|
2870
|
+
"paal",
|
|
2871
|
+
"paardelul",
|
|
2872
|
+
"palen",
|
|
2873
|
+
"penozeg",
|
|
2874
|
+
"piesen",
|
|
2875
|
+
"pijpbekkieg",
|
|
2876
|
+
"pijpen",
|
|
2877
|
+
"pik",
|
|
2878
|
+
"pleurislaaier",
|
|
2879
|
+
"poep",
|
|
2880
|
+
"poepen",
|
|
2881
|
+
"poot",
|
|
2882
|
+
"portiekslet",
|
|
2883
|
+
"pot",
|
|
2884
|
+
"potverdorie",
|
|
2885
|
+
"publiciteitsgeil",
|
|
2886
|
+
"raaskallen",
|
|
2887
|
+
"reet",
|
|
2888
|
+
"reetridder",
|
|
2889
|
+
"reet trappen, voor zijn",
|
|
2890
|
+
"remsporeng",
|
|
2891
|
+
"reutelen",
|
|
2892
|
+
"rothoer",
|
|
2893
|
+
"rotzak",
|
|
2894
|
+
"rukhond",
|
|
2895
|
+
"rukken",
|
|
2896
|
+
"schatje",
|
|
2897
|
+
"schijt",
|
|
2898
|
+
"schijten",
|
|
2899
|
+
"schoft",
|
|
2900
|
+
"schuinsmarcheerder",
|
|
2901
|
+
"shit",
|
|
2902
|
+
"slempen",
|
|
2903
|
+
"sletg",
|
|
2904
|
+
"sletterig",
|
|
2905
|
+
"slik mijn zaad",
|
|
2906
|
+
"snolg",
|
|
2907
|
+
"spuiten",
|
|
2908
|
+
"standje",
|
|
2909
|
+
"standje-69g",
|
|
2910
|
+
"stoephoer",
|
|
2911
|
+
"stootje",
|
|
2912
|
+
"strontg",
|
|
2913
|
+
"sufferdg",
|
|
2914
|
+
"tapijtnek",
|
|
2915
|
+
"teefg",
|
|
2916
|
+
"temeier",
|
|
2917
|
+
"teringlijer",
|
|
2918
|
+
"toeter",
|
|
2919
|
+
"tongzoeng",
|
|
2920
|
+
"triootjeg",
|
|
2921
|
+
"trottoir prostitu\xE9e",
|
|
2922
|
+
"trottoirteef",
|
|
2923
|
+
"vergallen",
|
|
2924
|
+
"verkloten",
|
|
2925
|
+
"verneuken",
|
|
2926
|
+
"viespeuk",
|
|
2927
|
+
"vingeren",
|
|
2928
|
+
"vleesroos",
|
|
2929
|
+
"voor jan lul",
|
|
2930
|
+
"voor jan-met-de-korte-achternaam",
|
|
2931
|
+
"watje",
|
|
2932
|
+
"welzijnsmafia",
|
|
2933
|
+
"wijf",
|
|
2934
|
+
"wippen",
|
|
2935
|
+
"wuftje",
|
|
2936
|
+
"zaadje",
|
|
2937
|
+
"zakkenwasser",
|
|
2938
|
+
"zeiken",
|
|
2939
|
+
"zeiker",
|
|
2940
|
+
"zuigen",
|
|
2941
|
+
"zuiplap"
|
|
2942
|
+
]
|
|
2943
|
+
};
|
|
2944
|
+
|
|
2773
2945
|
// ../../shared/dictionaries/esperanto.json
|
|
2774
2946
|
var esperanto_default = {
|
|
2775
2947
|
words: [
|
|
@@ -4562,197 +4734,1044 @@ var japanese_default = {
|
|
|
4562
4734
|
// ../../shared/dictionaries/turkish.json
|
|
4563
4735
|
var turkish_default = {
|
|
4564
4736
|
words: [
|
|
4565
|
-
"
|
|
4566
|
-
"
|
|
4567
|
-
"
|
|
4568
|
-
"
|
|
4569
|
-
"
|
|
4570
|
-
"
|
|
4571
|
-
"
|
|
4572
|
-
"
|
|
4573
|
-
"
|
|
4574
|
-
"
|
|
4575
|
-
"
|
|
4576
|
-
"
|
|
4577
|
-
"
|
|
4578
|
-
"
|
|
4579
|
-
"
|
|
4580
|
-
"
|
|
4581
|
-
"
|
|
4582
|
-
"
|
|
4583
|
-
"
|
|
4584
|
-
"
|
|
4585
|
-
"
|
|
4586
|
-
"
|
|
4587
|
-
"
|
|
4588
|
-
"
|
|
4589
|
-
"
|
|
4590
|
-
"
|
|
4591
|
-
"
|
|
4592
|
-
"
|
|
4593
|
-
"
|
|
4594
|
-
"
|
|
4595
|
-
"
|
|
4596
|
-
"
|
|
4597
|
-
"
|
|
4598
|
-
"
|
|
4599
|
-
"
|
|
4600
|
-
"
|
|
4601
|
-
"
|
|
4602
|
-
"
|
|
4603
|
-
"
|
|
4604
|
-
"
|
|
4605
|
-
"
|
|
4606
|
-
"
|
|
4607
|
-
"
|
|
4608
|
-
"
|
|
4609
|
-
"
|
|
4610
|
-
"
|
|
4611
|
-
"
|
|
4612
|
-
"
|
|
4613
|
-
"
|
|
4614
|
-
"
|
|
4615
|
-
"
|
|
4616
|
-
"
|
|
4617
|
-
"
|
|
4618
|
-
"
|
|
4619
|
-
"
|
|
4620
|
-
"
|
|
4621
|
-
"
|
|
4622
|
-
"
|
|
4623
|
-
"
|
|
4624
|
-
"
|
|
4625
|
-
"
|
|
4626
|
-
"
|
|
4627
|
-
"
|
|
4628
|
-
"
|
|
4629
|
-
"
|
|
4630
|
-
"
|
|
4631
|
-
"
|
|
4632
|
-
"
|
|
4633
|
-
"
|
|
4634
|
-
"
|
|
4635
|
-
"
|
|
4636
|
-
"
|
|
4637
|
-
"
|
|
4638
|
-
"
|
|
4639
|
-
"
|
|
4640
|
-
"
|
|
4641
|
-
"
|
|
4642
|
-
"
|
|
4643
|
-
"
|
|
4644
|
-
"
|
|
4645
|
-
"
|
|
4646
|
-
"
|
|
4647
|
-
"
|
|
4648
|
-
"
|
|
4649
|
-
"
|
|
4650
|
-
"
|
|
4651
|
-
"
|
|
4652
|
-
"
|
|
4653
|
-
"
|
|
4654
|
-
"
|
|
4655
|
-
"
|
|
4656
|
-
"
|
|
4657
|
-
"
|
|
4658
|
-
"
|
|
4659
|
-
"
|
|
4660
|
-
"
|
|
4661
|
-
"
|
|
4662
|
-
"
|
|
4663
|
-
"
|
|
4664
|
-
"
|
|
4665
|
-
"
|
|
4666
|
-
"
|
|
4667
|
-
"
|
|
4668
|
-
"
|
|
4669
|
-
"
|
|
4670
|
-
"
|
|
4671
|
-
"
|
|
4672
|
-
"
|
|
4673
|
-
"
|
|
4674
|
-
"
|
|
4675
|
-
"
|
|
4676
|
-
"
|
|
4677
|
-
"
|
|
4678
|
-
"
|
|
4679
|
-
"
|
|
4680
|
-
"
|
|
4681
|
-
"
|
|
4682
|
-
"
|
|
4683
|
-
"
|
|
4684
|
-
"
|
|
4685
|
-
"
|
|
4686
|
-
"
|
|
4687
|
-
"
|
|
4688
|
-
"
|
|
4689
|
-
"
|
|
4690
|
-
"
|
|
4691
|
-
"
|
|
4692
|
-
"
|
|
4693
|
-
"
|
|
4694
|
-
"
|
|
4695
|
-
"
|
|
4696
|
-
"
|
|
4697
|
-
"
|
|
4698
|
-
"
|
|
4699
|
-
"
|
|
4700
|
-
"
|
|
4701
|
-
"
|
|
4702
|
-
"
|
|
4703
|
-
"
|
|
4704
|
-
"
|
|
4705
|
-
"
|
|
4706
|
-
"
|
|
4707
|
-
"
|
|
4708
|
-
"
|
|
4709
|
-
"
|
|
4710
|
-
"
|
|
4711
|
-
"
|
|
4712
|
-
"
|
|
4713
|
-
"
|
|
4714
|
-
"
|
|
4737
|
+
"18+",
|
|
4738
|
+
"30+1",
|
|
4739
|
+
"31",
|
|
4740
|
+
":poop:",
|
|
4741
|
+
"a.g.",
|
|
4742
|
+
"a.mk",
|
|
4743
|
+
"a.q",
|
|
4744
|
+
"a.q.",
|
|
4745
|
+
"a.\u0131g",
|
|
4746
|
+
"abaza",
|
|
4747
|
+
"abazan",
|
|
4748
|
+
"adi",
|
|
4749
|
+
"ag",
|
|
4750
|
+
"ag.",
|
|
4751
|
+
"ahmak",
|
|
4752
|
+
"ak",
|
|
4753
|
+
"akp",
|
|
4754
|
+
"al a\u011Fz\u0131na",
|
|
4755
|
+
"allah",
|
|
4756
|
+
"allahs\u0131z",
|
|
4757
|
+
"am",
|
|
4758
|
+
"am biti",
|
|
4759
|
+
"am.k",
|
|
4760
|
+
"amar\u0131m",
|
|
4761
|
+
"ambiti",
|
|
4762
|
+
"amcik",
|
|
4763
|
+
"amck",
|
|
4764
|
+
"amckl",
|
|
4765
|
+
"amcklama",
|
|
4766
|
+
"amcklaryla",
|
|
4767
|
+
"amckta",
|
|
4768
|
+
"amcktan",
|
|
4769
|
+
"amcuk",
|
|
4770
|
+
"amc\u0131k",
|
|
4771
|
+
"amc\u0131k ho\u015Faf\u0131",
|
|
4772
|
+
"amc\u0131ka\u011F\u0131z",
|
|
4773
|
+
"amc\u0131klama",
|
|
4774
|
+
"amc\u0131kland\u0131",
|
|
4775
|
+
"amc\u0131klar\u0131",
|
|
4776
|
+
"amc\u0131\u011F\u0131 ",
|
|
4777
|
+
"amc\u0131\u011F\u0131n",
|
|
4778
|
+
"amc\u0131\u011F\u0131n\u0131",
|
|
4779
|
+
"amc\u0131\u011F\u0131n\u0131z\u0131",
|
|
4780
|
+
"amed",
|
|
4781
|
+
"amg",
|
|
4782
|
+
"amin oglu",
|
|
4783
|
+
"amina",
|
|
4784
|
+
"amina g",
|
|
4785
|
+
"amina k",
|
|
4786
|
+
"amina koyarim",
|
|
4787
|
+
"amina koyayim",
|
|
4788
|
+
"amina koyay\u0131m",
|
|
4789
|
+
"aminako",
|
|
4790
|
+
"aminakoyarim",
|
|
4791
|
+
"aminakoyim",
|
|
4792
|
+
"aminda",
|
|
4793
|
+
"amindan",
|
|
4794
|
+
"amindayken",
|
|
4795
|
+
"amini",
|
|
4796
|
+
"aminiyarraaniskiim",
|
|
4797
|
+
"aminoglu",
|
|
4798
|
+
"amiyum",
|
|
4799
|
+
"amk",
|
|
4800
|
+
"amk \xE7ocu\u011Fu",
|
|
4801
|
+
"amk.",
|
|
4802
|
+
"amkafa",
|
|
4803
|
+
"amlarnzn",
|
|
4804
|
+
"aml\u0131",
|
|
4805
|
+
"amm",
|
|
4806
|
+
"ammak",
|
|
4807
|
+
"ammna",
|
|
4808
|
+
"amm\u0131na",
|
|
4809
|
+
"amn",
|
|
4810
|
+
"amna",
|
|
4811
|
+
"amnda",
|
|
4812
|
+
"amndaki",
|
|
4813
|
+
"amngtn",
|
|
4814
|
+
"amnn",
|
|
4815
|
+
"amona",
|
|
4816
|
+
"amq",
|
|
4817
|
+
"amsiz",
|
|
4818
|
+
"amsz",
|
|
4819
|
+
"ams\u0131z",
|
|
4820
|
+
"amteri",
|
|
4821
|
+
"amugaa",
|
|
4822
|
+
"amuna",
|
|
4823
|
+
"amu\u011Fa",
|
|
4824
|
+
"am\u0131g",
|
|
4825
|
+
"am\u0131k",
|
|
4826
|
+
"am\u0131n",
|
|
4827
|
+
"am\u0131n feryad\u0131",
|
|
4828
|
+
"am\u0131n oglu",
|
|
4829
|
+
"am\u0131n o\u011Flu",
|
|
4830
|
+
"am\u0131na",
|
|
4831
|
+
"Am\u0131na",
|
|
4832
|
+
"am\u0131na g",
|
|
4833
|
+
"am\u0131na k",
|
|
4834
|
+
"am\u0131na koy",
|
|
4835
|
+
"am\u0131na koyar\u0131m",
|
|
4836
|
+
"am\u0131na koyay\u0131m",
|
|
4837
|
+
"am\u0131na koyim",
|
|
4838
|
+
"am\u0131na koyyim",
|
|
4839
|
+
"am\u0131na s",
|
|
4840
|
+
"am\u0131na sikem",
|
|
4841
|
+
"am\u0131na sokam",
|
|
4842
|
+
"am\u0131nad\xFCrz\xFC",
|
|
4843
|
+
"am\u0131nako",
|
|
4844
|
+
"am\u0131nakoyim",
|
|
4845
|
+
"am\u0131no\u011Flu",
|
|
4846
|
+
"am\u0131n\u0131",
|
|
4847
|
+
"am\u0131n\u0131 s",
|
|
4848
|
+
"am\u0131s\u0131na",
|
|
4849
|
+
"am\u0131s\u0131n\u0131",
|
|
4850
|
+
"ana",
|
|
4851
|
+
"anaaann",
|
|
4852
|
+
"anal",
|
|
4853
|
+
"analarn",
|
|
4854
|
+
"anam",
|
|
4855
|
+
"anamla",
|
|
4856
|
+
"anan",
|
|
4857
|
+
"anana",
|
|
4858
|
+
"anandan",
|
|
4859
|
+
"anani",
|
|
4860
|
+
"anani sikerim",
|
|
4861
|
+
"anani sikeyim",
|
|
4862
|
+
"ananin",
|
|
4863
|
+
"ananisikerim",
|
|
4864
|
+
"ananisikeyim",
|
|
4865
|
+
"anann",
|
|
4866
|
+
"ananz",
|
|
4867
|
+
"anan\u0131",
|
|
4868
|
+
"anan\u0131 ",
|
|
4869
|
+
"anan\u0131 sikerim",
|
|
4870
|
+
"anan\u0131 sikeyim",
|
|
4871
|
+
"anan\u0131n",
|
|
4872
|
+
"anan\u0131n am",
|
|
4873
|
+
"anan\u0131n am\u0131",
|
|
4874
|
+
"anan\u0131n d\xF6l\xFC",
|
|
4875
|
+
"anan\u0131nki",
|
|
4876
|
+
"anan\u0131sikerim",
|
|
4877
|
+
"anan\u0131sikeyim",
|
|
4878
|
+
"anan\u0131z\u0131",
|
|
4879
|
+
"anan\u0131z\u0131n",
|
|
4880
|
+
"anan\u0131z\u0131n am",
|
|
4881
|
+
"anas",
|
|
4882
|
+
"anasi",
|
|
4883
|
+
"anasinin",
|
|
4884
|
+
"anas\u0131 orospu",
|
|
4885
|
+
"anas\u0131n\u0131",
|
|
4886
|
+
"anas\u0131n\u0131 avrad\u0131n\u0131",
|
|
4887
|
+
"anas\u0131n\u0131n am",
|
|
4888
|
+
"anay",
|
|
4889
|
+
"anayin",
|
|
4890
|
+
"angut",
|
|
4891
|
+
"anl\u0131k be\u011Feni",
|
|
4892
|
+
"anneni",
|
|
4893
|
+
"annenin",
|
|
4894
|
+
"annesiz",
|
|
4895
|
+
"anuna",
|
|
4896
|
+
"aptal",
|
|
4897
|
+
"aq",
|
|
4898
|
+
"aq.",
|
|
4899
|
+
"ass",
|
|
4900
|
+
"atkafas\u0131",
|
|
4901
|
+
"atm\u0131k",
|
|
4902
|
+
"attrrm",
|
|
4903
|
+
"att\u0131rd\u0131\u011F\u0131m",
|
|
4904
|
+
"auzlu",
|
|
4905
|
+
"avon",
|
|
4906
|
+
"avrad\u0131n\u0131",
|
|
4907
|
+
"avrat",
|
|
4908
|
+
"ayklarmalrmsikerim",
|
|
4909
|
+
"azd\u0131m",
|
|
4910
|
+
"azd\u0131r",
|
|
4911
|
+
"azd\u0131r\u0131c\u0131",
|
|
4912
|
+
"a\u011Fz\u0131na",
|
|
4913
|
+
"a\u011Fz\u0131na s\u0131\xE7ay\u0131m",
|
|
4914
|
+
"a\u015Fa\u011Fl\u0131k",
|
|
4915
|
+
"a\u015Fa\u011Fl\u0131ksn\u0131z",
|
|
4916
|
+
"a\u015Fa\u011F\u0131l\u0131ks\u0131n",
|
|
4917
|
+
"a\u015Fa\u011F\u0131l\u0131ks\u0131n\u0131z",
|
|
4918
|
+
"b.k",
|
|
4919
|
+
"babaannesi ka\u015Far",
|
|
4920
|
+
"babafingo",
|
|
4921
|
+
"babani",
|
|
4922
|
+
"baban\u0131",
|
|
4923
|
+
"baban\u0131n",
|
|
4924
|
+
"babas\u0131 pezevenk",
|
|
4925
|
+
"babas\u0131 tornac\u0131 anas\u0131 orospu",
|
|
4926
|
+
"baca\u011F\u0131na s\u0131\xE7ay\u0131m",
|
|
4927
|
+
"bacini",
|
|
4928
|
+
"bacn",
|
|
4929
|
+
"bacndan",
|
|
4930
|
+
"bacy",
|
|
4931
|
+
"bac\u0131n",
|
|
4932
|
+
"bac\u0131na",
|
|
4933
|
+
"bac\u0131n\u0131",
|
|
4934
|
+
"bac\u0131n\u0131n",
|
|
4935
|
+
"bastard",
|
|
4936
|
+
"basur",
|
|
4937
|
+
"bayanlar",
|
|
4938
|
+
"beyinsiz",
|
|
4939
|
+
"be\u011Fen",
|
|
4940
|
+
"be\u011Fenirmisiniz",
|
|
4941
|
+
"bira",
|
|
4942
|
+
"biseksuel",
|
|
4943
|
+
"bisekuel",
|
|
4944
|
+
"bisexual",
|
|
4945
|
+
"bisikiverem",
|
|
4946
|
+
"bitch",
|
|
4947
|
+
"biting",
|
|
4948
|
+
"bok",
|
|
4949
|
+
"boka",
|
|
4950
|
+
"bokbok",
|
|
4951
|
+
"bokhu",
|
|
4952
|
+
"bokkkumu",
|
|
4953
|
+
"boklar",
|
|
4954
|
+
"boktan",
|
|
4955
|
+
"boku",
|
|
4956
|
+
"bokubokuna",
|
|
4957
|
+
"bokum",
|
|
4958
|
+
"bok\xE7a",
|
|
4959
|
+
"bombok",
|
|
4960
|
+
"boner",
|
|
4961
|
+
"bosalmak",
|
|
4962
|
+
"boycot",
|
|
4963
|
+
"boycott",
|
|
4964
|
+
"boykot",
|
|
4965
|
+
"bo\u015Falmak",
|
|
4966
|
+
"bo\u015Fluk",
|
|
4967
|
+
"browni",
|
|
4968
|
+
"b\u0131z\u0131r",
|
|
4969
|
+
"ccc",
|
|
4970
|
+
"ccc ccc",
|
|
4971
|
+
"ccc incisiker ccc",
|
|
4972
|
+
"cccincisikerccc",
|
|
4973
|
+
"ccs colgate ccc",
|
|
4974
|
+
"cenabet",
|
|
4975
|
+
"cibiliyetsiz",
|
|
4976
|
+
"cibilliyetini",
|
|
4977
|
+
"cibilliyetsiz",
|
|
4978
|
+
"cif",
|
|
4979
|
+
"cikar",
|
|
4980
|
+
"cim",
|
|
4981
|
+
"cm",
|
|
4982
|
+
"coca cola",
|
|
4983
|
+
"cola",
|
|
4984
|
+
"dalaks\u0131z",
|
|
4985
|
+
"dallama",
|
|
4986
|
+
"daltassak",
|
|
4987
|
+
"dalyarak",
|
|
4988
|
+
"dalyarrak",
|
|
4989
|
+
"dangalak",
|
|
4990
|
+
"dasak",
|
|
4991
|
+
"dassagi",
|
|
4992
|
+
"dassak",
|
|
4993
|
+
"da\u015Fak",
|
|
4994
|
+
"da\u015F\u015Fak",
|
|
4995
|
+
"da\u015F\u015Faks\u0131z",
|
|
4996
|
+
"dede",
|
|
4997
|
+
"destek",
|
|
4998
|
+
"destekk",
|
|
4999
|
+
"deste\u011Finizi",
|
|
5000
|
+
"devsol",
|
|
5001
|
+
"dhkp",
|
|
5002
|
+
"diktim",
|
|
5003
|
+
"dildo",
|
|
5004
|
+
"din",
|
|
5005
|
+
"dinci",
|
|
5006
|
+
"dingil",
|
|
5007
|
+
"dingilini",
|
|
5008
|
+
"dinsiz",
|
|
5009
|
+
"dkerim",
|
|
5010
|
+
"domal",
|
|
5011
|
+
"domalan",
|
|
5012
|
+
"domald\u0131",
|
|
5013
|
+
"domald\u0131n",
|
|
5014
|
+
"domalmak",
|
|
5015
|
+
"domalm\u0131\u015F",
|
|
5016
|
+
"domals\u0131n",
|
|
5017
|
+
"domalt",
|
|
5018
|
+
"domaltarak",
|
|
5019
|
+
"domaltip",
|
|
5020
|
+
"domaltmak",
|
|
5021
|
+
"domalt\u0131p",
|
|
5022
|
+
"domalt\u0131r",
|
|
5023
|
+
"domalt\u0131r\u0131m",
|
|
5024
|
+
"domal\u0131k",
|
|
5025
|
+
"domal\u0131yor",
|
|
5026
|
+
"domuz yag\u0131",
|
|
5027
|
+
"domuz ya\u011F\u0131",
|
|
5028
|
+
"domuzyag\u0131",
|
|
5029
|
+
"durum",
|
|
5030
|
+
"d\xF6l\xFC",
|
|
5031
|
+
"d\xF6nek",
|
|
5032
|
+
"d\xFCd\xFCk",
|
|
5033
|
+
"d\xFCrz\xFC",
|
|
5034
|
+
"eben",
|
|
5035
|
+
"ebeni",
|
|
5036
|
+
"ebenin",
|
|
5037
|
+
"ebeninki",
|
|
5038
|
+
"ebleh",
|
|
5039
|
+
"ecdadini",
|
|
5040
|
+
"ecdad\u0131n\u0131",
|
|
5041
|
+
"edit",
|
|
5042
|
+
"embesil",
|
|
5043
|
+
"emek server",
|
|
5044
|
+
"emi",
|
|
5045
|
+
"ensest",
|
|
5046
|
+
"erotik",
|
|
5047
|
+
"escinsel",
|
|
5048
|
+
"ev han\u0131mlar\u0131",
|
|
5049
|
+
"ezik",
|
|
5050
|
+
"e\u015Fcinsel",
|
|
5051
|
+
"fahise",
|
|
5052
|
+
"fahi\u015Fe",
|
|
5053
|
+
"farmasi",
|
|
5054
|
+
"fasist",
|
|
5055
|
+
"fasizm",
|
|
5056
|
+
"fa\u015Fist",
|
|
5057
|
+
"fa\u015Fizm",
|
|
5058
|
+
"feri\u015Ftah",
|
|
5059
|
+
"ferre",
|
|
5060
|
+
"fuck",
|
|
5061
|
+
"fucker",
|
|
5062
|
+
"fuckin",
|
|
5063
|
+
"fucking",
|
|
5064
|
+
"f\u0131rsat",
|
|
5065
|
+
"g*t",
|
|
5066
|
+
"g*t\xFC",
|
|
5067
|
+
"g*t\xFCn",
|
|
5068
|
+
"g*t\xFCne",
|
|
5069
|
+
"g.t",
|
|
5070
|
+
"gasp",
|
|
5071
|
+
"gavad",
|
|
5072
|
+
"gavat",
|
|
5073
|
+
"gavurun d\xF6l\xFC",
|
|
5074
|
+
"gay",
|
|
5075
|
+
"geber",
|
|
5076
|
+
"geberik",
|
|
5077
|
+
"gebermek",
|
|
5078
|
+
"gebermi\u015F",
|
|
5079
|
+
"gebersin",
|
|
5080
|
+
"gebertir",
|
|
5081
|
+
"geri zekal\u0131",
|
|
5082
|
+
"gerizekali",
|
|
5083
|
+
"gerizekal\u0131",
|
|
5084
|
+
"gerizekal\u0131d\u0131r",
|
|
5085
|
+
"gerzek",
|
|
5086
|
+
"ger\u0131 zekal\u0131d\u0131r",
|
|
5087
|
+
"ger\u0131zekal\u0131",
|
|
5088
|
+
"giberim",
|
|
5089
|
+
"giberler",
|
|
5090
|
+
"gibis",
|
|
5091
|
+
"gibi\u015F",
|
|
5092
|
+
"gibmek",
|
|
5093
|
+
"gibtiler",
|
|
5094
|
+
"giren \xE7\u0131kan",
|
|
5095
|
+
"goddamn",
|
|
5096
|
+
"godo\u015F",
|
|
5097
|
+
"godumun",
|
|
5098
|
+
"got",
|
|
5099
|
+
"gotelek",
|
|
5100
|
+
"gotlalesi",
|
|
5101
|
+
"gotlu",
|
|
5102
|
+
"gotten",
|
|
5103
|
+
"gotundeki",
|
|
5104
|
+
"gotunden",
|
|
5105
|
+
"gotune",
|
|
5106
|
+
"gotunu",
|
|
5107
|
+
"gotuze",
|
|
5108
|
+
"gotveren",
|
|
5109
|
+
"goyiim",
|
|
5110
|
+
"goyum",
|
|
5111
|
+
"goyuyim",
|
|
5112
|
+
"goyyim",
|
|
5113
|
+
"gtelek",
|
|
5114
|
+
"gtn",
|
|
5115
|
+
"gtnde",
|
|
5116
|
+
"gtnden",
|
|
5117
|
+
"gtne",
|
|
5118
|
+
"gtten",
|
|
5119
|
+
"gtveren",
|
|
5120
|
+
"guat",
|
|
5121
|
+
"g\xF6t",
|
|
5122
|
+
"g\xF6t deli\u011Fi",
|
|
5123
|
+
"g\xF6t herif",
|
|
5124
|
+
"g\xF6t o\u011Flan\u0131",
|
|
5125
|
+
"g\xF6t veren",
|
|
5126
|
+
"g\xF6t verir",
|
|
5127
|
+
"g\xF6te",
|
|
5128
|
+
"g\xF6telek",
|
|
5129
|
+
"g\xF6tlalesi",
|
|
5130
|
+
"g\xF6tlek",
|
|
5131
|
+
"g\xF6to\u011Flan\u0131",
|
|
5132
|
+
"g\xF6to\u015F",
|
|
5133
|
+
"g\xF6ts\xFCn",
|
|
5134
|
+
"g\xF6ts\xFCn\xFCz",
|
|
5135
|
+
"g\xF6tten",
|
|
5136
|
+
"g\xF6tveren",
|
|
5137
|
+
"g\xF6tvern",
|
|
5138
|
+
"g\xF6t\xFC",
|
|
5139
|
+
"g\xF6t\xFCn",
|
|
5140
|
+
"g\xF6t\xFCne",
|
|
5141
|
+
"g\xF6t\xFCne koyim",
|
|
5142
|
+
"g\xF6t\xFCnekoyim",
|
|
5143
|
+
"g\xF6t\xFCn\xFC",
|
|
5144
|
+
"g\xF6t\xFCn\xFCze",
|
|
5145
|
+
"g\xF6t\xFCyle",
|
|
5146
|
+
"g\xF6\u011F\xFCs",
|
|
5147
|
+
"hack",
|
|
5148
|
+
"han\u0131mlar",
|
|
5149
|
+
"has siktir",
|
|
5150
|
+
"hasiktir",
|
|
5151
|
+
"hasiktr",
|
|
5152
|
+
"hassikome",
|
|
5153
|
+
"hassiktir",
|
|
5154
|
+
"hassittir",
|
|
5155
|
+
"hastir",
|
|
5156
|
+
"haydar",
|
|
5157
|
+
"haysiyetsiz",
|
|
5158
|
+
"hayvan",
|
|
5159
|
+
"hayvan herif",
|
|
5160
|
+
"ha\u015Fgerya",
|
|
5161
|
+
"hile",
|
|
5162
|
+
"hizbullah",
|
|
5163
|
+
"homo",
|
|
5164
|
+
"ho\u015Faf\u0131",
|
|
5165
|
+
"hristiyan",
|
|
5166
|
+
"hsktr",
|
|
5167
|
+
"huur",
|
|
5168
|
+
"hz.muhammed",
|
|
5169
|
+
"hz.\xF6mer",
|
|
5170
|
+
"h\xF6d\xFCk",
|
|
5171
|
+
"h\u0131rs\u0131z",
|
|
5172
|
+
"h\u0131yar",
|
|
5173
|
+
"h\u0131yara\u011Fas\u0131",
|
|
5174
|
+
"i.ne",
|
|
5175
|
+
"ibina",
|
|
5176
|
+
"ibine",
|
|
5177
|
+
"ibinenin",
|
|
5178
|
+
"ibne",
|
|
5179
|
+
"ibnedir",
|
|
5180
|
+
"ibneler",
|
|
5181
|
+
"ibneleri",
|
|
5182
|
+
"ibnelik",
|
|
5183
|
+
"ibneli\u011Fi",
|
|
5184
|
+
"ibnelri",
|
|
5185
|
+
"ibneni",
|
|
5186
|
+
"ibnenin",
|
|
5187
|
+
"ibnerator",
|
|
5188
|
+
"ibnesi",
|
|
5189
|
+
"idiot",
|
|
5190
|
+
"idiyot",
|
|
5191
|
+
"igrenc",
|
|
5192
|
+
"ilk yorum",
|
|
5193
|
+
"imansz",
|
|
5194
|
+
"inci siker",
|
|
5195
|
+
"incisike",
|
|
5196
|
+
"incisiker",
|
|
5197
|
+
"ipne",
|
|
5198
|
+
"ipneler",
|
|
5199
|
+
"irsail",
|
|
5200
|
+
"iserim",
|
|
5201
|
+
"israil",
|
|
5202
|
+
"israli",
|
|
5203
|
+
"israyil",
|
|
5204
|
+
"isra\u0131l",
|
|
5205
|
+
"it",
|
|
5206
|
+
"iti",
|
|
5207
|
+
"itler",
|
|
5208
|
+
"ito\u011Flu it",
|
|
5209
|
+
"izrail",
|
|
5210
|
+
"i\u011Fren\xE7",
|
|
5211
|
+
"i\u015F f\u0131rsat\u0131",
|
|
5212
|
+
"i\u015Ferim",
|
|
5213
|
+
"k.o.c",
|
|
5214
|
+
"k.o.\xE7",
|
|
5215
|
+
"kadek",
|
|
5216
|
+
"kafam girsin",
|
|
5217
|
+
"kafasiz",
|
|
5218
|
+
"kafas\u0131z",
|
|
5219
|
+
"kahpe",
|
|
5220
|
+
"kahpenin",
|
|
5221
|
+
"kahpenin feryad\u0131",
|
|
5222
|
+
"kaka",
|
|
5223
|
+
"kaltak",
|
|
5224
|
+
"kancik",
|
|
5225
|
+
"kanc\u0131k",
|
|
5226
|
+
"kan\u0131",
|
|
5227
|
+
"kan\u0131 bozuk",
|
|
5228
|
+
"kappe",
|
|
5229
|
+
"karhane",
|
|
5230
|
+
"kariyer f\u0131rsat\u0131",
|
|
5231
|
+
"kavat",
|
|
5232
|
+
"kavatn",
|
|
5233
|
+
"kaypak",
|
|
5234
|
+
"kayyum",
|
|
5235
|
+
"kazik",
|
|
5236
|
+
"kazma",
|
|
5237
|
+
"kaz\u0131k",
|
|
5238
|
+
"ka\xE7\u0131rma",
|
|
5239
|
+
"ka\u015Far",
|
|
5240
|
+
"kerane",
|
|
5241
|
+
"kerhane",
|
|
5242
|
+
"kerhanelerde",
|
|
5243
|
+
"keriz",
|
|
5244
|
+
"kerizler",
|
|
5245
|
+
"kevase",
|
|
5246
|
+
"keva\u015Fe",
|
|
5247
|
+
"kevvase",
|
|
5248
|
+
"koca g\xF6t",
|
|
5249
|
+
"kodumun",
|
|
5250
|
+
"kodumunun",
|
|
5251
|
+
"koduumun",
|
|
5252
|
+
"kodu\u011Fmun",
|
|
5253
|
+
"kodu\u011Fmunun",
|
|
5254
|
+
"komonist",
|
|
5255
|
+
"komunist",
|
|
5256
|
+
"komunizm",
|
|
5257
|
+
"kom\xFCnist",
|
|
5258
|
+
"kom\xFCnizm",
|
|
5259
|
+
"kongragel",
|
|
5260
|
+
"kopegi",
|
|
5261
|
+
"kope\u011Fi",
|
|
5262
|
+
"koyarm",
|
|
5263
|
+
"koyay\u0131m",
|
|
5264
|
+
"koyiim",
|
|
5265
|
+
"koyiiym",
|
|
5266
|
+
"koyim",
|
|
5267
|
+
"koyum",
|
|
5268
|
+
"koyyim",
|
|
5269
|
+
"krar",
|
|
5270
|
+
"kro",
|
|
5271
|
+
"kro musunuz",
|
|
5272
|
+
"kromusunuz",
|
|
5273
|
+
"kuku",
|
|
5274
|
+
"kukudaym",
|
|
5275
|
+
"kurdistan",
|
|
5276
|
+
"k\xF6peginin",
|
|
5277
|
+
"k\xF6pekle\u015Fme",
|
|
5278
|
+
"k\xFCrdistan",
|
|
5279
|
+
"k\u0131ro",
|
|
5280
|
+
"k\u0131\xE7",
|
|
5281
|
+
"k\u0131\xE7\u0131n\u0131z",
|
|
5282
|
+
"k\u0131\xE7\u0131n\u0131za",
|
|
5283
|
+
"l.an",
|
|
5284
|
+
"laciye boyad\u0131m",
|
|
5285
|
+
"lan",
|
|
5286
|
+
"lanet",
|
|
5287
|
+
"lann",
|
|
5288
|
+
"lannn",
|
|
5289
|
+
"lavuk",
|
|
5290
|
+
"len",
|
|
5291
|
+
"leyn",
|
|
5292
|
+
"lezle",
|
|
5293
|
+
"lezler",
|
|
5294
|
+
"libo\u015F",
|
|
5295
|
+
"madafaka",
|
|
5296
|
+
"mal",
|
|
5297
|
+
"malafat",
|
|
5298
|
+
"malak",
|
|
5299
|
+
"mallar",
|
|
5300
|
+
"manda",
|
|
5301
|
+
"mankafa",
|
|
5302
|
+
"manyak",
|
|
5303
|
+
"mcik",
|
|
5304
|
+
"meme",
|
|
5305
|
+
"memelerini",
|
|
5306
|
+
"memi\u015F",
|
|
5307
|
+
"mezveleli",
|
|
5308
|
+
"minaamc\u0131k",
|
|
5309
|
+
"mincikliyim",
|
|
5310
|
+
"mk",
|
|
5311
|
+
"mna",
|
|
5312
|
+
"moloz",
|
|
5313
|
+
"monakkoluyum",
|
|
5314
|
+
"moron",
|
|
5315
|
+
"motherfucker",
|
|
5316
|
+
"mudik",
|
|
5317
|
+
"musevi",
|
|
5318
|
+
"musevi bozuk",
|
|
5319
|
+
"m\xFCsl\xFCman",
|
|
5320
|
+
"nah",
|
|
5321
|
+
"o \xE7",
|
|
5322
|
+
"o. \xE7ocu\u011Fu",
|
|
5323
|
+
"o.\xE7",
|
|
5324
|
+
"o.\xE7.",
|
|
5325
|
+
"oc",
|
|
5326
|
+
"ocuu",
|
|
5327
|
+
"ocuun",
|
|
5328
|
+
"odun",
|
|
5329
|
+
"okuz",
|
|
5330
|
+
"oriflame",
|
|
5331
|
+
"orosbu",
|
|
5332
|
+
"orosbucocuu",
|
|
5333
|
+
"orospu",
|
|
5334
|
+
"orospu cocugu",
|
|
5335
|
+
"orospu \xE7oc",
|
|
5336
|
+
"orospu \xE7ocuklar\u0131",
|
|
5337
|
+
"orospu \xE7ocu\u011Fu",
|
|
5338
|
+
"orospu \xE7ocu\u011Fudur",
|
|
5339
|
+
"orospucocugu",
|
|
5340
|
+
"orospudur",
|
|
5341
|
+
"orospular",
|
|
5342
|
+
"orospunun",
|
|
5343
|
+
"orospunun evlad\u0131",
|
|
5344
|
+
"orospuydu",
|
|
5345
|
+
"orospuyuz",
|
|
5346
|
+
"orospu\xE7ocu\u011Fu",
|
|
5347
|
+
"orostoban",
|
|
5348
|
+
"orostopol",
|
|
5349
|
+
"orrospu",
|
|
5350
|
+
"oruc",
|
|
5351
|
+
"oruspu",
|
|
5352
|
+
"oruspu \xE7ocu\u011Fu",
|
|
5353
|
+
"oruspu\xE7ocu\u011Fu",
|
|
5354
|
+
"oru\xE7",
|
|
5355
|
+
"osbir",
|
|
5356
|
+
"ossurduum",
|
|
5357
|
+
"ossurmak",
|
|
5358
|
+
"ossuruk",
|
|
5359
|
+
"osur",
|
|
5360
|
+
"osuram",
|
|
5361
|
+
"osurduu",
|
|
5362
|
+
"osuruk",
|
|
5363
|
+
"osururum",
|
|
5364
|
+
"otusbir",
|
|
5365
|
+
"otuzbir",
|
|
5366
|
+
"oyna",
|
|
5367
|
+
"O\xC7",
|
|
5368
|
+
"o\xE7",
|
|
5369
|
+
"o\xE7.",
|
|
5370
|
+
"o\u011Flan",
|
|
5371
|
+
"o\u011Flanc\u0131",
|
|
5372
|
+
"o\u011Flu it",
|
|
5373
|
+
"p kk",
|
|
5374
|
+
"patlak zar",
|
|
5375
|
+
"penis",
|
|
5376
|
+
"peygamber",
|
|
5377
|
+
"pezevek",
|
|
5378
|
+
"pezeven",
|
|
5379
|
+
"pezeveng",
|
|
5380
|
+
"pezevengi",
|
|
5381
|
+
"pezevengin evlad\u0131",
|
|
5382
|
+
"pezevenk",
|
|
5383
|
+
"pezevenkler",
|
|
5384
|
+
"pezo",
|
|
5385
|
+
"pic",
|
|
5386
|
+
"pici",
|
|
5387
|
+
"picler",
|
|
5388
|
+
"pipi",
|
|
5389
|
+
"pipi\u015F",
|
|
5390
|
+
"pis",
|
|
5391
|
+
"pisliktir",
|
|
5392
|
+
"pi\xE7",
|
|
5393
|
+
"pi\xE7 kurusu",
|
|
5394
|
+
"pi\xE7i",
|
|
5395
|
+
"pi\xE7in o\u011Flu",
|
|
5396
|
+
"pi\xE7inin",
|
|
5397
|
+
"pi\xE7ler",
|
|
5398
|
+
"pi\xE7sin",
|
|
5399
|
+
"pi\xE7siniz",
|
|
5400
|
+
"pkk",
|
|
5401
|
+
"pok",
|
|
5402
|
+
"pokunu",
|
|
5403
|
+
"pompalama",
|
|
5404
|
+
"pompalamak",
|
|
5405
|
+
"porn",
|
|
5406
|
+
"porno",
|
|
5407
|
+
"protesto",
|
|
5408
|
+
"pussy",
|
|
5409
|
+
"putpererst",
|
|
5410
|
+
"putperest",
|
|
5411
|
+
"pu\u015Ft",
|
|
5412
|
+
"pu\u015Fttur",
|
|
5413
|
+
"pvp",
|
|
5414
|
+
"rahminde",
|
|
5415
|
+
"rak",
|
|
5416
|
+
"rak\u0131",
|
|
5417
|
+
"revizyonist",
|
|
5418
|
+
"s.ikerim",
|
|
5419
|
+
"s.iktm",
|
|
5420
|
+
"s.ktir",
|
|
5421
|
+
"s.tir",
|
|
5422
|
+
"s1kerim",
|
|
5423
|
+
"s1kerm",
|
|
5424
|
+
"s1krm",
|
|
5425
|
+
"sahtekar",
|
|
5426
|
+
"sakso",
|
|
5427
|
+
"saksofon",
|
|
5428
|
+
"salaak",
|
|
5429
|
+
"salak",
|
|
5430
|
+
"sana ne",
|
|
5431
|
+
"sanane",
|
|
5432
|
+
"saxo",
|
|
5433
|
+
"sayfa",
|
|
5434
|
+
"sekis",
|
|
5435
|
+
"seks",
|
|
5436
|
+
"serefsiz",
|
|
5437
|
+
"serefsz",
|
|
5438
|
+
"serefszler",
|
|
5439
|
+
"sevgi koyar\u0131m",
|
|
5440
|
+
"sevi\u015F",
|
|
5441
|
+
"sevi\u015Felim",
|
|
5442
|
+
"sevi\u015Fmek",
|
|
5443
|
+
"sex",
|
|
5444
|
+
"sexs",
|
|
4715
5445
|
"shit",
|
|
4716
|
-
"
|
|
4717
|
-
"
|
|
4718
|
-
"
|
|
4719
|
-
"
|
|
4720
|
-
"
|
|
4721
|
-
"
|
|
4722
|
-
"
|
|
4723
|
-
"
|
|
4724
|
-
"
|
|
4725
|
-
"
|
|
4726
|
-
"
|
|
4727
|
-
"
|
|
4728
|
-
"
|
|
4729
|
-
"
|
|
4730
|
-
"
|
|
4731
|
-
"
|
|
4732
|
-
"
|
|
4733
|
-
"
|
|
4734
|
-
"
|
|
4735
|
-
"
|
|
4736
|
-
"
|
|
4737
|
-
"
|
|
4738
|
-
"
|
|
4739
|
-
"
|
|
4740
|
-
"
|
|
4741
|
-
"
|
|
4742
|
-
"
|
|
4743
|
-
"
|
|
4744
|
-
"
|
|
4745
|
-
"
|
|
4746
|
-
"
|
|
4747
|
-
"
|
|
4748
|
-
"
|
|
4749
|
-
"
|
|
4750
|
-
"
|
|
4751
|
-
"
|
|
4752
|
-
"
|
|
4753
|
-
"
|
|
4754
|
-
"
|
|
4755
|
-
"
|
|
5446
|
+
"si.\xE7mak",
|
|
5447
|
+
"sicarsin",
|
|
5448
|
+
"sicmak",
|
|
5449
|
+
"sicti",
|
|
5450
|
+
"sie",
|
|
5451
|
+
"sigara",
|
|
5452
|
+
"sik",
|
|
5453
|
+
"sik k\u0131r\u0131\u011F\u0131",
|
|
5454
|
+
"sikdi",
|
|
5455
|
+
"sikdi\u011Fim",
|
|
5456
|
+
"sike",
|
|
5457
|
+
"sikecem",
|
|
5458
|
+
"sikem",
|
|
5459
|
+
"siken",
|
|
5460
|
+
"sikenin",
|
|
5461
|
+
"siker",
|
|
5462
|
+
"sikerim",
|
|
5463
|
+
"sikerler",
|
|
5464
|
+
"sikersin",
|
|
5465
|
+
"sikert",
|
|
5466
|
+
"sikertir",
|
|
5467
|
+
"sikertirler",
|
|
5468
|
+
"sikertmek",
|
|
5469
|
+
"sikesen",
|
|
5470
|
+
"sikesicenin",
|
|
5471
|
+
"sikey",
|
|
5472
|
+
"sikeydim",
|
|
5473
|
+
"sikeyim",
|
|
5474
|
+
"sikeym",
|
|
5475
|
+
"siki",
|
|
5476
|
+
"sikicem",
|
|
5477
|
+
"sikici",
|
|
5478
|
+
"sikien",
|
|
5479
|
+
"sikienler",
|
|
5480
|
+
"sikiiim",
|
|
5481
|
+
"sikiiimmm",
|
|
5482
|
+
"sikiim",
|
|
5483
|
+
"sikiir",
|
|
5484
|
+
"sikiirken",
|
|
5485
|
+
"sikik",
|
|
5486
|
+
"sikil",
|
|
5487
|
+
"sikildiini",
|
|
5488
|
+
"sikilesice",
|
|
5489
|
+
"sikilmi",
|
|
5490
|
+
"sikilmie",
|
|
5491
|
+
"sikilmis",
|
|
5492
|
+
"sikilmi\u015F",
|
|
5493
|
+
"sikilsin",
|
|
5494
|
+
"sikim",
|
|
5495
|
+
"sikimde",
|
|
5496
|
+
"sikimden",
|
|
5497
|
+
"sikime",
|
|
5498
|
+
"sikimi",
|
|
5499
|
+
"sikimiin",
|
|
5500
|
+
"sikimin",
|
|
5501
|
+
"sikimle",
|
|
5502
|
+
"sikimsonik",
|
|
5503
|
+
"sikimtrak",
|
|
5504
|
+
"sikin",
|
|
5505
|
+
"sikinde",
|
|
5506
|
+
"sikinden",
|
|
5507
|
+
"sikine",
|
|
5508
|
+
"sikini",
|
|
5509
|
+
"sikip",
|
|
5510
|
+
"sikis",
|
|
5511
|
+
"sikisek",
|
|
5512
|
+
"sikisen",
|
|
5513
|
+
"sikish",
|
|
5514
|
+
"sikismis",
|
|
5515
|
+
"sikitiin",
|
|
5516
|
+
"sikiyim",
|
|
5517
|
+
"sikiym",
|
|
5518
|
+
"sikiyorum",
|
|
5519
|
+
"siki\u015F",
|
|
5520
|
+
"siki\u015Fen",
|
|
5521
|
+
"siki\u015Fken",
|
|
5522
|
+
"siki\u015Fme",
|
|
5523
|
+
"siki\u015Fmek",
|
|
5524
|
+
"sikkim",
|
|
5525
|
+
"sikko",
|
|
5526
|
+
"sikleri",
|
|
5527
|
+
"sikleriii",
|
|
5528
|
+
"sikli",
|
|
5529
|
+
"sikm",
|
|
5530
|
+
"sikmek",
|
|
5531
|
+
"sikmem",
|
|
5532
|
+
"sikmeyi",
|
|
5533
|
+
"sikmiler",
|
|
5534
|
+
"sikmisligim",
|
|
5535
|
+
"siksem",
|
|
5536
|
+
"sikseydin",
|
|
5537
|
+
"sikseyidin",
|
|
5538
|
+
"siksin",
|
|
5539
|
+
"siksinbaya",
|
|
5540
|
+
"siksinler",
|
|
5541
|
+
"siksiz",
|
|
5542
|
+
"siksok",
|
|
5543
|
+
"siksz",
|
|
5544
|
+
"sikt",
|
|
5545
|
+
"sikti",
|
|
5546
|
+
"siktigimin",
|
|
5547
|
+
"siktigiminin",
|
|
5548
|
+
"siktii",
|
|
5549
|
+
"siktiim",
|
|
5550
|
+
"siktiimin",
|
|
5551
|
+
"siktiiminin",
|
|
5552
|
+
"siktiler",
|
|
5553
|
+
"siktim",
|
|
5554
|
+
"siktim ",
|
|
5555
|
+
"siktimin",
|
|
5556
|
+
"siktiminin",
|
|
5557
|
+
"siktin",
|
|
5558
|
+
"siktir",
|
|
5559
|
+
"siktir et",
|
|
5560
|
+
"siktir git",
|
|
5561
|
+
"siktir lan",
|
|
5562
|
+
"siktir ol git",
|
|
5563
|
+
"siktirgit",
|
|
5564
|
+
"siktirir",
|
|
5565
|
+
"siktiririm",
|
|
5566
|
+
"siktiriyor",
|
|
5567
|
+
"siktirolgit",
|
|
5568
|
+
"siktirsin",
|
|
5569
|
+
"sikti\u011Fim",
|
|
5570
|
+
"sikti\u011Fimin",
|
|
5571
|
+
"sikti\u011Fiminin",
|
|
5572
|
+
"siktr",
|
|
5573
|
+
"siqem",
|
|
5574
|
+
"sisme",
|
|
5575
|
+
"sittimin",
|
|
5576
|
+
"sittir",
|
|
5577
|
+
"skcem",
|
|
5578
|
+
"skecem",
|
|
5579
|
+
"skem",
|
|
5580
|
+
"sker",
|
|
5581
|
+
"skerim",
|
|
5582
|
+
"skerm",
|
|
5583
|
+
"skeyim",
|
|
5584
|
+
"skiim",
|
|
5585
|
+
"skik",
|
|
5586
|
+
"skim",
|
|
5587
|
+
"skime",
|
|
5588
|
+
"skiym",
|
|
5589
|
+
"skm",
|
|
5590
|
+
"skmek",
|
|
5591
|
+
"skrm",
|
|
5592
|
+
"sksin",
|
|
5593
|
+
"sksn",
|
|
5594
|
+
"sksz",
|
|
5595
|
+
"sktiimin",
|
|
5596
|
+
"sktim",
|
|
5597
|
+
"sktir",
|
|
5598
|
+
"sktirsin",
|
|
5599
|
+
"sktr",
|
|
5600
|
+
"sktroradan",
|
|
5601
|
+
"sktrr",
|
|
5602
|
+
"sktrsn",
|
|
5603
|
+
"skyim",
|
|
5604
|
+
"slaleni",
|
|
5605
|
+
"snane",
|
|
5606
|
+
"sokacak",
|
|
5607
|
+
"sokam",
|
|
5608
|
+
"sokarim",
|
|
5609
|
+
"sokarm",
|
|
5610
|
+
"sokarmkoduumun",
|
|
5611
|
+
"sokar\u0131m",
|
|
5612
|
+
"sokaym",
|
|
5613
|
+
"sokay\u0131m",
|
|
5614
|
+
"sokiim",
|
|
5615
|
+
"soktu\u011Fumunun",
|
|
5616
|
+
"sokuk",
|
|
5617
|
+
"sokum",
|
|
5618
|
+
"sokuyum",
|
|
5619
|
+
"soku\u015F",
|
|
5620
|
+
"soxum",
|
|
5621
|
+
"sperm",
|
|
5622
|
+
"sulaleni",
|
|
5623
|
+
"s\xE7kik",
|
|
5624
|
+
"s\xFClaleni",
|
|
5625
|
+
"s\xFClalenizi",
|
|
5626
|
+
"s\xFCrt\xFCk",
|
|
5627
|
+
"s\xFCt\xFC bozuk",
|
|
5628
|
+
"s\xFCzme",
|
|
5629
|
+
"s\u0131ecem",
|
|
5630
|
+
"s\u0131ker\u0131m",
|
|
5631
|
+
"s\u0131km",
|
|
5632
|
+
"s\u0131kt\u0131r",
|
|
5633
|
+
"s\u0131\xE7ar\u0131m",
|
|
5634
|
+
"s\u0131\xE7mak",
|
|
5635
|
+
"s\u0131\xE7t\u0131\u011F\u0131m",
|
|
5636
|
+
"taaklarn",
|
|
5637
|
+
"taaklarna",
|
|
5638
|
+
"takip",
|
|
5639
|
+
"takip et",
|
|
5640
|
+
"takma",
|
|
5641
|
+
"tarrakimin",
|
|
5642
|
+
"tasak",
|
|
5643
|
+
"tassak",
|
|
5644
|
+
"tayyip",
|
|
5645
|
+
"ta\u015Fak",
|
|
5646
|
+
"ta\u015F\u015Fak",
|
|
5647
|
+
"temas\u0131yla",
|
|
5648
|
+
"teror",
|
|
5649
|
+
"terorist",
|
|
5650
|
+
"ter\xF6r",
|
|
5651
|
+
"ter\xF6rist",
|
|
5652
|
+
"thumb?",
|
|
5653
|
+
"tipini s.k",
|
|
5654
|
+
"tipinizi s.keyim",
|
|
5655
|
+
"tiyniyat",
|
|
5656
|
+
"tokmaklama",
|
|
5657
|
+
"tokmaklamak",
|
|
5658
|
+
"top",
|
|
5659
|
+
"toplarm",
|
|
5660
|
+
"topsun",
|
|
5661
|
+
"toto\u015F",
|
|
5662
|
+
"transeksuel",
|
|
5663
|
+
"transeks\xFCel",
|
|
5664
|
+
"travesti",
|
|
5665
|
+
"ukler",
|
|
5666
|
+
"ulan",
|
|
5667
|
+
"ulen",
|
|
5668
|
+
"ulker",
|
|
5669
|
+
"vagina",
|
|
5670
|
+
"vajina",
|
|
5671
|
+
"vajinan\u0131",
|
|
5672
|
+
"va\u015Fina",
|
|
5673
|
+
"veled",
|
|
5674
|
+
"veled i zina",
|
|
5675
|
+
"veledizina",
|
|
5676
|
+
"verdiimin",
|
|
5677
|
+
"verem",
|
|
5678
|
+
"vodka",
|
|
5679
|
+
"votka",
|
|
5680
|
+
"weled",
|
|
5681
|
+
"weledizina",
|
|
5682
|
+
"whore",
|
|
5683
|
+
"wslik",
|
|
5684
|
+
"wslik server",
|
|
5685
|
+
"xikeyim",
|
|
5686
|
+
"yaaraaa",
|
|
5687
|
+
"yahudi",
|
|
5688
|
+
"yalaka",
|
|
5689
|
+
"yalama",
|
|
5690
|
+
"yalarun",
|
|
5691
|
+
"yalar\u0131m",
|
|
5692
|
+
"yaraaam",
|
|
5693
|
+
"yarak",
|
|
5694
|
+
"yaraks\u0131z",
|
|
5695
|
+
"yaraktr",
|
|
5696
|
+
"yaram",
|
|
5697
|
+
"yaraminbasi",
|
|
5698
|
+
"yaramn",
|
|
5699
|
+
"yararmorospunun",
|
|
5700
|
+
"yark",
|
|
5701
|
+
"yarra",
|
|
5702
|
+
"yarraaaa",
|
|
5703
|
+
"yarraak",
|
|
5704
|
+
"yarraam",
|
|
5705
|
+
"yarraam\u0131",
|
|
5706
|
+
"yarragi",
|
|
5707
|
+
"yarragimi",
|
|
5708
|
+
"yarragina",
|
|
5709
|
+
"yarragindan",
|
|
5710
|
+
"yarragm",
|
|
5711
|
+
"yarraimin",
|
|
5712
|
+
"yarrak",
|
|
5713
|
+
"yarram",
|
|
5714
|
+
"yarramin",
|
|
5715
|
+
"yarraminba\u015F\u0131",
|
|
5716
|
+
"yarramn",
|
|
5717
|
+
"yarram\u0131n",
|
|
5718
|
+
"yarran",
|
|
5719
|
+
"yarrana",
|
|
5720
|
+
"yarra\u011F",
|
|
5721
|
+
"yarra\u011F\u0131m",
|
|
5722
|
+
"yarra\u011F\u0131m\u0131",
|
|
5723
|
+
"yarrk",
|
|
5724
|
+
"yarro",
|
|
5725
|
+
"yarrrak",
|
|
5726
|
+
"yaudi",
|
|
5727
|
+
"yavak",
|
|
5728
|
+
"yavu\u015Fak",
|
|
5729
|
+
"yav\u015F",
|
|
5730
|
+
"yav\u015Fak",
|
|
5731
|
+
"yav\u015Fakt\u0131r",
|
|
5732
|
+
"yav\u015Famak",
|
|
5733
|
+
"ya\u011Fudi",
|
|
5734
|
+
"yilisik",
|
|
5735
|
+
"yogurtlayam",
|
|
5736
|
+
"yosma",
|
|
5737
|
+
"yo\u011Furtlayam",
|
|
5738
|
+
"yrak",
|
|
5739
|
+
"yrk",
|
|
5740
|
+
"yrrak",
|
|
5741
|
+
"y\u0131l\u0131\u015F\u0131k",
|
|
5742
|
+
"zibidi",
|
|
5743
|
+
"zigsin",
|
|
5744
|
+
"zikeyim",
|
|
5745
|
+
"zikiiim",
|
|
5746
|
+
"zikiim",
|
|
5747
|
+
"zikik",
|
|
5748
|
+
"zikim",
|
|
5749
|
+
"ziksiiin",
|
|
5750
|
+
"ziksiin",
|
|
5751
|
+
"zina",
|
|
5752
|
+
"zulliyetini",
|
|
5753
|
+
"zviyetini",
|
|
5754
|
+
"z\u0131kk\u0131m\u0131m",
|
|
5755
|
+
"\xE7al\u0131\u015Fmak istermisiniz?",
|
|
5756
|
+
"\xE7\xFCk",
|
|
5757
|
+
"\xF6k\xFCz",
|
|
5758
|
+
"\xF6l",
|
|
5759
|
+
"\xF6\u015Fex",
|
|
5760
|
+
"\xFCkler",
|
|
5761
|
+
"\xFClker",
|
|
5762
|
+
"\xFClk\xFCc\xFC",
|
|
5763
|
+
"\u0131bnel\u0131k",
|
|
5764
|
+
"\u015Ferefsiz",
|
|
5765
|
+
"\u015Ferefsizler",
|
|
5766
|
+
"\u015Ferefsizlerin",
|
|
5767
|
+
"\u015Ferefsizlik",
|
|
5768
|
+
"\u015Firret",
|
|
5769
|
+
"\u015Fi\u015Fme",
|
|
5770
|
+
"\u015Fi\u015Fme bebek",
|
|
5771
|
+
"\u015Fi\u015Fme kad\u0131n",
|
|
5772
|
+
"\u015Fi\u015Fme manken",
|
|
5773
|
+
"\u015F\u0131ll\u0131k",
|
|
5774
|
+
"\u015F\u0131rf\u0131nt\u0131"
|
|
4756
5775
|
]
|
|
4757
5776
|
};
|
|
4758
5777
|
|
|
@@ -4922,6 +5941,7 @@ var dictionary_default = {
|
|
|
4922
5941
|
chinese: chinese_default.words,
|
|
4923
5942
|
czech: czech_default.words,
|
|
4924
5943
|
danish: danish_default.words,
|
|
5944
|
+
dutch: dutch_default.words,
|
|
4925
5945
|
english: english_default.words,
|
|
4926
5946
|
esperanto: esperanto_default.words,
|
|
4927
5947
|
finnish: finnish_default.words,
|
|
@@ -5238,47 +6258,614 @@ var ContextAnalyzer = class {
|
|
|
5238
6258
|
}
|
|
5239
6259
|
};
|
|
5240
6260
|
|
|
6261
|
+
// src/utils/leetspeak.ts
|
|
6262
|
+
var BASIC_SUBSTITUTIONS = {
|
|
6263
|
+
"0": "o",
|
|
6264
|
+
"1": "i",
|
|
6265
|
+
"3": "e",
|
|
6266
|
+
"4": "a",
|
|
6267
|
+
"5": "s",
|
|
6268
|
+
"7": "t",
|
|
6269
|
+
"8": "b",
|
|
6270
|
+
"9": "g"
|
|
6271
|
+
};
|
|
6272
|
+
var MODERATE_SUBSTITUTIONS = {
|
|
6273
|
+
...BASIC_SUBSTITUTIONS,
|
|
6274
|
+
"@": "a",
|
|
6275
|
+
"$": "s",
|
|
6276
|
+
"!": "i",
|
|
6277
|
+
"(": "c",
|
|
6278
|
+
"<": "c",
|
|
6279
|
+
"{": "c",
|
|
6280
|
+
"[": "c",
|
|
6281
|
+
"+": "t",
|
|
6282
|
+
"\u20AC": "e",
|
|
6283
|
+
"&": "e",
|
|
6284
|
+
"#": "h",
|
|
6285
|
+
"\xA5": "y",
|
|
6286
|
+
"\xA7": "s",
|
|
6287
|
+
"\u2020": "t",
|
|
6288
|
+
"\xAE": "r",
|
|
6289
|
+
"\xA9": "c",
|
|
6290
|
+
"\xB2": "2",
|
|
6291
|
+
"\xB3": "3"
|
|
6292
|
+
};
|
|
6293
|
+
var AGGRESSIVE_MULTI_CHAR = [
|
|
6294
|
+
// Letter A patterns
|
|
6295
|
+
[/\/\\/g, "a"],
|
|
6296
|
+
[/\/-\\/g, "a"],
|
|
6297
|
+
[/\^/g, "a"],
|
|
6298
|
+
// Letter B patterns
|
|
6299
|
+
[/\|3/g, "b"],
|
|
6300
|
+
[/13/g, "b"],
|
|
6301
|
+
[/ß/g, "b"],
|
|
6302
|
+
// Letter D patterns
|
|
6303
|
+
[/\|\)/g, "d"],
|
|
6304
|
+
[/\|>/g, "d"],
|
|
6305
|
+
[/\[\)/g, "d"],
|
|
6306
|
+
// Letter F patterns
|
|
6307
|
+
[/\|=/g, "f"],
|
|
6308
|
+
[/ph/gi, "f"],
|
|
6309
|
+
// Letter H patterns
|
|
6310
|
+
[/\|-\|/g, "h"],
|
|
6311
|
+
[/\}\{/g, "h"],
|
|
6312
|
+
// Letter K patterns
|
|
6313
|
+
[/\|</g, "k"],
|
|
6314
|
+
[/\|\{/g, "k"],
|
|
6315
|
+
// Letter L patterns
|
|
6316
|
+
[/\|_/g, "l"],
|
|
6317
|
+
// Letter M patterns
|
|
6318
|
+
[/\/\\\/\\/g, "m"],
|
|
6319
|
+
[/\|V\|/g, "m"],
|
|
6320
|
+
[/\[V\]/g, "m"],
|
|
6321
|
+
// Letter N patterns
|
|
6322
|
+
[/\/\\\//g, "n"],
|
|
6323
|
+
[/\|\\\|/g, "n"],
|
|
6324
|
+
// Letter P patterns
|
|
6325
|
+
[/\|\*/g, "p"],
|
|
6326
|
+
[/\|o/g, "p"],
|
|
6327
|
+
// Letter R patterns
|
|
6328
|
+
[/\|2/g, "r"],
|
|
6329
|
+
[/\|\?/g, "r"],
|
|
6330
|
+
// Letter U patterns
|
|
6331
|
+
[/\|_\|/g, "u"],
|
|
6332
|
+
[/\\_\\/g, "u"],
|
|
6333
|
+
[/\/_\//g, "u"],
|
|
6334
|
+
// Letter V patterns
|
|
6335
|
+
[/\\\//g, "v"],
|
|
6336
|
+
// Letter W patterns
|
|
6337
|
+
[/\\\/\\\//g, "w"],
|
|
6338
|
+
[/vv/gi, "w"],
|
|
6339
|
+
// Letter X patterns
|
|
6340
|
+
[/><]/g, "x"],
|
|
6341
|
+
// Letter Y patterns
|
|
6342
|
+
[/'\//g, "y"],
|
|
6343
|
+
// Letter Z patterns
|
|
6344
|
+
[/7_/g, "z"]
|
|
6345
|
+
];
|
|
6346
|
+
var AGGRESSIVE_SUBSTITUTIONS = {
|
|
6347
|
+
...MODERATE_SUBSTITUTIONS,
|
|
6348
|
+
"|": "i",
|
|
6349
|
+
"6": "g",
|
|
6350
|
+
"2": "z",
|
|
6351
|
+
"%": "z"
|
|
6352
|
+
};
|
|
6353
|
+
function normalizeLeetspeak(text, options = {}) {
|
|
6354
|
+
const {
|
|
6355
|
+
level = "moderate",
|
|
6356
|
+
collapseRepeated = true,
|
|
6357
|
+
maxRepeated = 2,
|
|
6358
|
+
removeSpacedChars = true
|
|
6359
|
+
} = options;
|
|
6360
|
+
let normalized = text;
|
|
6361
|
+
if (removeSpacedChars) {
|
|
6362
|
+
normalized = collapseSpacedCharacters(normalized);
|
|
6363
|
+
}
|
|
6364
|
+
if (level === "aggressive") {
|
|
6365
|
+
for (const [pattern, replacement] of AGGRESSIVE_MULTI_CHAR) {
|
|
6366
|
+
normalized = normalized.replace(pattern, replacement);
|
|
6367
|
+
}
|
|
6368
|
+
}
|
|
6369
|
+
const substitutions = getSubstitutionMap(level);
|
|
6370
|
+
normalized = normalized.split("").map((char) => substitutions[char] || char).join("");
|
|
6371
|
+
if (collapseRepeated) {
|
|
6372
|
+
normalized = collapseRepeatedCharacters(normalized, maxRepeated);
|
|
6373
|
+
}
|
|
6374
|
+
return normalized;
|
|
6375
|
+
}
|
|
6376
|
+
function getSubstitutionMap(level) {
|
|
6377
|
+
switch (level) {
|
|
6378
|
+
case "basic":
|
|
6379
|
+
return BASIC_SUBSTITUTIONS;
|
|
6380
|
+
case "moderate":
|
|
6381
|
+
return MODERATE_SUBSTITUTIONS;
|
|
6382
|
+
case "aggressive":
|
|
6383
|
+
return AGGRESSIVE_SUBSTITUTIONS;
|
|
6384
|
+
default:
|
|
6385
|
+
return MODERATE_SUBSTITUTIONS;
|
|
6386
|
+
}
|
|
6387
|
+
}
|
|
6388
|
+
function collapseSpacedCharacters(text) {
|
|
6389
|
+
const spacedPattern = /\b([a-zA-Z0-9@$!#])\s+([a-zA-Z0-9@$!#])(\s+[a-zA-Z0-9@$!#])+\b/g;
|
|
6390
|
+
return text.replace(spacedPattern, (match) => {
|
|
6391
|
+
return match.replace(/\s+/g, "");
|
|
6392
|
+
});
|
|
6393
|
+
}
|
|
6394
|
+
function collapseRepeatedCharacters(text, maxRepeated = 2) {
|
|
6395
|
+
const pattern = new RegExp(`(.)\\1{${maxRepeated},}`, "gi");
|
|
6396
|
+
return text.replace(pattern, (match, char) => char.repeat(maxRepeated));
|
|
6397
|
+
}
|
|
6398
|
+
function containsLeetspeak(text) {
|
|
6399
|
+
const leetspeakPatterns = [
|
|
6400
|
+
/[0-9]/,
|
|
6401
|
+
// Contains numbers (potential leetspeak)
|
|
6402
|
+
/[@$!#]/,
|
|
6403
|
+
// Contains common leetspeak symbols
|
|
6404
|
+
/(.)\1{3,}/,
|
|
6405
|
+
// Excessive character repetition
|
|
6406
|
+
/\b[a-zA-Z]\s+[a-zA-Z]\s+[a-zA-Z]\b/
|
|
6407
|
+
// Spaced characters
|
|
6408
|
+
];
|
|
6409
|
+
return leetspeakPatterns.some((pattern) => pattern.test(text));
|
|
6410
|
+
}
|
|
6411
|
+
function generateLeetspeakVariants(word, level = "moderate") {
|
|
6412
|
+
const variants = /* @__PURE__ */ new Set([word.toLowerCase()]);
|
|
6413
|
+
const substitutions = getSubstitutionMap(level);
|
|
6414
|
+
const reverseMap = {};
|
|
6415
|
+
for (const [leet, normal] of Object.entries(substitutions)) {
|
|
6416
|
+
if (!reverseMap[normal]) {
|
|
6417
|
+
reverseMap[normal] = [];
|
|
6418
|
+
}
|
|
6419
|
+
reverseMap[normal].push(leet);
|
|
6420
|
+
}
|
|
6421
|
+
function generateVariants(current, index) {
|
|
6422
|
+
if (index >= word.length) {
|
|
6423
|
+
variants.add(current);
|
|
6424
|
+
return;
|
|
6425
|
+
}
|
|
6426
|
+
const char = word[index].toLowerCase();
|
|
6427
|
+
generateVariants(current + char, index + 1);
|
|
6428
|
+
if (reverseMap[char]) {
|
|
6429
|
+
for (const leetChar of reverseMap[char]) {
|
|
6430
|
+
generateVariants(current + leetChar, index + 1);
|
|
6431
|
+
}
|
|
6432
|
+
}
|
|
6433
|
+
}
|
|
6434
|
+
if (word.length <= 6) {
|
|
6435
|
+
generateVariants("", 0);
|
|
6436
|
+
}
|
|
6437
|
+
return Array.from(variants);
|
|
6438
|
+
}
|
|
6439
|
+
|
|
6440
|
+
// src/utils/unicode.ts
|
|
6441
|
+
var HOMOGLYPHS = {
|
|
6442
|
+
// Cyrillic homoglyphs (look like Latin)
|
|
6443
|
+
"\u0430": "a",
|
|
6444
|
+
// Cyrillic small a
|
|
6445
|
+
"\u0410": "A",
|
|
6446
|
+
// Cyrillic capital A
|
|
6447
|
+
"\u0435": "e",
|
|
6448
|
+
// Cyrillic small e
|
|
6449
|
+
"\u0415": "E",
|
|
6450
|
+
// Cyrillic capital E
|
|
6451
|
+
"\u043E": "o",
|
|
6452
|
+
// Cyrillic small o
|
|
6453
|
+
"\u041E": "O",
|
|
6454
|
+
// Cyrillic capital O
|
|
6455
|
+
"\u0440": "p",
|
|
6456
|
+
// Cyrillic small er
|
|
6457
|
+
"\u0420": "P",
|
|
6458
|
+
// Cyrillic capital Er
|
|
6459
|
+
"\u0441": "c",
|
|
6460
|
+
// Cyrillic small es
|
|
6461
|
+
"\u0421": "C",
|
|
6462
|
+
// Cyrillic capital Es
|
|
6463
|
+
"\u0443": "y",
|
|
6464
|
+
// Cyrillic small u
|
|
6465
|
+
"\u0423": "Y",
|
|
6466
|
+
// Cyrillic capital U
|
|
6467
|
+
"\u0445": "x",
|
|
6468
|
+
// Cyrillic small ha
|
|
6469
|
+
"\u0425": "X",
|
|
6470
|
+
// Cyrillic capital Ha
|
|
6471
|
+
"\u0456": "i",
|
|
6472
|
+
// Cyrillic small i (Ukrainian)
|
|
6473
|
+
"\u0406": "I",
|
|
6474
|
+
// Cyrillic capital I (Ukrainian)
|
|
6475
|
+
"\u0458": "j",
|
|
6476
|
+
// Cyrillic small je
|
|
6477
|
+
"\u0408": "J",
|
|
6478
|
+
// Cyrillic capital Je
|
|
6479
|
+
"\u0455": "s",
|
|
6480
|
+
// Cyrillic small dze
|
|
6481
|
+
"\u0405": "S",
|
|
6482
|
+
// Cyrillic capital Dze
|
|
6483
|
+
// Greek homoglyphs
|
|
6484
|
+
"\u03B1": "a",
|
|
6485
|
+
// Greek small alpha
|
|
6486
|
+
"\u0391": "A",
|
|
6487
|
+
// Greek capital Alpha
|
|
6488
|
+
"\u03B2": "b",
|
|
6489
|
+
// Greek small beta (sort of)
|
|
6490
|
+
"\u0392": "B",
|
|
6491
|
+
// Greek capital Beta
|
|
6492
|
+
"\u03B5": "e",
|
|
6493
|
+
// Greek small epsilon
|
|
6494
|
+
"\u0395": "E",
|
|
6495
|
+
// Greek capital Epsilon
|
|
6496
|
+
"\u03B7": "n",
|
|
6497
|
+
// Greek small eta
|
|
6498
|
+
"\u0397": "H",
|
|
6499
|
+
// Greek capital Eta
|
|
6500
|
+
"\u03B9": "i",
|
|
6501
|
+
// Greek small iota
|
|
6502
|
+
"\u0399": "I",
|
|
6503
|
+
// Greek capital Iota
|
|
6504
|
+
"\u03BA": "k",
|
|
6505
|
+
// Greek small kappa
|
|
6506
|
+
"\u039A": "K",
|
|
6507
|
+
// Greek capital Kappa
|
|
6508
|
+
"\u03BD": "v",
|
|
6509
|
+
// Greek small nu (looks like v)
|
|
6510
|
+
"\u039D": "N",
|
|
6511
|
+
// Greek capital Nu
|
|
6512
|
+
"\u03BF": "o",
|
|
6513
|
+
// Greek small omicron
|
|
6514
|
+
"\u039F": "O",
|
|
6515
|
+
// Greek capital Omicron
|
|
6516
|
+
"\u03C1": "p",
|
|
6517
|
+
// Greek small rho
|
|
6518
|
+
"\u03A1": "P",
|
|
6519
|
+
// Greek capital Rho
|
|
6520
|
+
"\u03C4": "t",
|
|
6521
|
+
// Greek small tau
|
|
6522
|
+
"\u03A4": "T",
|
|
6523
|
+
// Greek capital Tau
|
|
6524
|
+
"\u03C5": "u",
|
|
6525
|
+
// Greek small upsilon
|
|
6526
|
+
"\u03A5": "Y",
|
|
6527
|
+
// Greek capital Upsilon
|
|
6528
|
+
"\u03C7": "x",
|
|
6529
|
+
// Greek small chi
|
|
6530
|
+
"\u03A7": "X",
|
|
6531
|
+
// Greek capital Chi
|
|
6532
|
+
// Mathematical symbols
|
|
6533
|
+
"\u2102": "C",
|
|
6534
|
+
// Double-struck capital C
|
|
6535
|
+
"\u210D": "H",
|
|
6536
|
+
// Double-struck capital H
|
|
6537
|
+
"\u2115": "N",
|
|
6538
|
+
// Double-struck capital N
|
|
6539
|
+
"\u2119": "P",
|
|
6540
|
+
// Double-struck capital P
|
|
6541
|
+
"\u211A": "Q",
|
|
6542
|
+
// Double-struck capital Q
|
|
6543
|
+
"\u211D": "R",
|
|
6544
|
+
// Double-struck capital R
|
|
6545
|
+
"\u2124": "Z",
|
|
6546
|
+
// Double-struck capital Z
|
|
6547
|
+
// Subscript/superscript
|
|
6548
|
+
"\u1D43": "a",
|
|
6549
|
+
"\u1D47": "b",
|
|
6550
|
+
"\u1D9C": "c",
|
|
6551
|
+
"\u1D48": "d",
|
|
6552
|
+
"\u1D49": "e",
|
|
6553
|
+
"\u1DA0": "f",
|
|
6554
|
+
"\u1D4D": "g",
|
|
6555
|
+
"\u02B0": "h",
|
|
6556
|
+
"\u2071": "i",
|
|
6557
|
+
"\u02B2": "j",
|
|
6558
|
+
"\u1D4F": "k",
|
|
6559
|
+
"\u02E1": "l",
|
|
6560
|
+
"\u1D50": "m",
|
|
6561
|
+
"\u207F": "n",
|
|
6562
|
+
"\u1D52": "o",
|
|
6563
|
+
"\u1D56": "p",
|
|
6564
|
+
"\u02B3": "r",
|
|
6565
|
+
"\u02E2": "s",
|
|
6566
|
+
"\u1D57": "t",
|
|
6567
|
+
"\u1D58": "u",
|
|
6568
|
+
"\u1D5B": "v",
|
|
6569
|
+
"\u02B7": "w",
|
|
6570
|
+
"\u02E3": "x",
|
|
6571
|
+
"\u02B8": "y",
|
|
6572
|
+
"\u1DBB": "z",
|
|
6573
|
+
// Small caps
|
|
6574
|
+
"\u1D00": "A",
|
|
6575
|
+
"\u0299": "B",
|
|
6576
|
+
"\u1D04": "C",
|
|
6577
|
+
"\u1D05": "D",
|
|
6578
|
+
"\u1D07": "E",
|
|
6579
|
+
"\uA730": "F",
|
|
6580
|
+
"\u0262": "G",
|
|
6581
|
+
"\u029C": "H",
|
|
6582
|
+
"\u026A": "I",
|
|
6583
|
+
"\u1D0A": "J",
|
|
6584
|
+
"\u1D0B": "K",
|
|
6585
|
+
"\u029F": "L",
|
|
6586
|
+
"\u1D0D": "M",
|
|
6587
|
+
"\u0274": "N",
|
|
6588
|
+
"\u1D0F": "O",
|
|
6589
|
+
"\u1D18": "P",
|
|
6590
|
+
"\u01EB": "Q",
|
|
6591
|
+
"\u0280": "R",
|
|
6592
|
+
"\uA731": "S",
|
|
6593
|
+
"\u1D1B": "T",
|
|
6594
|
+
"\u1D1C": "U",
|
|
6595
|
+
"\u1D20": "V",
|
|
6596
|
+
"\u1D21": "W",
|
|
6597
|
+
"\u028F": "Y",
|
|
6598
|
+
"\u1D22": "Z",
|
|
6599
|
+
// Other lookalikes
|
|
6600
|
+
"\u24D0": "a",
|
|
6601
|
+
"\u24D1": "b",
|
|
6602
|
+
"\u24D2": "c",
|
|
6603
|
+
"\u24D3": "d",
|
|
6604
|
+
"\u24D4": "e",
|
|
6605
|
+
"\u24D5": "f",
|
|
6606
|
+
"\u24D6": "g",
|
|
6607
|
+
"\u24D7": "h",
|
|
6608
|
+
"\u24D8": "i",
|
|
6609
|
+
"\u24D9": "j",
|
|
6610
|
+
"\u24DA": "k",
|
|
6611
|
+
"\u24DB": "l",
|
|
6612
|
+
"\u24DC": "m",
|
|
6613
|
+
"\u24DD": "n",
|
|
6614
|
+
"\u24DE": "o",
|
|
6615
|
+
"\u24DF": "p",
|
|
6616
|
+
"\u24E0": "q",
|
|
6617
|
+
"\u24E1": "r",
|
|
6618
|
+
"\u24E2": "s",
|
|
6619
|
+
"\u24E3": "t",
|
|
6620
|
+
"\u24E4": "u",
|
|
6621
|
+
"\u24E5": "v",
|
|
6622
|
+
"\u24E6": "w",
|
|
6623
|
+
"\u24E7": "x",
|
|
6624
|
+
"\u24E8": "y",
|
|
6625
|
+
"\u24E9": "z",
|
|
6626
|
+
// Fancy Unicode letters
|
|
6627
|
+
"\uFF41": "a",
|
|
6628
|
+
"\uFF42": "b",
|
|
6629
|
+
"\uFF43": "c",
|
|
6630
|
+
"\uFF44": "d",
|
|
6631
|
+
"\uFF45": "e",
|
|
6632
|
+
"\uFF46": "f",
|
|
6633
|
+
"\uFF47": "g",
|
|
6634
|
+
"\uFF48": "h",
|
|
6635
|
+
"\uFF49": "i",
|
|
6636
|
+
"\uFF4A": "j",
|
|
6637
|
+
"\uFF4B": "k",
|
|
6638
|
+
"\uFF4C": "l",
|
|
6639
|
+
"\uFF4D": "m",
|
|
6640
|
+
"\uFF4E": "n",
|
|
6641
|
+
"\uFF4F": "o",
|
|
6642
|
+
"\uFF50": "p",
|
|
6643
|
+
"\uFF51": "q",
|
|
6644
|
+
"\uFF52": "r",
|
|
6645
|
+
"\uFF53": "s",
|
|
6646
|
+
"\uFF54": "t",
|
|
6647
|
+
"\uFF55": "u",
|
|
6648
|
+
"\uFF56": "v",
|
|
6649
|
+
"\uFF57": "w",
|
|
6650
|
+
"\uFF58": "x",
|
|
6651
|
+
"\uFF59": "y",
|
|
6652
|
+
"\uFF5A": "z",
|
|
6653
|
+
// Mirrored/rotated
|
|
6654
|
+
"\u0250": "a",
|
|
6655
|
+
"\u0254": "c",
|
|
6656
|
+
"\u01DD": "e",
|
|
6657
|
+
"\u025F": "j",
|
|
6658
|
+
"\u0265": "h",
|
|
6659
|
+
"\u026F": "m",
|
|
6660
|
+
"\u0279": "r",
|
|
6661
|
+
"\u0287": "t",
|
|
6662
|
+
"\u028C": "v",
|
|
6663
|
+
"\u028D": "w",
|
|
6664
|
+
// Common lookalikes
|
|
6665
|
+
"\u0142": "l",
|
|
6666
|
+
"\u0141": "L",
|
|
6667
|
+
"\xF8": "o",
|
|
6668
|
+
"\xD8": "O",
|
|
6669
|
+
"\u0111": "d",
|
|
6670
|
+
"\u0110": "D",
|
|
6671
|
+
"\u0127": "h",
|
|
6672
|
+
"\u0126": "H",
|
|
6673
|
+
"\u0131": "i",
|
|
6674
|
+
"\u0130": "I",
|
|
6675
|
+
"\u0138": "k",
|
|
6676
|
+
"\u0140": "l",
|
|
6677
|
+
"\u013F": "L",
|
|
6678
|
+
"\u014B": "n",
|
|
6679
|
+
"\u014A": "N",
|
|
6680
|
+
"\u0153": "oe",
|
|
6681
|
+
"\u0152": "OE",
|
|
6682
|
+
"\u017F": "s",
|
|
6683
|
+
"\u0167": "t",
|
|
6684
|
+
"\u0166": "T"
|
|
6685
|
+
};
|
|
6686
|
+
var ZERO_WIDTH_CHARS = [
|
|
6687
|
+
"\u200B",
|
|
6688
|
+
// Zero-width space
|
|
6689
|
+
"\u200C",
|
|
6690
|
+
// Zero-width non-joiner
|
|
6691
|
+
"\u200D",
|
|
6692
|
+
// Zero-width joiner
|
|
6693
|
+
"\u200E",
|
|
6694
|
+
// Left-to-right mark
|
|
6695
|
+
"\u200F",
|
|
6696
|
+
// Right-to-left mark
|
|
6697
|
+
"\u2060",
|
|
6698
|
+
// Word joiner
|
|
6699
|
+
"\u2061",
|
|
6700
|
+
// Function application
|
|
6701
|
+
"\u2062",
|
|
6702
|
+
// Invisible times
|
|
6703
|
+
"\u2063",
|
|
6704
|
+
// Invisible separator
|
|
6705
|
+
"\u2064",
|
|
6706
|
+
// Invisible plus
|
|
6707
|
+
"\uFEFF",
|
|
6708
|
+
// Byte order mark / zero-width no-break space
|
|
6709
|
+
"\xAD",
|
|
6710
|
+
// Soft hyphen
|
|
6711
|
+
"\u034F",
|
|
6712
|
+
// Combining grapheme joiner
|
|
6713
|
+
"\u061C",
|
|
6714
|
+
// Arabic letter mark
|
|
6715
|
+
"\u115F",
|
|
6716
|
+
// Hangul choseong filler
|
|
6717
|
+
"\u1160",
|
|
6718
|
+
// Hangul jungseong filler
|
|
6719
|
+
"\u17B4",
|
|
6720
|
+
// Khmer vowel inherent Aq
|
|
6721
|
+
"\u17B5",
|
|
6722
|
+
// Khmer vowel inherent Aa
|
|
6723
|
+
"\u180E",
|
|
6724
|
+
// Mongolian vowel separator
|
|
6725
|
+
"\u3164"
|
|
6726
|
+
// Hangul filler
|
|
6727
|
+
];
|
|
6728
|
+
function normalizeUnicode(text, options = {}) {
|
|
6729
|
+
const {
|
|
6730
|
+
nfkd = true,
|
|
6731
|
+
homoglyphs = true,
|
|
6732
|
+
fullWidth = true,
|
|
6733
|
+
removeDiacritics = true,
|
|
6734
|
+
removeZeroWidth = true
|
|
6735
|
+
} = options;
|
|
6736
|
+
let normalized = text;
|
|
6737
|
+
if (removeZeroWidth) {
|
|
6738
|
+
normalized = removeZeroWidthCharacters(normalized);
|
|
6739
|
+
}
|
|
6740
|
+
if (fullWidth) {
|
|
6741
|
+
normalized = convertFullWidth(normalized);
|
|
6742
|
+
}
|
|
6743
|
+
if (homoglyphs) {
|
|
6744
|
+
normalized = convertHomoglyphs(normalized);
|
|
6745
|
+
}
|
|
6746
|
+
if (nfkd || removeDiacritics) {
|
|
6747
|
+
normalized = normalizeNFKD(normalized, removeDiacritics);
|
|
6748
|
+
}
|
|
6749
|
+
return normalized;
|
|
6750
|
+
}
|
|
6751
|
+
function removeZeroWidthCharacters(text) {
|
|
6752
|
+
const pattern = new RegExp(`[${ZERO_WIDTH_CHARS.join("")}]`, "g");
|
|
6753
|
+
return text.replace(pattern, "");
|
|
6754
|
+
}
|
|
6755
|
+
function convertFullWidth(text) {
|
|
6756
|
+
return text.replace(/[\uFF01-\uFF5E]/g, (char) => {
|
|
6757
|
+
return String.fromCharCode(char.charCodeAt(0) - 65248);
|
|
6758
|
+
});
|
|
6759
|
+
}
|
|
6760
|
+
function convertHomoglyphs(text) {
|
|
6761
|
+
return text.split("").map((char) => HOMOGLYPHS[char] || char).join("");
|
|
6762
|
+
}
|
|
6763
|
+
function normalizeNFKD(text, removeDiacritics = true) {
|
|
6764
|
+
let normalized = text.normalize("NFKD");
|
|
6765
|
+
if (removeDiacritics) {
|
|
6766
|
+
normalized = normalized.replace(/[\u0300-\u036f]/g, "");
|
|
6767
|
+
}
|
|
6768
|
+
return normalized;
|
|
6769
|
+
}
|
|
6770
|
+
function containsUnicodeObfuscation(text) {
|
|
6771
|
+
const zeroWidthPattern = new RegExp(`[${ZERO_WIDTH_CHARS.join("")}]`);
|
|
6772
|
+
if (zeroWidthPattern.test(text)) return true;
|
|
6773
|
+
if (/[\uFF01-\uFF5E]/.test(text)) return true;
|
|
6774
|
+
for (const char of text) {
|
|
6775
|
+
if (HOMOGLYPHS[char]) return true;
|
|
6776
|
+
}
|
|
6777
|
+
if (/[\u0300-\u036f]/.test(text)) return true;
|
|
6778
|
+
if (text !== text.normalize("NFKD")) return true;
|
|
6779
|
+
return false;
|
|
6780
|
+
}
|
|
6781
|
+
function detectCharacterSets(text) {
|
|
6782
|
+
const hasLatin = /[a-zA-Z]/.test(text);
|
|
6783
|
+
const hasCyrillic = /[\u0400-\u04FF]/.test(text);
|
|
6784
|
+
const hasGreek = /[\u0370-\u03FF]/.test(text);
|
|
6785
|
+
const hasFullWidth = /[\uFF01-\uFF5E]/.test(text);
|
|
6786
|
+
const scriptCount = [hasLatin, hasCyrillic, hasGreek, hasFullWidth].filter(Boolean).length;
|
|
6787
|
+
return {
|
|
6788
|
+
hasLatin,
|
|
6789
|
+
hasCyrillic,
|
|
6790
|
+
hasGreek,
|
|
6791
|
+
hasFullWidth,
|
|
6792
|
+
hasMixed: scriptCount > 1
|
|
6793
|
+
};
|
|
6794
|
+
}
|
|
6795
|
+
|
|
5241
6796
|
// src/filters/Filter.ts
|
|
5242
6797
|
var Filter = class {
|
|
6798
|
+
/**
|
|
6799
|
+
* Creates a new Filter instance with the specified configuration.
|
|
6800
|
+
*
|
|
6801
|
+
* @param config - Filter configuration options
|
|
6802
|
+
*
|
|
6803
|
+
* @example
|
|
6804
|
+
* ```typescript
|
|
6805
|
+
* // Basic usage
|
|
6806
|
+
* const filter = new Filter({ languages: ['english'] });
|
|
6807
|
+
*
|
|
6808
|
+
* // With leetspeak detection
|
|
6809
|
+
* const filter = new Filter({
|
|
6810
|
+
* languages: ['english'],
|
|
6811
|
+
* detectLeetspeak: true,
|
|
6812
|
+
* leetspeakLevel: 'moderate',
|
|
6813
|
+
* });
|
|
6814
|
+
*
|
|
6815
|
+
* // With all advanced features
|
|
6816
|
+
* const filter = new Filter({
|
|
6817
|
+
* languages: ['english', 'spanish'],
|
|
6818
|
+
* detectLeetspeak: true,
|
|
6819
|
+
* normalizeUnicode: true,
|
|
6820
|
+
* cacheResults: true,
|
|
6821
|
+
* enableContextAware: true,
|
|
6822
|
+
* });
|
|
6823
|
+
* ```
|
|
6824
|
+
*/
|
|
5243
6825
|
constructor(config) {
|
|
5244
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
5245
6826
|
const defaultLanguage = "english";
|
|
5246
|
-
this.enableContextAware =
|
|
5247
|
-
this.contextWindow =
|
|
5248
|
-
this.confidenceThreshold =
|
|
5249
|
-
this.primaryLanguage =
|
|
6827
|
+
this.enableContextAware = config?.enableContextAware ?? false;
|
|
6828
|
+
this.contextWindow = config?.contextWindow ?? 3;
|
|
6829
|
+
this.confidenceThreshold = config?.confidenceThreshold ?? 0.7;
|
|
6830
|
+
this.primaryLanguage = config?.languages?.[0] || defaultLanguage;
|
|
5250
6831
|
if (this.enableContextAware) {
|
|
5251
6832
|
this.contextAnalyzer = new ContextAnalyzer({
|
|
5252
6833
|
contextWindow: this.contextWindow,
|
|
5253
6834
|
language: this.primaryLanguage,
|
|
5254
|
-
domainWhitelists:
|
|
6835
|
+
domainWhitelists: config?.domainWhitelists?.[this.primaryLanguage] || []
|
|
5255
6836
|
});
|
|
5256
6837
|
}
|
|
5257
|
-
|
|
5258
|
-
this.
|
|
5259
|
-
this.
|
|
5260
|
-
this.
|
|
5261
|
-
this.
|
|
5262
|
-
this.severityLevels = (_i = config == null ? void 0 : config.severityLevels) != null ? _i : false;
|
|
6838
|
+
this.caseSensitive = config?.caseSensitive ?? false;
|
|
6839
|
+
this.allowObfuscatedMatch = config?.allowObfuscatedMatch ?? false;
|
|
6840
|
+
this.wordBoundaries = config?.wordBoundaries ?? !this.allowObfuscatedMatch;
|
|
6841
|
+
this.replaceWith = config?.replaceWith;
|
|
6842
|
+
this.severityLevels = config?.severityLevels ?? false;
|
|
5263
6843
|
this.ignoreWords = new Set(
|
|
5264
|
-
|
|
6844
|
+
config?.ignoreWords?.map((word) => word.toLowerCase()) || []
|
|
5265
6845
|
);
|
|
5266
|
-
this.logProfanity =
|
|
5267
|
-
this.fuzzyToleranceLevel =
|
|
5268
|
-
|
|
6846
|
+
this.logProfanity = config?.logProfanity ?? false;
|
|
6847
|
+
this.fuzzyToleranceLevel = config?.fuzzyToleranceLevel ?? 0.8;
|
|
6848
|
+
this.detectLeetspeak = config?.detectLeetspeak ?? false;
|
|
6849
|
+
this.leetspeakLevel = config?.leetspeakLevel ?? "moderate";
|
|
6850
|
+
this.normalizeUnicodeEnabled = config?.normalizeUnicode ?? true;
|
|
6851
|
+
this.cacheResults = config?.cacheResults ?? false;
|
|
6852
|
+
this.maxCacheSize = config?.maxCacheSize ?? 1e3;
|
|
6853
|
+
this.cache = /* @__PURE__ */ new Map();
|
|
6854
|
+
let words = [];
|
|
6855
|
+
if (config?.allLanguages) {
|
|
5269
6856
|
for (const lang in dictionary_default) {
|
|
5270
6857
|
if (Object.prototype.hasOwnProperty.call(dictionary_default, lang)) {
|
|
5271
6858
|
words = [...words, ...dictionary_default[lang]];
|
|
5272
6859
|
}
|
|
5273
6860
|
}
|
|
5274
6861
|
} else {
|
|
5275
|
-
const languages =
|
|
6862
|
+
const languages = config?.languages || ["english"];
|
|
5276
6863
|
const languagesChecks = new Set(languages);
|
|
5277
6864
|
languagesChecks.forEach((lang) => {
|
|
5278
6865
|
words = [...words, ...dictionary_default[lang]];
|
|
5279
6866
|
});
|
|
5280
6867
|
}
|
|
5281
|
-
if (config
|
|
6868
|
+
if (config?.customWords) {
|
|
5282
6869
|
words = [...words, ...config.customWords];
|
|
5283
6870
|
}
|
|
5284
6871
|
this.words = new Map(words.map((word) => [word.toLowerCase(), 1]));
|
|
@@ -5288,6 +6875,34 @@ var Filter = class {
|
|
|
5288
6875
|
console.log("[glin-profanity]", ...args);
|
|
5289
6876
|
}
|
|
5290
6877
|
}
|
|
6878
|
+
/**
|
|
6879
|
+
* Normalizes text for profanity detection using all enabled normalization methods.
|
|
6880
|
+
* Applies Unicode normalization, leetspeak detection, and obfuscation handling.
|
|
6881
|
+
*
|
|
6882
|
+
* @param text - The input text to normalize
|
|
6883
|
+
* @returns The normalized text
|
|
6884
|
+
*/
|
|
6885
|
+
normalizeText(text) {
|
|
6886
|
+
let normalized = text;
|
|
6887
|
+
if (this.normalizeUnicodeEnabled) {
|
|
6888
|
+
normalized = normalizeUnicode(normalized);
|
|
6889
|
+
}
|
|
6890
|
+
if (this.detectLeetspeak) {
|
|
6891
|
+
normalized = normalizeLeetspeak(normalized, {
|
|
6892
|
+
level: this.leetspeakLevel,
|
|
6893
|
+
collapseRepeated: true,
|
|
6894
|
+
removeSpacedChars: true
|
|
6895
|
+
});
|
|
6896
|
+
}
|
|
6897
|
+
if (this.allowObfuscatedMatch && !this.detectLeetspeak) {
|
|
6898
|
+
normalized = this.normalizeObfuscated(normalized);
|
|
6899
|
+
}
|
|
6900
|
+
return normalized;
|
|
6901
|
+
}
|
|
6902
|
+
/**
|
|
6903
|
+
* Legacy obfuscation normalization method (for backward compatibility).
|
|
6904
|
+
* @deprecated Use normalizeText() with detectLeetspeak option instead.
|
|
6905
|
+
*/
|
|
5291
6906
|
normalizeObfuscated(text) {
|
|
5292
6907
|
let normalized = text.replace(/([a-zA-Z])\1{1,}/g, "$1$1");
|
|
5293
6908
|
const charMap = {
|
|
@@ -5300,6 +6915,92 @@ var Filter = class {
|
|
|
5300
6915
|
normalized = normalized.replace(/[@$!1*]/g, (m) => charMap[m] || m);
|
|
5301
6916
|
return normalized;
|
|
5302
6917
|
}
|
|
6918
|
+
/**
|
|
6919
|
+
* Clears the result cache.
|
|
6920
|
+
* Useful when dictionary or configuration changes.
|
|
6921
|
+
*/
|
|
6922
|
+
clearCache() {
|
|
6923
|
+
this.cache.clear();
|
|
6924
|
+
}
|
|
6925
|
+
/**
|
|
6926
|
+
* Gets the current cache size.
|
|
6927
|
+
* @returns Number of cached results
|
|
6928
|
+
*/
|
|
6929
|
+
getCacheSize() {
|
|
6930
|
+
return this.cache.size;
|
|
6931
|
+
}
|
|
6932
|
+
/**
|
|
6933
|
+
* Exports the current filter configuration as a JSON-serializable object.
|
|
6934
|
+
* Useful for saving configuration to files or sharing between environments.
|
|
6935
|
+
*
|
|
6936
|
+
* @returns The current filter configuration
|
|
6937
|
+
*
|
|
6938
|
+
* @example
|
|
6939
|
+
* ```typescript
|
|
6940
|
+
* const filter = new Filter({
|
|
6941
|
+
* languages: ['english', 'spanish'],
|
|
6942
|
+
* detectLeetspeak: true,
|
|
6943
|
+
* leetspeakLevel: 'aggressive',
|
|
6944
|
+
* });
|
|
6945
|
+
*
|
|
6946
|
+
* const config = filter.getConfig();
|
|
6947
|
+
* // Save to file: fs.writeFileSync('filter.config.json', JSON.stringify(config));
|
|
6948
|
+
*
|
|
6949
|
+
* // Later, restore:
|
|
6950
|
+
* // const saved = JSON.parse(fs.readFileSync('filter.config.json'));
|
|
6951
|
+
* // const restored = new Filter(saved);
|
|
6952
|
+
* ```
|
|
6953
|
+
*/
|
|
6954
|
+
getConfig() {
|
|
6955
|
+
return {
|
|
6956
|
+
languages: [this.primaryLanguage],
|
|
6957
|
+
caseSensitive: this.caseSensitive,
|
|
6958
|
+
wordBoundaries: this.wordBoundaries,
|
|
6959
|
+
replaceWith: this.replaceWith,
|
|
6960
|
+
severityLevels: this.severityLevels,
|
|
6961
|
+
ignoreWords: Array.from(this.ignoreWords),
|
|
6962
|
+
logProfanity: this.logProfanity,
|
|
6963
|
+
allowObfuscatedMatch: this.allowObfuscatedMatch,
|
|
6964
|
+
fuzzyToleranceLevel: this.fuzzyToleranceLevel,
|
|
6965
|
+
enableContextAware: this.enableContextAware,
|
|
6966
|
+
contextWindow: this.contextWindow,
|
|
6967
|
+
confidenceThreshold: this.confidenceThreshold,
|
|
6968
|
+
detectLeetspeak: this.detectLeetspeak,
|
|
6969
|
+
leetspeakLevel: this.leetspeakLevel,
|
|
6970
|
+
normalizeUnicode: this.normalizeUnicodeEnabled,
|
|
6971
|
+
cacheResults: this.cacheResults,
|
|
6972
|
+
maxCacheSize: this.maxCacheSize
|
|
6973
|
+
};
|
|
6974
|
+
}
|
|
6975
|
+
/**
|
|
6976
|
+
* Returns the current word dictionary size.
|
|
6977
|
+
* Useful for monitoring and debugging.
|
|
6978
|
+
*
|
|
6979
|
+
* @returns Number of words in the dictionary
|
|
6980
|
+
*/
|
|
6981
|
+
getWordCount() {
|
|
6982
|
+
return this.words.size;
|
|
6983
|
+
}
|
|
6984
|
+
/**
|
|
6985
|
+
* Adds a result to the cache, evicting oldest entries if necessary.
|
|
6986
|
+
*/
|
|
6987
|
+
addToCache(key, result) {
|
|
6988
|
+
if (!this.cacheResults) return;
|
|
6989
|
+
if (this.cache.size >= this.maxCacheSize) {
|
|
6990
|
+
const firstKey = this.cache.keys().next().value;
|
|
6991
|
+
if (firstKey) {
|
|
6992
|
+
this.cache.delete(firstKey);
|
|
6993
|
+
}
|
|
6994
|
+
}
|
|
6995
|
+
this.cache.set(key, result);
|
|
6996
|
+
}
|
|
6997
|
+
/**
|
|
6998
|
+
* Gets a cached result if available.
|
|
6999
|
+
*/
|
|
7000
|
+
getFromCache(key) {
|
|
7001
|
+
if (!this.cacheResults) return void 0;
|
|
7002
|
+
return this.cache.get(key);
|
|
7003
|
+
}
|
|
5303
7004
|
getRegex(word) {
|
|
5304
7005
|
const flags = this.caseSensitive ? "g" : "gi";
|
|
5305
7006
|
const escapedWord = word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -5329,8 +7030,24 @@ var Filter = class {
|
|
|
5329
7030
|
if (this.isFuzzyToleranceMatch(word, text)) return 2 /* FUZZY */;
|
|
5330
7031
|
return void 0;
|
|
5331
7032
|
}
|
|
7033
|
+
/**
|
|
7034
|
+
* Checks if the given text contains profanity.
|
|
7035
|
+
*
|
|
7036
|
+
* @param value - The text to check
|
|
7037
|
+
* @returns True if the text contains profanity
|
|
7038
|
+
*
|
|
7039
|
+
* @example
|
|
7040
|
+
* ```typescript
|
|
7041
|
+
* const filter = new Filter({ detectLeetspeak: true });
|
|
7042
|
+
*
|
|
7043
|
+
* filter.isProfane('hello'); // false
|
|
7044
|
+
* filter.isProfane('fuck'); // true
|
|
7045
|
+
* filter.isProfane('f4ck'); // true (leetspeak)
|
|
7046
|
+
* filter.isProfane('fυck'); // true (Unicode homoglyph)
|
|
7047
|
+
* ```
|
|
7048
|
+
*/
|
|
5332
7049
|
isProfane(value) {
|
|
5333
|
-
const input = this.
|
|
7050
|
+
const input = this.normalizeText(value);
|
|
5334
7051
|
for (const word of this.words.keys()) {
|
|
5335
7052
|
if (!this.ignoreWords.has(word.toLowerCase()) && this.evaluateSeverity(word, input) !== void 0) {
|
|
5336
7053
|
return true;
|
|
@@ -5341,9 +7058,39 @@ var Filter = class {
|
|
|
5341
7058
|
matches(word) {
|
|
5342
7059
|
return this.isProfane(word);
|
|
5343
7060
|
}
|
|
7061
|
+
/**
|
|
7062
|
+
* Performs a comprehensive profanity check on the given text.
|
|
7063
|
+
*
|
|
7064
|
+
* @param text - The text to check for profanity
|
|
7065
|
+
* @returns Result object containing detected profanity information
|
|
7066
|
+
*
|
|
7067
|
+
* @example
|
|
7068
|
+
* ```typescript
|
|
7069
|
+
* const filter = new Filter({
|
|
7070
|
+
* languages: ['english'],
|
|
7071
|
+
* detectLeetspeak: true,
|
|
7072
|
+
* normalizeUnicode: true,
|
|
7073
|
+
* });
|
|
7074
|
+
*
|
|
7075
|
+
* const result = filter.checkProfanity('This is f4ck!ng bad');
|
|
7076
|
+
* console.log(result.containsProfanity); // true
|
|
7077
|
+
* console.log(result.profaneWords); // ['fuck']
|
|
7078
|
+
*
|
|
7079
|
+
* // With caching for repeated checks
|
|
7080
|
+
* const filter2 = new Filter({ cacheResults: true });
|
|
7081
|
+
* filter2.checkProfanity('same text'); // Computed
|
|
7082
|
+
* filter2.checkProfanity('same text'); // Retrieved from cache
|
|
7083
|
+
* ```
|
|
7084
|
+
*/
|
|
5344
7085
|
checkProfanity(text) {
|
|
7086
|
+
const cacheKey = text;
|
|
7087
|
+
const cachedResult = this.getFromCache(cacheKey);
|
|
7088
|
+
if (cachedResult) {
|
|
7089
|
+
this.debugLog("Cache hit for:", text.substring(0, 50));
|
|
7090
|
+
return cachedResult;
|
|
7091
|
+
}
|
|
5345
7092
|
if (!this.enableContextAware) {
|
|
5346
|
-
let input2 = this.
|
|
7093
|
+
let input2 = this.normalizeText(text);
|
|
5347
7094
|
input2 = input2.toLowerCase();
|
|
5348
7095
|
const profaneWords2 = [];
|
|
5349
7096
|
const severityMap2 = {};
|
|
@@ -5373,14 +7120,16 @@ var Filter = class {
|
|
|
5373
7120
|
);
|
|
5374
7121
|
}
|
|
5375
7122
|
}
|
|
5376
|
-
|
|
7123
|
+
const result2 = {
|
|
5377
7124
|
containsProfanity: profaneWords2.length > 0,
|
|
5378
7125
|
profaneWords: Array.from(new Set(profaneWords2)),
|
|
5379
7126
|
processedText: this.replaceWith ? processedText2 : void 0,
|
|
5380
7127
|
severityMap: this.severityLevels && Object.keys(severityMap2).length > 0 ? severityMap2 : void 0
|
|
5381
7128
|
};
|
|
7129
|
+
this.addToCache(cacheKey, result2);
|
|
7130
|
+
return result2;
|
|
5382
7131
|
}
|
|
5383
|
-
let input = this.
|
|
7132
|
+
let input = this.normalizeText(text);
|
|
5384
7133
|
input = input.toLowerCase();
|
|
5385
7134
|
const originalText = text;
|
|
5386
7135
|
const profaneWords = [];
|
|
@@ -5441,7 +7190,7 @@ var Filter = class {
|
|
|
5441
7190
|
const totalScore = matches.reduce((sum, match) => sum + (match.contextScore || 0.5), 0);
|
|
5442
7191
|
contextScore = totalScore / matches.length;
|
|
5443
7192
|
}
|
|
5444
|
-
|
|
7193
|
+
const result = {
|
|
5445
7194
|
containsProfanity: profaneWords.length > 0,
|
|
5446
7195
|
profaneWords: Array.from(new Set(profaneWords)),
|
|
5447
7196
|
processedText: this.replaceWith ? processedText : void 0,
|
|
@@ -5450,12 +7199,20 @@ var Filter = class {
|
|
|
5450
7199
|
contextScore,
|
|
5451
7200
|
reason: matches.length > 0 ? `Found ${matches.length} potential profanity matches` : "No profanity detected"
|
|
5452
7201
|
};
|
|
7202
|
+
this.addToCache(cacheKey, result);
|
|
7203
|
+
return result;
|
|
5453
7204
|
}
|
|
7205
|
+
/**
|
|
7206
|
+
* Checks profanity with minimum severity filtering.
|
|
7207
|
+
*
|
|
7208
|
+
* @param text - The text to check
|
|
7209
|
+
* @param minSeverity - Minimum severity level to include in results
|
|
7210
|
+
* @returns Object with filtered words and full result
|
|
7211
|
+
*/
|
|
5454
7212
|
checkProfanityWithMinSeverity(text, minSeverity = 1 /* EXACT */) {
|
|
5455
7213
|
const result = this.checkProfanity(text);
|
|
5456
7214
|
const filteredWords = result.severityMap && result.profaneWords.length > 0 ? result.profaneWords.filter((word) => {
|
|
5457
|
-
|
|
5458
|
-
const severity = (_a = result.severityMap) == null ? void 0 : _a[word];
|
|
7215
|
+
const severity = result.severityMap?.[word];
|
|
5459
7216
|
return typeof severity === "number" && severity >= minSeverity;
|
|
5460
7217
|
}) : [];
|
|
5461
7218
|
return { filteredWords, result };
|
|
@@ -5497,11 +7254,14 @@ var globalWhitelist_default = {
|
|
|
5497
7254
|
|
|
5498
7255
|
// src/core/index.ts
|
|
5499
7256
|
function createFilterConfig(config) {
|
|
5500
|
-
|
|
5501
|
-
|
|
5502
|
-
ignoreWords:
|
|
5503
|
-
|
|
5504
|
-
|
|
7257
|
+
const effective = {
|
|
7258
|
+
...config ?? {},
|
|
7259
|
+
ignoreWords: [
|
|
7260
|
+
...globalWhitelist_default.whitelist,
|
|
7261
|
+
...config?.ignoreWords ?? []
|
|
7262
|
+
],
|
|
7263
|
+
fuzzyToleranceLevel: config?.fuzzyToleranceLevel ?? 0.8
|
|
7264
|
+
};
|
|
5505
7265
|
if (effective.allowObfuscatedMatch && effective.wordBoundaries) {
|
|
5506
7266
|
console.warn(
|
|
5507
7267
|
"[Glin-Profanity] Obfuscated match enabled \u2192 wordBoundaries will be ignored internally."
|
|
@@ -5510,24 +7270,22 @@ function createFilterConfig(config) {
|
|
|
5510
7270
|
return effective;
|
|
5511
7271
|
}
|
|
5512
7272
|
function checkProfanity(text, config) {
|
|
5513
|
-
var _a;
|
|
5514
7273
|
const filterConfig = createFilterConfig(config);
|
|
5515
7274
|
const filter = new Filter(filterConfig);
|
|
5516
7275
|
const checkResult = filter.checkProfanity(text);
|
|
5517
|
-
const filteredWords =
|
|
7276
|
+
const filteredWords = config?.minSeverity && checkResult.severityMap ? checkResult.profaneWords.filter(
|
|
5518
7277
|
(word) => checkResult.severityMap && checkResult.severityMap[word] >= config.minSeverity
|
|
5519
7278
|
) : checkResult.profaneWords;
|
|
5520
|
-
const autoReplaced =
|
|
5521
|
-
|
|
5522
|
-
return
|
|
7279
|
+
const autoReplaced = config?.autoReplace && checkResult.processedText ? checkResult.processedText : text;
|
|
7280
|
+
config?.customActions?.(checkResult);
|
|
7281
|
+
return {
|
|
7282
|
+
...checkResult,
|
|
5523
7283
|
filteredWords,
|
|
5524
7284
|
autoReplaced
|
|
5525
|
-
}
|
|
7285
|
+
};
|
|
5526
7286
|
}
|
|
5527
|
-
function checkProfanityAsync(text, config) {
|
|
5528
|
-
return
|
|
5529
|
-
return Promise.resolve(checkProfanity(text, config));
|
|
5530
|
-
});
|
|
7287
|
+
async function checkProfanityAsync(text, config) {
|
|
7288
|
+
return Promise.resolve(checkProfanity(text, config));
|
|
5531
7289
|
}
|
|
5532
7290
|
function isWordProfane(word, config) {
|
|
5533
7291
|
return checkProfanity(word, config).containsProfanity;
|
|
@@ -5536,18 +7294,17 @@ function isWordProfane(word, config) {
|
|
|
5536
7294
|
// src/hooks/useProfanityChecker.ts
|
|
5537
7295
|
var import_react = __toESM(require_react(), 1);
|
|
5538
7296
|
var useProfanityChecker = (config) => {
|
|
5539
|
-
var _a;
|
|
5540
7297
|
const [result, setResult] = (0, import_react.useState)(null);
|
|
5541
7298
|
const checkText = (0, import_react.useCallback)((text) => {
|
|
5542
7299
|
const checkResult = checkProfanity(text, config);
|
|
5543
7300
|
setResult(checkResult);
|
|
5544
7301
|
return checkResult;
|
|
5545
7302
|
}, [config]);
|
|
5546
|
-
const checkTextAsync = (0, import_react.useCallback)((text) =>
|
|
5547
|
-
const checkResult =
|
|
7303
|
+
const checkTextAsync = (0, import_react.useCallback)(async (text) => {
|
|
7304
|
+
const checkResult = await checkProfanityAsync(text, config);
|
|
5548
7305
|
setResult(checkResult);
|
|
5549
7306
|
return checkResult;
|
|
5550
|
-
}
|
|
7307
|
+
}, [config]);
|
|
5551
7308
|
const isWordProfaneCallback = (0, import_react.useCallback)((word) => {
|
|
5552
7309
|
return isWordProfane(word, config);
|
|
5553
7310
|
}, [config]);
|
|
@@ -5557,7 +7314,7 @@ var useProfanityChecker = (config) => {
|
|
|
5557
7314
|
checkText,
|
|
5558
7315
|
checkTextAsync,
|
|
5559
7316
|
reset,
|
|
5560
|
-
isDirty:
|
|
7317
|
+
isDirty: result?.containsProfanity ?? false,
|
|
5561
7318
|
isWordProfane: isWordProfaneCallback
|
|
5562
7319
|
};
|
|
5563
7320
|
};
|
|
@@ -5568,7 +7325,19 @@ var useProfanityChecker = (config) => {
|
|
|
5568
7325
|
SeverityLevel,
|
|
5569
7326
|
checkProfanity,
|
|
5570
7327
|
checkProfanityAsync,
|
|
7328
|
+
collapseRepeatedCharacters,
|
|
7329
|
+
collapseSpacedCharacters,
|
|
7330
|
+
containsLeetspeak,
|
|
7331
|
+
containsUnicodeObfuscation,
|
|
7332
|
+
convertFullWidth,
|
|
7333
|
+
convertHomoglyphs,
|
|
7334
|
+
detectCharacterSets,
|
|
7335
|
+
generateLeetspeakVariants,
|
|
5571
7336
|
isWordProfane,
|
|
7337
|
+
normalizeLeetspeak,
|
|
7338
|
+
normalizeNFKD,
|
|
7339
|
+
normalizeUnicode,
|
|
7340
|
+
removeZeroWidthCharacters,
|
|
5572
7341
|
useProfanityChecker
|
|
5573
7342
|
});
|
|
5574
7343
|
/*! Bundled license information:
|