glin-profanity 2.1.0 → 2.3.5

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.
Files changed (82) hide show
  1. package/README.md +205 -55
  2. package/dist/index.cjs +5590 -0
  3. package/dist/index.d.cts +120 -0
  4. package/dist/index.d.ts +120 -0
  5. package/dist/index.js +5572 -0
  6. package/package.json +37 -13
  7. package/lib/cjs/data/Norwegian.json +0 -17
  8. package/lib/cjs/data/arabic.json +0 -157
  9. package/lib/cjs/data/chinese.json +0 -298
  10. package/lib/cjs/data/czech.json +0 -45
  11. package/lib/cjs/data/danish.json +0 -24
  12. package/lib/cjs/data/dictionary.d.ts +0 -25
  13. package/lib/cjs/data/dictionary.js +0 -52
  14. package/lib/cjs/data/dictionary.js.map +0 -1
  15. package/lib/cjs/data/english.json +0 -410
  16. package/lib/cjs/data/esperanto.json +0 -41
  17. package/lib/cjs/data/finnish.json +0 -134
  18. package/lib/cjs/data/french.json +0 -99
  19. package/lib/cjs/data/german.json +0 -69
  20. package/lib/cjs/data/globalWhitelist.json +0 -31
  21. package/lib/cjs/data/hindi.json +0 -100
  22. package/lib/cjs/data/hungarian.json +0 -100
  23. package/lib/cjs/data/italian.json +0 -184
  24. package/lib/cjs/data/japanese.json +0 -189
  25. package/lib/cjs/data/korean.json +0 -76
  26. package/lib/cjs/data/persian.json +0 -49
  27. package/lib/cjs/data/polish.json +0 -57
  28. package/lib/cjs/data/portuguese.json +0 -78
  29. package/lib/cjs/data/russian.json +0 -156
  30. package/lib/cjs/data/swedish.json +0 -47
  31. package/lib/cjs/data/thai.json +0 -35
  32. package/lib/cjs/data/turkish.json +0 -195
  33. package/lib/cjs/filters/Filter.d.ts +0 -39
  34. package/lib/cjs/filters/Filter.js +0 -162
  35. package/lib/cjs/filters/Filter.js.map +0 -1
  36. package/lib/cjs/hooks/useProfanityChecker.d.ts +0 -34
  37. package/lib/cjs/hooks/useProfanityChecker.js +0 -68
  38. package/lib/cjs/hooks/useProfanityChecker.js.map +0 -1
  39. package/lib/cjs/index.d.ts +0 -4
  40. package/lib/cjs/index.js +0 -10
  41. package/lib/cjs/index.js.map +0 -1
  42. package/lib/cjs/types/types.d.ts +0 -21
  43. package/lib/cjs/types/types.js +0 -11
  44. package/lib/cjs/types/types.js.map +0 -1
  45. package/lib/esm/data/Norwegian.json +0 -17
  46. package/lib/esm/data/arabic.json +0 -157
  47. package/lib/esm/data/chinese.json +0 -298
  48. package/lib/esm/data/czech.json +0 -45
  49. package/lib/esm/data/danish.json +0 -24
  50. package/lib/esm/data/dictionary.d.ts +0 -25
  51. package/lib/esm/data/dictionary.js +0 -47
  52. package/lib/esm/data/dictionary.js.map +0 -1
  53. package/lib/esm/data/english.json +0 -410
  54. package/lib/esm/data/esperanto.json +0 -41
  55. package/lib/esm/data/finnish.json +0 -134
  56. package/lib/esm/data/french.json +0 -99
  57. package/lib/esm/data/german.json +0 -69
  58. package/lib/esm/data/globalWhitelist.json +0 -31
  59. package/lib/esm/data/hindi.json +0 -100
  60. package/lib/esm/data/hungarian.json +0 -100
  61. package/lib/esm/data/italian.json +0 -184
  62. package/lib/esm/data/japanese.json +0 -189
  63. package/lib/esm/data/korean.json +0 -76
  64. package/lib/esm/data/persian.json +0 -49
  65. package/lib/esm/data/polish.json +0 -57
  66. package/lib/esm/data/portuguese.json +0 -78
  67. package/lib/esm/data/russian.json +0 -156
  68. package/lib/esm/data/swedish.json +0 -47
  69. package/lib/esm/data/thai.json +0 -35
  70. package/lib/esm/data/turkish.json +0 -195
  71. package/lib/esm/filters/Filter.d.ts +0 -39
  72. package/lib/esm/filters/Filter.js +0 -156
  73. package/lib/esm/filters/Filter.js.map +0 -1
  74. package/lib/esm/hooks/useProfanityChecker.d.ts +0 -34
  75. package/lib/esm/hooks/useProfanityChecker.js +0 -61
  76. package/lib/esm/hooks/useProfanityChecker.js.map +0 -1
  77. package/lib/esm/index.d.ts +0 -4
  78. package/lib/esm/index.js +0 -4
  79. package/lib/esm/index.js.map +0 -1
  80. package/lib/esm/types/types.d.ts +0 -21
  81. package/lib/esm/types/types.js +0 -8
  82. package/lib/esm/types/types.js.map +0 -1
@@ -1,39 +0,0 @@
1
- import { Language, CheckProfanityResult, SeverityLevel } from '../types/types';
2
- export interface FilterConfig {
3
- languages?: Language[];
4
- allLanguages?: boolean;
5
- caseSensitive?: boolean;
6
- wordBoundaries?: boolean;
7
- customWords?: string[];
8
- replaceWith?: string;
9
- severityLevels?: boolean;
10
- ignoreWords?: string[];
11
- logProfanity?: boolean;
12
- allowObfuscatedMatch?: boolean;
13
- fuzzyToleranceLevel?: number;
14
- }
15
- declare class Filter {
16
- private words;
17
- private caseSensitive;
18
- private wordBoundaries;
19
- private replaceWith?;
20
- private severityLevels;
21
- private ignoreWords;
22
- private logProfanity;
23
- private allowObfuscatedMatch;
24
- private fuzzyToleranceLevel;
25
- constructor(config?: FilterConfig);
26
- private debugLog;
27
- private normalizeObfuscated;
28
- private getRegex;
29
- private isFuzzyToleranceMatch;
30
- private evaluateSeverity;
31
- isProfane(value: string): boolean;
32
- matches(word: string): boolean;
33
- checkProfanity(text: string): CheckProfanityResult;
34
- checkProfanityWithMinSeverity(text: string, minSeverity?: SeverityLevel): {
35
- filteredWords: string[];
36
- result: CheckProfanityResult;
37
- };
38
- }
39
- export { Filter };
@@ -1,162 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Filter = void 0;
7
- const dictionary_1 = __importDefault(require("../data/dictionary"));
8
- const types_1 = require("../types/types");
9
- class Filter {
10
- constructor(config) {
11
- var _a, _b, _c, _d, _e, _f, _g;
12
- let words = [];
13
- this.caseSensitive = (_a = config === null || config === void 0 ? void 0 : config.caseSensitive) !== null && _a !== void 0 ? _a : false;
14
- this.allowObfuscatedMatch = (_b = config === null || config === void 0 ? void 0 : config.allowObfuscatedMatch) !== null && _b !== void 0 ? _b : false;
15
- this.wordBoundaries = (_c = config === null || config === void 0 ? void 0 : config.wordBoundaries) !== null && _c !== void 0 ? _c : !this.allowObfuscatedMatch;
16
- this.replaceWith = config === null || config === void 0 ? void 0 : config.replaceWith;
17
- this.severityLevels = (_d = config === null || config === void 0 ? void 0 : config.severityLevels) !== null && _d !== void 0 ? _d : false;
18
- this.ignoreWords = new Set(((_e = config === null || config === void 0 ? void 0 : config.ignoreWords) === null || _e === void 0 ? void 0 : _e.map((word) => word.toLowerCase())) || []);
19
- this.logProfanity = (_f = config === null || config === void 0 ? void 0 : config.logProfanity) !== null && _f !== void 0 ? _f : false;
20
- this.fuzzyToleranceLevel = (_g = config === null || config === void 0 ? void 0 : config.fuzzyToleranceLevel) !== null && _g !== void 0 ? _g : 0.8;
21
- if (config === null || config === void 0 ? void 0 : config.allLanguages) {
22
- for (const lang in dictionary_1.default) {
23
- if (dictionary_1.default.hasOwnProperty(lang)) {
24
- words = [...words, ...dictionary_1.default[lang]];
25
- }
26
- }
27
- }
28
- else {
29
- const languages = (config === null || config === void 0 ? void 0 : config.languages) || ['english'];
30
- const languagesChecks = new Set(languages);
31
- languagesChecks.forEach((lang) => {
32
- words = [...words, ...dictionary_1.default[lang]];
33
- });
34
- }
35
- if (config === null || config === void 0 ? void 0 : config.customWords) {
36
- words = [...words, ...config.customWords];
37
- }
38
- this.words = new Map(words.map((word) => [word.toLowerCase(), 1]));
39
- }
40
- debugLog(...args) {
41
- if (this.logProfanity) {
42
- console.log('[glin-profanity]', ...args);
43
- }
44
- }
45
- normalizeObfuscated(text) {
46
- let normalized = text.replace(/([a-zA-Z])\1{1,}/g, '$1$1');
47
- const charMap = {
48
- '@': 'a',
49
- $: 's',
50
- '!': 'i',
51
- '1': 'i',
52
- '*': '',
53
- };
54
- normalized = normalized.replace(/[@$!1*]/g, (m) => charMap[m] || m);
55
- return normalized;
56
- }
57
- getRegex(word) {
58
- const flags = this.caseSensitive ? 'g' : 'gi';
59
- const escapedWord = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
60
- const boundary = this.wordBoundaries ? '\\b' : '';
61
- return new RegExp(`${boundary}${escapedWord}${boundary}`, flags);
62
- }
63
- isFuzzyToleranceMatch(word, text) {
64
- const simplifiedText = text.toLowerCase().replace(/[^a-z]/g, '');
65
- const simplifiedWord = word.toLowerCase();
66
- let matchCount = 0;
67
- let index = 0;
68
- for (let i = 0; i < simplifiedText.length; i++) {
69
- if (simplifiedText[i] === simplifiedWord[index]) {
70
- matchCount++;
71
- index++;
72
- if (index === simplifiedWord.length)
73
- break;
74
- }
75
- }
76
- const score = matchCount / simplifiedWord.length;
77
- return score >= this.fuzzyToleranceLevel;
78
- }
79
- evaluateSeverity(word, text) {
80
- if (this.wordBoundaries && this.getRegex(word).test(text)) {
81
- return types_1.SeverityLevel.Exact;
82
- }
83
- if (this.getRegex(word).test(text))
84
- return types_1.SeverityLevel.Exact;
85
- if (this.isFuzzyToleranceMatch(word, text))
86
- return types_1.SeverityLevel.Fuzzy;
87
- return undefined;
88
- }
89
- isProfane(value) {
90
- let input = this.allowObfuscatedMatch
91
- ? this.normalizeObfuscated(value)
92
- : value;
93
- for (const word of this.words.keys()) {
94
- if (!this.ignoreWords.has(word.toLowerCase()) &&
95
- this.evaluateSeverity(word, input) !== undefined) {
96
- return true;
97
- }
98
- }
99
- return false;
100
- }
101
- matches(word) {
102
- return this.isProfane(word);
103
- }
104
- checkProfanity(text) {
105
- let input = this.allowObfuscatedMatch
106
- ? this.normalizeObfuscated(text)
107
- : text;
108
- input = input.toLowerCase();
109
- const profaneWords = [];
110
- const severityMap = {};
111
- for (const dictWord of this.words.keys()) {
112
- if (this.ignoreWords.has(dictWord.toLowerCase()))
113
- continue;
114
- const severity = this.evaluateSeverity(dictWord, input);
115
- if (severity !== undefined) {
116
- const regex = this.getRegex(dictWord);
117
- let match;
118
- while ((match = regex.exec(input)) !== null) {
119
- profaneWords.push(match[0]);
120
- if (severityMap[match[0]] === undefined) {
121
- severityMap[match[0]] = severity;
122
- }
123
- }
124
- }
125
- }
126
- if (profaneWords.length > 0) {
127
- this.debugLog('Detected:', profaneWords);
128
- }
129
- let processedText = text;
130
- if (this.replaceWith && profaneWords.length > 0) {
131
- const uniqueWords = Array.from(new Set(profaneWords));
132
- for (const word of uniqueWords) {
133
- const escaped = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
134
- const replacementRegex = this.wordBoundaries
135
- ? new RegExp(`\\b${escaped}\\b`, 'gi')
136
- : new RegExp(escaped, 'gi');
137
- processedText = processedText.replace(replacementRegex, this.replaceWith);
138
- }
139
- }
140
- return {
141
- containsProfanity: profaneWords.length > 0,
142
- profaneWords: Array.from(new Set(profaneWords)),
143
- processedText: this.replaceWith ? processedText : undefined,
144
- severityMap: this.severityLevels && Object.keys(severityMap).length > 0
145
- ? severityMap
146
- : undefined,
147
- };
148
- }
149
- checkProfanityWithMinSeverity(text, minSeverity = types_1.SeverityLevel.Exact) {
150
- const result = this.checkProfanity(text);
151
- const filteredWords = result.severityMap && result.profaneWords.length > 0
152
- ? result.profaneWords.filter((word) => {
153
- var _a;
154
- const severity = (_a = result.severityMap) === null || _a === void 0 ? void 0 : _a[word];
155
- return typeof severity === 'number' && severity >= minSeverity;
156
- })
157
- : [];
158
- return { filteredWords, result };
159
- }
160
- }
161
- exports.Filter = Filter;
162
- //# sourceMappingURL=Filter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Filter.js","sourceRoot":"","sources":["../../../src/filters/Filter.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import { CheckProfanityResult, Language, SeverityLevel } from '../types/types';
2
- export interface ProfanityCheckerConfig {
3
- languages?: Language[];
4
- allLanguages?: boolean;
5
- caseSensitive?: boolean;
6
- wordBoundaries?: boolean;
7
- customWords?: string[];
8
- replaceWith?: string;
9
- severityLevels?: boolean;
10
- allowObfuscatedMatch?: boolean;
11
- fuzzyToleranceLevel?: number;
12
- minSeverity?: SeverityLevel;
13
- autoReplace?: boolean;
14
- customActions?: (result: CheckProfanityResult) => void;
15
- }
16
- export declare const useProfanityChecker: (config?: ProfanityCheckerConfig) => {
17
- result: CheckProfanityResult;
18
- checkText: (text: string) => {
19
- filteredWords: string[];
20
- autoReplaced: string;
21
- containsProfanity: boolean;
22
- profaneWords: string[];
23
- processedText?: string;
24
- severityMap?: Record<string, SeverityLevel>;
25
- matchContexts?: {
26
- word: string;
27
- context: string;
28
- }[];
29
- };
30
- checkTextAsync: (text: string) => Promise<CheckProfanityResult>;
31
- reset: () => void;
32
- isDirty: boolean;
33
- isWordProfane: (word: string) => boolean;
34
- };
@@ -1,68 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.useProfanityChecker = void 0;
16
- const react_1 = require("react");
17
- const Filter_1 = require("../filters/Filter");
18
- const globalWhitelist_json_1 = __importDefault(require("../data/globalWhitelist.json"));
19
- const useProfanityChecker = (config) => {
20
- var _a;
21
- const [result, setResult] = (0, react_1.useState)(null);
22
- const filterConfig = (0, react_1.useMemo)(() => {
23
- var _a;
24
- const effective = Object.assign(Object.assign({}, (config !== null && config !== void 0 ? config : {})), { ignoreWords: globalWhitelist_json_1.default.whitelist, fuzzyToleranceLevel: (_a = config === null || config === void 0 ? void 0 : config.fuzzyToleranceLevel) !== null && _a !== void 0 ? _a : 0.8 });
25
- if (effective.allowObfuscatedMatch && effective.wordBoundaries) {
26
- console.warn('[Glin-Profanity] Obfuscated match enabled → wordBoundaries will be ignored internally.');
27
- }
28
- return effective;
29
- }, [config]);
30
- const filter = (0, react_1.useMemo)(() => new Filter_1.Filter(filterConfig), [filterConfig]);
31
- const checkText = (text) => {
32
- var _a;
33
- const checkResult = filter.checkProfanity(text);
34
- // Filter based on minSeverity (if provided)
35
- const filteredWords = (config === null || config === void 0 ? void 0 : config.minSeverity) && checkResult.severityMap
36
- ? checkResult.profaneWords.filter((word) => checkResult.severityMap &&
37
- checkResult.severityMap[word] >= config.minSeverity)
38
- : checkResult.profaneWords;
39
- // Optional auto-replace
40
- const autoReplaced = (config === null || config === void 0 ? void 0 : config.autoReplace) && checkResult.processedText
41
- ? checkResult.processedText
42
- : text;
43
- setResult(checkResult);
44
- (_a = config === null || config === void 0 ? void 0 : config.customActions) === null || _a === void 0 ? void 0 : _a.call(config, checkResult);
45
- return Object.assign(Object.assign({}, checkResult), { filteredWords,
46
- autoReplaced });
47
- };
48
- const checkTextAsync = (text) => __awaiter(void 0, void 0, void 0, function* () {
49
- return new Promise((resolve) => {
50
- const checkResult = checkText(text); // sync call
51
- resolve(checkResult);
52
- });
53
- });
54
- const isWordProfane = (word) => {
55
- return filter.checkProfanity(word).containsProfanity;
56
- };
57
- const reset = () => setResult(null);
58
- return {
59
- result,
60
- checkText,
61
- checkTextAsync,
62
- reset,
63
- isDirty: (_a = result === null || result === void 0 ? void 0 : result.containsProfanity) !== null && _a !== void 0 ? _a : false,
64
- isWordProfane,
65
- };
66
- };
67
- exports.useProfanityChecker = useProfanityChecker;
68
- //# sourceMappingURL=useProfanityChecker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useProfanityChecker.js","sourceRoot":"","sources":["../../../src/hooks/useProfanityChecker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAA0C;AAC1C,8CAAyD;AAEzD,wFAA+D;AAiBxD,MAAM,mBAAmB,GAAG,CAAC,MAA+B,EAAE,EAAE;;IACrE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAA8B,IAAI,CAAC,CAAC;IAExE,MAAM,YAAY,GAAiB,IAAA,eAAO,EAAC,GAAG,EAAE;;QAC9C,MAAM,SAAS,mCACV,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,KACjB,WAAW,EAAE,8BAAmB,CAAC,SAAS,EAC1C,mBAAmB,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,mCAAI,GAAG,GACxD,CAAC;QAEF,IAAI,SAAS,CAAC,oBAAoB,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CACV,wFAAwF,CACzF,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAI,eAAM,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEvE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;;QACjC,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEhD,4CAA4C;QAC5C,MAAM,aAAa,GACjB,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,KAAI,WAAW,CAAC,WAAW;YAC5C,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAC7B,CAAC,IAAI,EAAE,EAAE,CACP,WAAW,CAAC,WAAW;gBACvB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,WAAY,CACvD;YACH,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC;QAE/B,wBAAwB;QACxB,MAAM,YAAY,GAChB,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,KAAI,WAAW,CAAC,aAAa;YAC9C,CAAC,CAAC,WAAW,CAAC,aAAa;YAC3B,CAAC,CAAC,IAAI,CAAC;QAEX,SAAS,CAAC,WAAW,CAAC,CAAC;QACvB,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,uDAAG,WAAW,CAAC,CAAC;QAErC,uCACK,WAAW,KACd,aAAa;YACb,YAAY,IACZ;IACJ,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAO,IAAY,EAAE,EAAE;QAC5C,OAAO,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,EAAE;YACnD,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY;YACjD,OAAO,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAA,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE;QACrC,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC;IACvD,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO;QACL,MAAM;QACN,SAAS;QACT,cAAc;QACd,KAAK;QACL,OAAO,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,iBAAiB,mCAAI,KAAK;QAC3C,aAAa;KACd,CAAC;AACJ,CAAC,CAAC;AAvEW,QAAA,mBAAmB,uBAuE9B"}
@@ -1,4 +0,0 @@
1
- export { Filter } from './filters/Filter';
2
- export { useProfanityChecker } from './hooks/useProfanityChecker';
3
- export { SeverityLevel } from './types/types';
4
- export type { Language, CheckProfanityResult } from './types/types';
package/lib/cjs/index.js DELETED
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SeverityLevel = exports.useProfanityChecker = exports.Filter = void 0;
4
- var Filter_1 = require("./filters/Filter");
5
- Object.defineProperty(exports, "Filter", { enumerable: true, get: function () { return Filter_1.Filter; } });
6
- var useProfanityChecker_1 = require("./hooks/useProfanityChecker");
7
- Object.defineProperty(exports, "useProfanityChecker", { enumerable: true, get: function () { return useProfanityChecker_1.useProfanityChecker; } });
8
- var types_1 = require("./types/types");
9
- Object.defineProperty(exports, "SeverityLevel", { enumerable: true, get: function () { return types_1.SeverityLevel; } });
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA0C;AAAjC,gGAAA,MAAM,OAAA;AACf,mEAAkE;AAAzD,0HAAA,mBAAmB,OAAA;AAC5B,uCAA8C;AAArC,sGAAA,aAAa,OAAA"}
@@ -1,21 +0,0 @@
1
- export declare enum SeverityLevel {
2
- Exact = 1,
3
- Fuzzy = 2,
4
- Merged = 3
5
- }
6
- export type SeverityLabel = keyof typeof SeverityLevel;
7
- export interface FilteredProfanityResult {
8
- result: CheckProfanityResult;
9
- filteredWords: string[];
10
- }
11
- export interface CheckProfanityResult {
12
- containsProfanity: boolean;
13
- profaneWords: string[];
14
- processedText?: string;
15
- severityMap?: Record<string, SeverityLevel>;
16
- matchContexts?: {
17
- word: string;
18
- context: string;
19
- }[];
20
- }
21
- export type Language = 'arabic' | 'chinese' | 'czech' | 'danish' | 'english' | 'esperanto' | 'finnish' | 'french' | 'german' | 'hindi' | 'hungarian' | 'italian' | 'japanese' | 'korean' | 'norwegian' | 'persian' | 'polish' | 'portuguese' | 'russian' | 'turkish' | 'swedish' | 'thai';
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SeverityLevel = void 0;
4
- // src/types/types.ts
5
- var SeverityLevel;
6
- (function (SeverityLevel) {
7
- SeverityLevel[SeverityLevel["Exact"] = 1] = "Exact";
8
- SeverityLevel[SeverityLevel["Fuzzy"] = 2] = "Fuzzy";
9
- SeverityLevel[SeverityLevel["Merged"] = 3] = "Merged";
10
- })(SeverityLevel || (exports.SeverityLevel = SeverityLevel = {}));
11
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/types/types.ts"],"names":[],"mappings":";;;AAAA,qBAAqB;AACrB,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,mDAAS,CAAA;IACT,mDAAS,CAAA;IACT,qDAAU,CAAA;AACZ,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB"}
@@ -1,17 +0,0 @@
1
- {
2
- "words": [
3
- "drittsekk",
4
- "faen i helvete",
5
- "fitte",
6
- "jævla",
7
- "kuk",
8
- "kukene",
9
- "kuker",
10
- "nigger",
11
- "pikk",
12
- "sotrør",
13
- "ståpikk",
14
- "ståpikkene",
15
- "ståpikker"
16
- ]
17
- }
@@ -1,157 +0,0 @@
1
- {
2
- "words": [
3
- "سكس",
4
- "طيز",
5
- "شرج",
6
- "لعق",
7
- "لحس",
8
- "تمص",
9
- "بيضان",
10
- "ثدي",
11
- "بز",
12
- "حلمة",
13
- "مفلقسة",
14
- "بظر",
15
- "كس",
16
- "مبادل",
17
- "عاهرة",
18
- "جماع",
19
- "قضيب",
20
- "زب",
21
- "لوطي",
22
- "لواط",
23
- "سحاق",
24
- "اغتصاب",
25
- "خنثي",
26
- "احتلام",
27
- "نيك",
28
- "متناك",
29
- "شرموطة",
30
- "عرص",
31
- "خول",
32
- "قحبة",
33
- "لبوة",
34
- "وسخ",
35
- "علق",
36
- "ناك",
37
- "منيك",
38
- "شرمط",
39
- "قحب",
40
- "شرموط",
41
- "خول",
42
- "هنيك",
43
- "فحل",
44
- "ديوث",
45
- "متناك",
46
- "هايج",
47
- "زبر",
48
- "bdsm",
49
- "زان",
50
- "سادي",
51
- "سادى",
52
- "كسها",
53
- "كسي",
54
- "كسك",
55
- "كسم",
56
- "بنتاك",
57
- "بتناك",
58
- "نيكني",
59
- "ديوث",
60
- "نياك",
61
- "فشاخ",
62
- "فشخ",
63
- "هفشخك",
64
- "شذوذ",
65
- "لواط",
66
- "لوطي",
67
- "لوطى",
68
- "عاهر",
69
- "لحس",
70
- "متع",
71
- "حمام",
72
- "هربط",
73
- "دياث",
74
- "سحاق",
75
- "جنس",
76
- "جنس",
77
- "جوزي",
78
- "مراتي",
79
- "مراتى",
80
- "مرات",
81
- "ورا",
82
- "شعر",
83
- "مشعر",
84
- "اركب",
85
- "فرس",
86
- "جاد",
87
- "منيوك",
88
- "زوبر",
89
- "طياز",
90
- "شراميط",
91
- "فاجر",
92
- "محروم",
93
- "واقف",
94
- "بيحك",
95
- "ممحونة",
96
- "لبن",
97
- "لبو",
98
- "واقف",
99
- "شرقان",
100
- "افضي",
101
- "دهولت",
102
- "bzaz",
103
- "nek",
104
- "nik",
105
- "mtnak",
106
- "zeb",
107
- "zep",
108
- "zobr",
109
- "zopr",
110
- "kos",
111
- "a7a",
112
- "hayg",
113
- "لبوه",
114
- "لبوة",
115
- "لبوت",
116
- "sharma",
117
- "banoty",
118
- "بنوتي",
119
- "بنوتى",
120
- "سلب",
121
- "عايز",
122
- "دكر",
123
- "نتاية",
124
- "نتايه",
125
- "زنج",
126
- "ممحون",
127
- "تعبان",
128
- "اقعد",
129
- "بزاز",
130
- "هيجان",
131
- "سافل",
132
- "مصيهولي",
133
- "هتمص",
134
- "مصي",
135
- "بز",
136
- "hayg",
137
- "كلوت",
138
- "اندر",
139
- "سنتيا",
140
- "بوكسر",
141
- "بتاع",
142
- "مشتهي",
143
- "زبى",
144
- "نكته",
145
- "اتناك",
146
- "nayak",
147
- "nyak",
148
- "neeek",
149
- "اغتصا",
150
- "زب",
151
- "كس",
152
- "بلكيشن",
153
- "كيشن",
154
- "ليسبيان",
155
- "سبيان"
156
- ]
157
- }