glin-profanity 2.1.0 → 2.3.3

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 (124) hide show
  1. package/README.md +205 -55
  2. package/lib/cjs/packages/js/src/core/index.d.ts +4 -0
  3. package/lib/cjs/packages/js/src/core/index.js +55 -0
  4. package/lib/cjs/packages/js/src/core/index.js.map +1 -0
  5. package/lib/cjs/packages/js/src/core/types.d.ts +20 -0
  6. package/lib/cjs/packages/js/src/core/types.js +3 -0
  7. package/lib/cjs/packages/js/src/core/types.js.map +1 -0
  8. package/lib/cjs/{data → packages/js/src/data}/dictionary.d.ts +1 -0
  9. package/lib/cjs/packages/js/src/data/dictionary.js +54 -0
  10. package/lib/cjs/packages/js/src/data/dictionary.js.map +1 -0
  11. package/lib/cjs/{filters → packages/js/src/filters}/Filter.d.ts +7 -14
  12. package/lib/cjs/packages/js/src/filters/Filter.js +246 -0
  13. package/lib/cjs/packages/js/src/filters/Filter.js.map +1 -0
  14. package/lib/cjs/packages/js/src/hooks/useProfanityChecker.d.ts +11 -0
  15. package/lib/cjs/packages/js/src/hooks/useProfanityChecker.js +42 -0
  16. package/lib/cjs/packages/js/src/hooks/useProfanityChecker.js.map +1 -0
  17. package/lib/cjs/packages/js/src/index.d.ts +12 -0
  18. package/lib/cjs/packages/js/src/index.js +24 -0
  19. package/lib/cjs/packages/js/src/index.js.map +1 -0
  20. package/lib/cjs/packages/js/src/nlp/contextAnalyzer.d.ts +35 -0
  21. package/lib/cjs/packages/js/src/nlp/contextAnalyzer.js +203 -0
  22. package/lib/cjs/packages/js/src/nlp/contextAnalyzer.js.map +1 -0
  23. package/lib/cjs/packages/js/src/types/types.d.ts +56 -0
  24. package/lib/cjs/packages/js/src/types/types.js +14 -0
  25. package/lib/cjs/packages/js/src/types/types.js.map +1 -0
  26. package/lib/cjs/shared/dictionaries/spanish.json +72 -0
  27. package/lib/esm/packages/js/src/core/index.d.ts +4 -0
  28. package/lib/esm/packages/js/src/core/index.js +47 -0
  29. package/lib/esm/packages/js/src/core/index.js.map +1 -0
  30. package/lib/esm/packages/js/src/core/types.d.ts +20 -0
  31. package/lib/esm/packages/js/src/core/types.js +2 -0
  32. package/lib/esm/packages/js/src/core/types.js.map +1 -0
  33. package/lib/esm/{data → packages/js/src/data}/dictionary.d.ts +1 -0
  34. package/lib/esm/packages/js/src/data/dictionary.js +49 -0
  35. package/lib/esm/packages/js/src/data/dictionary.js.map +1 -0
  36. package/lib/esm/{filters → packages/js/src/filters}/Filter.d.ts +7 -14
  37. package/lib/esm/packages/js/src/filters/Filter.js +240 -0
  38. package/lib/esm/packages/js/src/filters/Filter.js.map +1 -0
  39. package/lib/esm/packages/js/src/hooks/useProfanityChecker.d.ts +11 -0
  40. package/lib/esm/packages/js/src/hooks/useProfanityChecker.js +38 -0
  41. package/lib/esm/packages/js/src/hooks/useProfanityChecker.js.map +1 -0
  42. package/lib/esm/packages/js/src/index.d.ts +12 -0
  43. package/lib/esm/packages/js/src/index.js +15 -0
  44. package/lib/esm/packages/js/src/index.js.map +1 -0
  45. package/lib/esm/packages/js/src/nlp/contextAnalyzer.d.ts +35 -0
  46. package/lib/esm/packages/js/src/nlp/contextAnalyzer.js +199 -0
  47. package/lib/esm/packages/js/src/nlp/contextAnalyzer.js.map +1 -0
  48. package/lib/esm/packages/js/src/types/types.d.ts +56 -0
  49. package/lib/esm/packages/js/src/types/types.js +11 -0
  50. package/lib/esm/packages/js/src/types/types.js.map +1 -0
  51. package/lib/esm/shared/dictionaries/spanish.json +72 -0
  52. package/package.json +26 -3
  53. package/lib/cjs/data/dictionary.js +0 -52
  54. package/lib/cjs/data/dictionary.js.map +0 -1
  55. package/lib/cjs/filters/Filter.js +0 -162
  56. package/lib/cjs/filters/Filter.js.map +0 -1
  57. package/lib/cjs/hooks/useProfanityChecker.d.ts +0 -34
  58. package/lib/cjs/hooks/useProfanityChecker.js +0 -68
  59. package/lib/cjs/hooks/useProfanityChecker.js.map +0 -1
  60. package/lib/cjs/index.d.ts +0 -4
  61. package/lib/cjs/index.js +0 -10
  62. package/lib/cjs/index.js.map +0 -1
  63. package/lib/cjs/types/types.d.ts +0 -21
  64. package/lib/cjs/types/types.js +0 -11
  65. package/lib/cjs/types/types.js.map +0 -1
  66. package/lib/esm/data/dictionary.js +0 -47
  67. package/lib/esm/data/dictionary.js.map +0 -1
  68. package/lib/esm/filters/Filter.js +0 -156
  69. package/lib/esm/filters/Filter.js.map +0 -1
  70. package/lib/esm/hooks/useProfanityChecker.d.ts +0 -34
  71. package/lib/esm/hooks/useProfanityChecker.js +0 -61
  72. package/lib/esm/hooks/useProfanityChecker.js.map +0 -1
  73. package/lib/esm/index.d.ts +0 -4
  74. package/lib/esm/index.js +0 -4
  75. package/lib/esm/index.js.map +0 -1
  76. package/lib/esm/types/types.d.ts +0 -21
  77. package/lib/esm/types/types.js +0 -8
  78. package/lib/esm/types/types.js.map +0 -1
  79. /package/lib/cjs/{data → shared/dictionaries}/Norwegian.json +0 -0
  80. /package/lib/cjs/{data → shared/dictionaries}/arabic.json +0 -0
  81. /package/lib/cjs/{data → shared/dictionaries}/chinese.json +0 -0
  82. /package/lib/cjs/{data → shared/dictionaries}/czech.json +0 -0
  83. /package/lib/cjs/{data → shared/dictionaries}/danish.json +0 -0
  84. /package/lib/cjs/{data → shared/dictionaries}/english.json +0 -0
  85. /package/lib/cjs/{data → shared/dictionaries}/esperanto.json +0 -0
  86. /package/lib/cjs/{data → shared/dictionaries}/finnish.json +0 -0
  87. /package/lib/cjs/{data → shared/dictionaries}/french.json +0 -0
  88. /package/lib/cjs/{data → shared/dictionaries}/german.json +0 -0
  89. /package/lib/cjs/{data → shared/dictionaries}/globalWhitelist.json +0 -0
  90. /package/lib/cjs/{data → shared/dictionaries}/hindi.json +0 -0
  91. /package/lib/cjs/{data → shared/dictionaries}/hungarian.json +0 -0
  92. /package/lib/cjs/{data → shared/dictionaries}/italian.json +0 -0
  93. /package/lib/cjs/{data → shared/dictionaries}/japanese.json +0 -0
  94. /package/lib/cjs/{data → shared/dictionaries}/korean.json +0 -0
  95. /package/lib/cjs/{data → shared/dictionaries}/persian.json +0 -0
  96. /package/lib/cjs/{data → shared/dictionaries}/polish.json +0 -0
  97. /package/lib/cjs/{data → shared/dictionaries}/portuguese.json +0 -0
  98. /package/lib/cjs/{data → shared/dictionaries}/russian.json +0 -0
  99. /package/lib/cjs/{data → shared/dictionaries}/swedish.json +0 -0
  100. /package/lib/cjs/{data → shared/dictionaries}/thai.json +0 -0
  101. /package/lib/cjs/{data → shared/dictionaries}/turkish.json +0 -0
  102. /package/lib/esm/{data → shared/dictionaries}/Norwegian.json +0 -0
  103. /package/lib/esm/{data → shared/dictionaries}/arabic.json +0 -0
  104. /package/lib/esm/{data → shared/dictionaries}/chinese.json +0 -0
  105. /package/lib/esm/{data → shared/dictionaries}/czech.json +0 -0
  106. /package/lib/esm/{data → shared/dictionaries}/danish.json +0 -0
  107. /package/lib/esm/{data → shared/dictionaries}/english.json +0 -0
  108. /package/lib/esm/{data → shared/dictionaries}/esperanto.json +0 -0
  109. /package/lib/esm/{data → shared/dictionaries}/finnish.json +0 -0
  110. /package/lib/esm/{data → shared/dictionaries}/french.json +0 -0
  111. /package/lib/esm/{data → shared/dictionaries}/german.json +0 -0
  112. /package/lib/esm/{data → shared/dictionaries}/globalWhitelist.json +0 -0
  113. /package/lib/esm/{data → shared/dictionaries}/hindi.json +0 -0
  114. /package/lib/esm/{data → shared/dictionaries}/hungarian.json +0 -0
  115. /package/lib/esm/{data → shared/dictionaries}/italian.json +0 -0
  116. /package/lib/esm/{data → shared/dictionaries}/japanese.json +0 -0
  117. /package/lib/esm/{data → shared/dictionaries}/korean.json +0 -0
  118. /package/lib/esm/{data → shared/dictionaries}/persian.json +0 -0
  119. /package/lib/esm/{data → shared/dictionaries}/polish.json +0 -0
  120. /package/lib/esm/{data → shared/dictionaries}/portuguese.json +0 -0
  121. /package/lib/esm/{data → shared/dictionaries}/russian.json +0 -0
  122. /package/lib/esm/{data → shared/dictionaries}/swedish.json +0 -0
  123. /package/lib/esm/{data → shared/dictionaries}/thai.json +0 -0
  124. /package/lib/esm/{data → shared/dictionaries}/turkish.json +0 -0
@@ -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,47 +0,0 @@
1
- import Arabic from './arabic.json';
2
- import Chinese from './chinese.json';
3
- import Czech from './czech.json';
4
- import Danish from './danish.json';
5
- import Esperanto from './esperanto.json';
6
- import English from './english.json';
7
- import Finnish from './finnish.json';
8
- import German from './german.json';
9
- import Hindi from './hindi.json';
10
- import Hungarian from './hungarian.json';
11
- import Korean from './korean.json';
12
- import Norwegian from './Norwegian.json';
13
- import Persian from './persian.json';
14
- import Polish from './polish.json';
15
- import Portuguese from './portuguese.json';
16
- import Russian from './russian.json';
17
- import French from './french.json';
18
- import Italian from './italian.json';
19
- import Japanese from './japanese.json';
20
- import Turkish from './turkish.json';
21
- import Swedish from './swedish.json';
22
- import Thai from './thai.json';
23
- export default {
24
- arabic: Arabic.words,
25
- chinese: Chinese.words,
26
- czech: Czech.words,
27
- danish: Danish.words,
28
- english: English.words,
29
- esperanto: Esperanto.words,
30
- finnish: Finnish.words,
31
- french: French.words,
32
- german: German.words,
33
- hindi: Hindi.words,
34
- hungarian: Hungarian.words,
35
- italian: Italian.words,
36
- japanese: Japanese.words,
37
- korean: Korean.words,
38
- norwegian: Norwegian.words,
39
- persian: Persian.words,
40
- polish: Polish.words,
41
- portuguese: Portuguese.words,
42
- russian: Russian.words,
43
- turkish: Turkish.words,
44
- swedish: Swedish.words,
45
- thai: Thai.words,
46
- };
47
- //# sourceMappingURL=dictionary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../../src/data/dictionary.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,KAAK,MAAM,cAAc,CAAC;AACjC,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,KAAK,MAAM,cAAc,CAAC;AACjC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,eAAe;IACb,MAAM,EAAE,MAAM,CAAC,KAAK;IACpB,OAAO,EAAE,OAAO,CAAC,KAAK;IACtB,KAAK,EAAE,KAAK,CAAC,KAAK;IAClB,MAAM,EAAE,MAAM,CAAC,KAAK;IACpB,OAAO,EAAE,OAAO,CAAC,KAAK;IACtB,SAAS,EAAE,SAAS,CAAC,KAAK;IAC1B,OAAO,EAAE,OAAO,CAAC,KAAK;IACtB,MAAM,EAAE,MAAM,CAAC,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC,KAAK;IACpB,KAAK,EAAE,KAAK,CAAC,KAAK;IAClB,SAAS,EAAE,SAAS,CAAC,KAAK;IAC1B,OAAO,EAAE,OAAO,CAAC,KAAK;IACtB,QAAQ,EAAE,QAAQ,CAAC,KAAK;IACxB,MAAM,EAAE,MAAM,CAAC,KAAK;IACpB,SAAS,EAAE,SAAS,CAAC,KAAK;IAC1B,OAAO,EAAE,OAAO,CAAC,KAAK;IACtB,MAAM,EAAE,MAAM,CAAC,KAAK;IACpB,UAAU,EAAE,UAAU,CAAC,KAAK;IAC5B,OAAO,EAAE,OAAO,CAAC,KAAK;IACtB,OAAO,EAAE,OAAO,CAAC,KAAK;IACtB,OAAO,EAAE,OAAO,CAAC,KAAK;IACtB,IAAI,EAAE,IAAI,CAAC,KAAK;CACjB,CAAC"}
@@ -1,156 +0,0 @@
1
- import dictionary from '../data/dictionary';
2
- import { SeverityLevel } from '../types/types';
3
- class Filter {
4
- constructor(config) {
5
- var _a, _b, _c, _d, _e, _f, _g;
6
- let words = [];
7
- this.caseSensitive = (_a = config === null || config === void 0 ? void 0 : config.caseSensitive) !== null && _a !== void 0 ? _a : false;
8
- this.allowObfuscatedMatch = (_b = config === null || config === void 0 ? void 0 : config.allowObfuscatedMatch) !== null && _b !== void 0 ? _b : false;
9
- this.wordBoundaries = (_c = config === null || config === void 0 ? void 0 : config.wordBoundaries) !== null && _c !== void 0 ? _c : !this.allowObfuscatedMatch;
10
- this.replaceWith = config === null || config === void 0 ? void 0 : config.replaceWith;
11
- this.severityLevels = (_d = config === null || config === void 0 ? void 0 : config.severityLevels) !== null && _d !== void 0 ? _d : false;
12
- 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())) || []);
13
- this.logProfanity = (_f = config === null || config === void 0 ? void 0 : config.logProfanity) !== null && _f !== void 0 ? _f : false;
14
- this.fuzzyToleranceLevel = (_g = config === null || config === void 0 ? void 0 : config.fuzzyToleranceLevel) !== null && _g !== void 0 ? _g : 0.8;
15
- if (config === null || config === void 0 ? void 0 : config.allLanguages) {
16
- for (const lang in dictionary) {
17
- if (dictionary.hasOwnProperty(lang)) {
18
- words = [...words, ...dictionary[lang]];
19
- }
20
- }
21
- }
22
- else {
23
- const languages = (config === null || config === void 0 ? void 0 : config.languages) || ['english'];
24
- const languagesChecks = new Set(languages);
25
- languagesChecks.forEach((lang) => {
26
- words = [...words, ...dictionary[lang]];
27
- });
28
- }
29
- if (config === null || config === void 0 ? void 0 : config.customWords) {
30
- words = [...words, ...config.customWords];
31
- }
32
- this.words = new Map(words.map((word) => [word.toLowerCase(), 1]));
33
- }
34
- debugLog(...args) {
35
- if (this.logProfanity) {
36
- console.log('[glin-profanity]', ...args);
37
- }
38
- }
39
- normalizeObfuscated(text) {
40
- let normalized = text.replace(/([a-zA-Z])\1{1,}/g, '$1$1');
41
- const charMap = {
42
- '@': 'a',
43
- $: 's',
44
- '!': 'i',
45
- '1': 'i',
46
- '*': '',
47
- };
48
- normalized = normalized.replace(/[@$!1*]/g, (m) => charMap[m] || m);
49
- return normalized;
50
- }
51
- getRegex(word) {
52
- const flags = this.caseSensitive ? 'g' : 'gi';
53
- const escapedWord = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
54
- const boundary = this.wordBoundaries ? '\\b' : '';
55
- return new RegExp(`${boundary}${escapedWord}${boundary}`, flags);
56
- }
57
- isFuzzyToleranceMatch(word, text) {
58
- const simplifiedText = text.toLowerCase().replace(/[^a-z]/g, '');
59
- const simplifiedWord = word.toLowerCase();
60
- let matchCount = 0;
61
- let index = 0;
62
- for (let i = 0; i < simplifiedText.length; i++) {
63
- if (simplifiedText[i] === simplifiedWord[index]) {
64
- matchCount++;
65
- index++;
66
- if (index === simplifiedWord.length)
67
- break;
68
- }
69
- }
70
- const score = matchCount / simplifiedWord.length;
71
- return score >= this.fuzzyToleranceLevel;
72
- }
73
- evaluateSeverity(word, text) {
74
- if (this.wordBoundaries && this.getRegex(word).test(text)) {
75
- return SeverityLevel.Exact;
76
- }
77
- if (this.getRegex(word).test(text))
78
- return SeverityLevel.Exact;
79
- if (this.isFuzzyToleranceMatch(word, text))
80
- return SeverityLevel.Fuzzy;
81
- return undefined;
82
- }
83
- isProfane(value) {
84
- let input = this.allowObfuscatedMatch
85
- ? this.normalizeObfuscated(value)
86
- : value;
87
- for (const word of this.words.keys()) {
88
- if (!this.ignoreWords.has(word.toLowerCase()) &&
89
- this.evaluateSeverity(word, input) !== undefined) {
90
- return true;
91
- }
92
- }
93
- return false;
94
- }
95
- matches(word) {
96
- return this.isProfane(word);
97
- }
98
- checkProfanity(text) {
99
- let input = this.allowObfuscatedMatch
100
- ? this.normalizeObfuscated(text)
101
- : text;
102
- input = input.toLowerCase();
103
- const profaneWords = [];
104
- const severityMap = {};
105
- for (const dictWord of this.words.keys()) {
106
- if (this.ignoreWords.has(dictWord.toLowerCase()))
107
- continue;
108
- const severity = this.evaluateSeverity(dictWord, input);
109
- if (severity !== undefined) {
110
- const regex = this.getRegex(dictWord);
111
- let match;
112
- while ((match = regex.exec(input)) !== null) {
113
- profaneWords.push(match[0]);
114
- if (severityMap[match[0]] === undefined) {
115
- severityMap[match[0]] = severity;
116
- }
117
- }
118
- }
119
- }
120
- if (profaneWords.length > 0) {
121
- this.debugLog('Detected:', profaneWords);
122
- }
123
- let processedText = text;
124
- if (this.replaceWith && profaneWords.length > 0) {
125
- const uniqueWords = Array.from(new Set(profaneWords));
126
- for (const word of uniqueWords) {
127
- const escaped = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
128
- const replacementRegex = this.wordBoundaries
129
- ? new RegExp(`\\b${escaped}\\b`, 'gi')
130
- : new RegExp(escaped, 'gi');
131
- processedText = processedText.replace(replacementRegex, this.replaceWith);
132
- }
133
- }
134
- return {
135
- containsProfanity: profaneWords.length > 0,
136
- profaneWords: Array.from(new Set(profaneWords)),
137
- processedText: this.replaceWith ? processedText : undefined,
138
- severityMap: this.severityLevels && Object.keys(severityMap).length > 0
139
- ? severityMap
140
- : undefined,
141
- };
142
- }
143
- checkProfanityWithMinSeverity(text, minSeverity = SeverityLevel.Exact) {
144
- const result = this.checkProfanity(text);
145
- const filteredWords = result.severityMap && result.profaneWords.length > 0
146
- ? result.profaneWords.filter((word) => {
147
- var _a;
148
- const severity = (_a = result.severityMap) === null || _a === void 0 ? void 0 : _a[word];
149
- return typeof severity === 'number' && severity >= minSeverity;
150
- })
151
- : [];
152
- return { filteredWords, result };
153
- }
154
- }
155
- export { Filter };
156
- //# sourceMappingURL=Filter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Filter.js","sourceRoot":"","sources":["../../../src/filters/Filter.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAkC,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAgB/E,MAAM,MAAM;IAWV,YAAY,MAAqB;;QAC/B,IAAI,KAAK,GAAa,EAAE,CAAC;QAEzB,IAAI,CAAC,aAAa,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,mCAAI,KAAK,CAAC;QACpD,IAAI,CAAC,oBAAoB,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,oBAAoB,mCAAI,KAAK,CAAC;QAClE,IAAI,CAAC,cAAc,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,mCAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAC3E,IAAI,CAAC,WAAW,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,mCAAI,KAAK,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CACxB,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAI,EAAE,CAC7D,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,mCAAI,KAAK,CAAC;QAClD,IAAI,CAAC,mBAAmB,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,mCAAI,GAAG,CAAC;QAE9D,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,IAAI,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,IAAgB,CAAC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,KAAI,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAW,SAAS,CAAC,CAAC;YACrD,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC/B,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,EAAE,CAAC;YACxB,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAEO,QAAQ,CAAC,GAAG,IAAW;QAC7B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,IAAY;QACtC,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,OAAO,GAA8B;YACzC,GAAG,EAAE,GAAG;YACR,CAAC,EAAE,GAAG;YACN,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,EAAE;SACR,CAAC;QACF,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,QAAQ,CAAC,IAAY;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,MAAM,CAAC,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAEO,qBAAqB,CAAC,IAAY,EAAE,IAAY;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,UAAU,EAAE,CAAC;gBACb,KAAK,EAAE,CAAC;gBACR,IAAI,KAAK,KAAK,cAAc,CAAC,MAAM;oBAAE,MAAM;YAC7C,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC;QACjD,OAAO,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC;IAC3C,CAAC;IAEO,gBAAgB,CACtB,IAAY,EACZ,IAAY;QAEZ,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,OAAO,aAAa,CAAC,KAAK,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,aAAa,CAAC,KAAK,CAAC;QAC/D,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC;YAAE,OAAO,aAAa,CAAC,KAAK,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,KAAK,GAAG,IAAI,CAAC,oBAAoB;YACnC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;YACjC,CAAC,CAAC,KAAK,CAAC;QAEV,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACrC,IACE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,SAAS,EAChD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,IAAI,KAAK,GAAG,IAAI,CAAC,oBAAoB;YACnC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC;QAET,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAE5B,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,WAAW,GAAkC,EAAE,CAAC;QAEtD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC;gBACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC5C,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;wBACxC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,IAAI,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YACtD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBAC5D,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc;oBAC1C,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,OAAO,KAAK,EAAE,IAAI,CAAC;oBACtC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC9B,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,gBAAgB,EAChB,IAAI,CAAC,WAAW,CACjB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,iBAAiB,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;YAC1C,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;YAC/C,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YAC3D,WAAW,EACT,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;gBACxD,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,SAAS;SAChB,CAAC;IACJ,CAAC;IAED,6BAA6B,CAC3B,IAAY,EACZ,cAA6B,aAAa,CAAC,KAAK;QAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,aAAa,GACjB,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YAClD,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;;gBAClC,MAAM,QAAQ,GAAG,MAAA,MAAM,CAAC,WAAW,0CAAG,IAAI,CAAC,CAAC;gBAC5C,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,WAAW,CAAC;YACjE,CAAC,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;QAET,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;CACF;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -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
- };