glin-profanity 2.0.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.
- package/README.md +338 -74
- package/lib/cjs/packages/js/src/core/index.d.ts +4 -0
- package/lib/cjs/packages/js/src/core/index.js +55 -0
- package/lib/cjs/packages/js/src/core/index.js.map +1 -0
- package/lib/cjs/packages/js/src/core/types.d.ts +20 -0
- package/lib/cjs/packages/js/src/core/types.js +3 -0
- package/lib/cjs/packages/js/src/core/types.js.map +1 -0
- package/lib/cjs/{data → packages/js/src/data}/dictionary.d.ts +1 -0
- package/lib/cjs/packages/js/src/data/dictionary.js +54 -0
- package/lib/cjs/packages/js/src/data/dictionary.js.map +1 -0
- package/lib/cjs/{filters → packages/js/src/filters}/Filter.d.ts +13 -14
- package/lib/cjs/packages/js/src/filters/Filter.js +246 -0
- package/lib/cjs/packages/js/src/filters/Filter.js.map +1 -0
- package/lib/cjs/packages/js/src/hooks/useProfanityChecker.d.ts +11 -0
- package/lib/cjs/packages/js/src/hooks/useProfanityChecker.js +42 -0
- package/lib/cjs/packages/js/src/hooks/useProfanityChecker.js.map +1 -0
- package/lib/cjs/packages/js/src/index.d.ts +12 -0
- package/lib/cjs/packages/js/src/index.js +24 -0
- package/lib/cjs/packages/js/src/index.js.map +1 -0
- package/lib/cjs/packages/js/src/nlp/contextAnalyzer.d.ts +35 -0
- package/lib/cjs/packages/js/src/nlp/contextAnalyzer.js +203 -0
- package/lib/cjs/packages/js/src/nlp/contextAnalyzer.js.map +1 -0
- package/lib/cjs/packages/js/src/types/types.d.ts +56 -0
- package/lib/cjs/packages/js/src/types/types.js +14 -0
- package/lib/cjs/packages/js/src/types/types.js.map +1 -0
- package/lib/cjs/shared/dictionaries/spanish.json +72 -0
- package/lib/esm/packages/js/src/core/index.d.ts +4 -0
- package/lib/esm/packages/js/src/core/index.js +47 -0
- package/lib/esm/packages/js/src/core/index.js.map +1 -0
- package/lib/esm/packages/js/src/core/types.d.ts +20 -0
- package/lib/esm/packages/js/src/core/types.js +2 -0
- package/lib/esm/packages/js/src/core/types.js.map +1 -0
- package/lib/esm/{data → packages/js/src/data}/dictionary.d.ts +1 -0
- package/lib/esm/packages/js/src/data/dictionary.js +49 -0
- package/lib/esm/packages/js/src/data/dictionary.js.map +1 -0
- package/lib/esm/{filters → packages/js/src/filters}/Filter.d.ts +13 -14
- package/lib/esm/packages/js/src/filters/Filter.js +240 -0
- package/lib/esm/packages/js/src/filters/Filter.js.map +1 -0
- package/lib/esm/packages/js/src/hooks/useProfanityChecker.d.ts +11 -0
- package/lib/esm/packages/js/src/hooks/useProfanityChecker.js +38 -0
- package/lib/esm/packages/js/src/hooks/useProfanityChecker.js.map +1 -0
- package/lib/esm/packages/js/src/index.d.ts +12 -0
- package/lib/esm/packages/js/src/index.js +15 -0
- package/lib/esm/packages/js/src/index.js.map +1 -0
- package/lib/esm/packages/js/src/nlp/contextAnalyzer.d.ts +35 -0
- package/lib/esm/packages/js/src/nlp/contextAnalyzer.js +199 -0
- package/lib/esm/packages/js/src/nlp/contextAnalyzer.js.map +1 -0
- package/lib/esm/packages/js/src/types/types.d.ts +56 -0
- package/lib/esm/packages/js/src/types/types.js +11 -0
- package/lib/esm/packages/js/src/types/types.js.map +1 -0
- package/lib/esm/shared/dictionaries/spanish.json +72 -0
- package/package.json +26 -3
- package/lib/cjs/data/dictionary.js +0 -52
- package/lib/cjs/data/dictionary.js.map +0 -1
- package/lib/cjs/filters/Filter.js +0 -137
- package/lib/cjs/filters/Filter.js.map +0 -1
- package/lib/cjs/hooks/useProfanityChecker.d.ts +0 -20
- package/lib/cjs/hooks/useProfanityChecker.js +0 -58
- package/lib/cjs/hooks/useProfanityChecker.js.map +0 -1
- package/lib/cjs/index.d.ts +0 -3
- package/lib/cjs/index.js +0 -8
- package/lib/cjs/index.js.map +0 -1
- package/lib/cjs/types/types.d.ts +0 -14
- package/lib/cjs/types/types.js +0 -11
- package/lib/cjs/types/types.js.map +0 -1
- package/lib/esm/data/dictionary.js +0 -47
- package/lib/esm/data/dictionary.js.map +0 -1
- package/lib/esm/filters/Filter.js +0 -131
- package/lib/esm/filters/Filter.js.map +0 -1
- package/lib/esm/hooks/useProfanityChecker.d.ts +0 -20
- package/lib/esm/hooks/useProfanityChecker.js +0 -51
- package/lib/esm/hooks/useProfanityChecker.js.map +0 -1
- package/lib/esm/index.d.ts +0 -3
- package/lib/esm/index.js +0 -3
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/types/types.d.ts +0 -14
- package/lib/esm/types/types.js +0 -8
- package/lib/esm/types/types.js.map +0 -1
- /package/lib/cjs/{data → shared/dictionaries}/Norwegian.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/arabic.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/chinese.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/czech.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/danish.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/english.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/esperanto.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/finnish.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/french.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/german.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/globalWhitelist.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/hindi.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/hungarian.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/italian.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/japanese.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/korean.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/persian.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/polish.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/portuguese.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/russian.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/swedish.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/thai.json +0 -0
- /package/lib/cjs/{data → shared/dictionaries}/turkish.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/Norwegian.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/arabic.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/chinese.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/czech.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/danish.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/english.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/esperanto.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/finnish.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/french.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/german.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/globalWhitelist.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/hindi.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/hungarian.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/italian.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/japanese.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/korean.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/persian.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/polish.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/portuguese.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/russian.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/swedish.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/thai.json +0 -0
- /package/lib/esm/{data → shared/dictionaries}/turkish.json +0 -0
|
@@ -1,137 +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
|
-
class Filter {
|
|
9
|
-
constructor(config) {
|
|
10
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
11
|
-
let words = [];
|
|
12
|
-
this.caseSensitive = (_a = config === null || config === void 0 ? void 0 : config.caseSensitive) !== null && _a !== void 0 ? _a : false;
|
|
13
|
-
this.allowObfuscatedMatch = (_b = config === null || config === void 0 ? void 0 : config.allowObfuscatedMatch) !== null && _b !== void 0 ? _b : false;
|
|
14
|
-
this.wordBoundaries = (_c = config === null || config === void 0 ? void 0 : config.wordBoundaries) !== null && _c !== void 0 ? _c : !this.allowObfuscatedMatch; // Turn off word boundaries if obfuscation enabled
|
|
15
|
-
this.replaceWith = config === null || config === void 0 ? void 0 : config.replaceWith;
|
|
16
|
-
this.severityLevels = (_d = config === null || config === void 0 ? void 0 : config.severityLevels) !== null && _d !== void 0 ? _d : false;
|
|
17
|
-
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())) || []);
|
|
18
|
-
this.logProfanity = (_f = config === null || config === void 0 ? void 0 : config.logProfanity) !== null && _f !== void 0 ? _f : false;
|
|
19
|
-
this.fuzzyToleranceLevel = (_g = config === null || config === void 0 ? void 0 : config.fuzzyToleranceLevel) !== null && _g !== void 0 ? _g : 0.8;
|
|
20
|
-
if (config === null || config === void 0 ? void 0 : config.allLanguages) {
|
|
21
|
-
for (const lang in dictionary_1.default) {
|
|
22
|
-
if (dictionary_1.default.hasOwnProperty(lang)) {
|
|
23
|
-
words = [...words, ...dictionary_1.default[lang]];
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
const languages = (config === null || config === void 0 ? void 0 : config.languages) || ['english'];
|
|
29
|
-
const languagesChecks = new Set(languages);
|
|
30
|
-
if (languagesChecks.size !== 0) {
|
|
31
|
-
languagesChecks.forEach((lang) => {
|
|
32
|
-
words = [...words, ...dictionary_1.default[lang]];
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (config === null || config === void 0 ? void 0 : config.customWords) {
|
|
37
|
-
words = [...words, ...config.customWords];
|
|
38
|
-
}
|
|
39
|
-
this.words = new Map(words.map((word) => [word.toLowerCase(), 1]));
|
|
40
|
-
}
|
|
41
|
-
normalizeObfuscated(text) {
|
|
42
|
-
let normalized = text.replace(/([a-zA-Z])\1{1,}/g, '$1$1'); // allow max 2 consecutive
|
|
43
|
-
const charMap = {
|
|
44
|
-
'@': 'a',
|
|
45
|
-
$: 's',
|
|
46
|
-
'!': 'i',
|
|
47
|
-
'1': 'i',
|
|
48
|
-
'*': '',
|
|
49
|
-
};
|
|
50
|
-
normalized = normalized.replace(/[@$!1*]/g, (m) => charMap[m] || m);
|
|
51
|
-
return normalized;
|
|
52
|
-
}
|
|
53
|
-
getRegex(word) {
|
|
54
|
-
const flags = this.caseSensitive ? 'g' : 'gi';
|
|
55
|
-
const escapedWord = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
56
|
-
const boundary = this.wordBoundaries ? '\\b' : '';
|
|
57
|
-
return new RegExp(`${boundary}${escapedWord}${boundary}`, flags);
|
|
58
|
-
}
|
|
59
|
-
isFuzzyToleranceMatch(word, text) {
|
|
60
|
-
const simplifiedText = text.toLowerCase().replace(/[^a-z]/g, '');
|
|
61
|
-
const simplifiedWord = word.toLowerCase();
|
|
62
|
-
let matchCount = 0;
|
|
63
|
-
let index = 0;
|
|
64
|
-
for (let i = 0; i < simplifiedText.length; i++) {
|
|
65
|
-
if (simplifiedText[i] === simplifiedWord[index]) {
|
|
66
|
-
matchCount++;
|
|
67
|
-
index++;
|
|
68
|
-
if (index === simplifiedWord.length)
|
|
69
|
-
break;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
const score = matchCount / simplifiedWord.length;
|
|
73
|
-
return score >= this.fuzzyToleranceLevel;
|
|
74
|
-
}
|
|
75
|
-
evaluateSeverity(word, text) {
|
|
76
|
-
if (this.wordBoundaries) {
|
|
77
|
-
return this.getRegex(word).test(text) ? 1 : undefined;
|
|
78
|
-
}
|
|
79
|
-
if (this.getRegex(word).test(text))
|
|
80
|
-
return 1;
|
|
81
|
-
if (this.isFuzzyToleranceMatch(word, text))
|
|
82
|
-
return 2;
|
|
83
|
-
return undefined;
|
|
84
|
-
}
|
|
85
|
-
isProfane(value) {
|
|
86
|
-
let input = value;
|
|
87
|
-
if (this.allowObfuscatedMatch) {
|
|
88
|
-
input = this.normalizeObfuscated(value);
|
|
89
|
-
}
|
|
90
|
-
for (const word of this.words.keys()) {
|
|
91
|
-
if (!this.ignoreWords.has(word.toLowerCase()) &&
|
|
92
|
-
this.evaluateSeverity(word, input) !== undefined) {
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
checkProfanity(text) {
|
|
99
|
-
let input = text;
|
|
100
|
-
if (this.allowObfuscatedMatch) {
|
|
101
|
-
input = this.normalizeObfuscated(text);
|
|
102
|
-
}
|
|
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
|
-
severityMap[match[0]] = severity;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
let processedText = text;
|
|
119
|
-
if (this.replaceWith && profaneWords.length > 0) {
|
|
120
|
-
const uniqueWords = Array.from(new Set(profaneWords));
|
|
121
|
-
for (const word of uniqueWords) {
|
|
122
|
-
const escaped = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
123
|
-
processedText = processedText.replace(new RegExp(escaped, 'gi'), this.replaceWith);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return {
|
|
127
|
-
containsProfanity: profaneWords.length > 0,
|
|
128
|
-
profaneWords: Array.from(new Set(profaneWords)),
|
|
129
|
-
processedText: this.replaceWith ? processedText : undefined,
|
|
130
|
-
severityMap: this.severityLevels && Object.keys(severityMap).length > 0
|
|
131
|
-
? severityMap
|
|
132
|
-
: undefined,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
exports.Filter = Filter;
|
|
137
|
-
//# 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,20 +0,0 @@
|
|
|
1
|
-
import { CheckProfanityResult, Language } from '../types/types';
|
|
2
|
-
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
|
-
customActions?: (result: CheckProfanityResult) => void;
|
|
13
|
-
}
|
|
14
|
-
export declare const useProfanityChecker: (config?: ProfanityCheckerConfig) => {
|
|
15
|
-
result: CheckProfanityResult;
|
|
16
|
-
checkText: (text: string) => void;
|
|
17
|
-
checkTextAsync: (text: string) => Promise<CheckProfanityResult>;
|
|
18
|
-
reset: () => void;
|
|
19
|
-
};
|
|
20
|
-
export {};
|
|
@@ -1,58 +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
|
-
const [result, setResult] = (0, react_1.useState)(null);
|
|
21
|
-
const filterConfig = (0, react_1.useMemo)(() => {
|
|
22
|
-
var _a;
|
|
23
|
-
const effectiveConfig = Object.assign(Object.assign({}, 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 });
|
|
24
|
-
// Optional - warn developer
|
|
25
|
-
if (effectiveConfig.allowObfuscatedMatch &&
|
|
26
|
-
effectiveConfig.wordBoundaries) {
|
|
27
|
-
console.warn('[Glin-Profanity] Obfuscated match enabled → wordBoundaries will be ignored internally.');
|
|
28
|
-
}
|
|
29
|
-
return effectiveConfig;
|
|
30
|
-
}, [config]);
|
|
31
|
-
const filter = (0, react_1.useMemo)(() => new Filter_1.Filter(filterConfig), [filterConfig]);
|
|
32
|
-
const checkText = (text) => {
|
|
33
|
-
const checkResult = filter.checkProfanity(text);
|
|
34
|
-
setResult(checkResult);
|
|
35
|
-
if (config === null || config === void 0 ? void 0 : config.customActions) {
|
|
36
|
-
config.customActions(checkResult);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
const checkTextAsync = (text) => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
-
return new Promise((resolve) => {
|
|
41
|
-
const checkResult = filter.checkProfanity(text);
|
|
42
|
-
setResult(checkResult);
|
|
43
|
-
if (config === null || config === void 0 ? void 0 : config.customActions) {
|
|
44
|
-
config.customActions(checkResult);
|
|
45
|
-
}
|
|
46
|
-
resolve(checkResult);
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
const reset = () => setResult(null);
|
|
50
|
-
return {
|
|
51
|
-
result,
|
|
52
|
-
checkText,
|
|
53
|
-
checkTextAsync,
|
|
54
|
-
reset,
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
exports.useProfanityChecker = useProfanityChecker;
|
|
58
|
-
//# sourceMappingURL=useProfanityChecker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useProfanityChecker.js","sourceRoot":"","sources":["../../../src/hooks/useProfanityChecker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAA0C;AAC1C,8CAA2C;AAE3C,wFAA+D;AAexD,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,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;;QAChC,MAAM,eAAe,mCAChB,MAAM,KACT,WAAW,EAAE,8BAAmB,CAAC,SAAS,EAC1C,mBAAmB,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,mCAAI,GAAG,GACxD,CAAC;QAEF,4BAA4B;QAC5B,IACE,eAAe,CAAC,oBAAoB;YACpC,eAAe,CAAC,cAAc,EAC9B,CAAC;YACD,OAAO,CAAC,IAAI,CACV,wFAAwF,CACzF,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,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;QAChD,SAAS,CAAC,WAAW,CAAC,CAAC;QACvB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,EAAE,CAAC;YAC1B,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAO,IAAY,EAAE,EAAE;QAC5C,OAAO,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,EAAE;YACnD,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAChD,SAAS,CAAC,WAAW,CAAC,CAAC;YACvB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,EAAE,CAAC;gBAC1B,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAA,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO;QACL,MAAM;QACN,SAAS;QACT,cAAc;QACd,KAAK;KACN,CAAC;AACJ,CAAC,CAAC;AApDW,QAAA,mBAAmB,uBAoD9B"}
|
package/lib/cjs/index.d.ts
DELETED
package/lib/cjs/index.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
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
|
-
//# sourceMappingURL=index.js.map
|
package/lib/cjs/index.js.map
DELETED
|
@@ -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"}
|
package/lib/cjs/types/types.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export declare enum SeverityLevel {
|
|
2
|
-
Exact = 1,
|
|
3
|
-
Fuzzy = 2,
|
|
4
|
-
Merged = 3
|
|
5
|
-
}
|
|
6
|
-
export interface CheckProfanityResult {
|
|
7
|
-
containsProfanity: boolean;
|
|
8
|
-
profaneWords: string[];
|
|
9
|
-
processedText?: string;
|
|
10
|
-
severityMap?: {
|
|
11
|
-
[word: string]: SeverityLevel;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
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';
|
package/lib/cjs/types/types.js
DELETED
|
@@ -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,131 +0,0 @@
|
|
|
1
|
-
import dictionary from '../data/dictionary';
|
|
2
|
-
class Filter {
|
|
3
|
-
constructor(config) {
|
|
4
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
5
|
-
let words = [];
|
|
6
|
-
this.caseSensitive = (_a = config === null || config === void 0 ? void 0 : config.caseSensitive) !== null && _a !== void 0 ? _a : false;
|
|
7
|
-
this.allowObfuscatedMatch = (_b = config === null || config === void 0 ? void 0 : config.allowObfuscatedMatch) !== null && _b !== void 0 ? _b : false;
|
|
8
|
-
this.wordBoundaries = (_c = config === null || config === void 0 ? void 0 : config.wordBoundaries) !== null && _c !== void 0 ? _c : !this.allowObfuscatedMatch; // Turn off word boundaries if obfuscation enabled
|
|
9
|
-
this.replaceWith = config === null || config === void 0 ? void 0 : config.replaceWith;
|
|
10
|
-
this.severityLevels = (_d = config === null || config === void 0 ? void 0 : config.severityLevels) !== null && _d !== void 0 ? _d : false;
|
|
11
|
-
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())) || []);
|
|
12
|
-
this.logProfanity = (_f = config === null || config === void 0 ? void 0 : config.logProfanity) !== null && _f !== void 0 ? _f : false;
|
|
13
|
-
this.fuzzyToleranceLevel = (_g = config === null || config === void 0 ? void 0 : config.fuzzyToleranceLevel) !== null && _g !== void 0 ? _g : 0.8;
|
|
14
|
-
if (config === null || config === void 0 ? void 0 : config.allLanguages) {
|
|
15
|
-
for (const lang in dictionary) {
|
|
16
|
-
if (dictionary.hasOwnProperty(lang)) {
|
|
17
|
-
words = [...words, ...dictionary[lang]];
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
const languages = (config === null || config === void 0 ? void 0 : config.languages) || ['english'];
|
|
23
|
-
const languagesChecks = new Set(languages);
|
|
24
|
-
if (languagesChecks.size !== 0) {
|
|
25
|
-
languagesChecks.forEach((lang) => {
|
|
26
|
-
words = [...words, ...dictionary[lang]];
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
if (config === null || config === void 0 ? void 0 : config.customWords) {
|
|
31
|
-
words = [...words, ...config.customWords];
|
|
32
|
-
}
|
|
33
|
-
this.words = new Map(words.map((word) => [word.toLowerCase(), 1]));
|
|
34
|
-
}
|
|
35
|
-
normalizeObfuscated(text) {
|
|
36
|
-
let normalized = text.replace(/([a-zA-Z])\1{1,}/g, '$1$1'); // allow max 2 consecutive
|
|
37
|
-
const charMap = {
|
|
38
|
-
'@': 'a',
|
|
39
|
-
$: 's',
|
|
40
|
-
'!': 'i',
|
|
41
|
-
'1': 'i',
|
|
42
|
-
'*': '',
|
|
43
|
-
};
|
|
44
|
-
normalized = normalized.replace(/[@$!1*]/g, (m) => charMap[m] || m);
|
|
45
|
-
return normalized;
|
|
46
|
-
}
|
|
47
|
-
getRegex(word) {
|
|
48
|
-
const flags = this.caseSensitive ? 'g' : 'gi';
|
|
49
|
-
const escapedWord = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
50
|
-
const boundary = this.wordBoundaries ? '\\b' : '';
|
|
51
|
-
return new RegExp(`${boundary}${escapedWord}${boundary}`, flags);
|
|
52
|
-
}
|
|
53
|
-
isFuzzyToleranceMatch(word, text) {
|
|
54
|
-
const simplifiedText = text.toLowerCase().replace(/[^a-z]/g, '');
|
|
55
|
-
const simplifiedWord = word.toLowerCase();
|
|
56
|
-
let matchCount = 0;
|
|
57
|
-
let index = 0;
|
|
58
|
-
for (let i = 0; i < simplifiedText.length; i++) {
|
|
59
|
-
if (simplifiedText[i] === simplifiedWord[index]) {
|
|
60
|
-
matchCount++;
|
|
61
|
-
index++;
|
|
62
|
-
if (index === simplifiedWord.length)
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
const score = matchCount / simplifiedWord.length;
|
|
67
|
-
return score >= this.fuzzyToleranceLevel;
|
|
68
|
-
}
|
|
69
|
-
evaluateSeverity(word, text) {
|
|
70
|
-
if (this.wordBoundaries) {
|
|
71
|
-
return this.getRegex(word).test(text) ? 1 : undefined;
|
|
72
|
-
}
|
|
73
|
-
if (this.getRegex(word).test(text))
|
|
74
|
-
return 1;
|
|
75
|
-
if (this.isFuzzyToleranceMatch(word, text))
|
|
76
|
-
return 2;
|
|
77
|
-
return undefined;
|
|
78
|
-
}
|
|
79
|
-
isProfane(value) {
|
|
80
|
-
let input = value;
|
|
81
|
-
if (this.allowObfuscatedMatch) {
|
|
82
|
-
input = this.normalizeObfuscated(value);
|
|
83
|
-
}
|
|
84
|
-
for (const word of this.words.keys()) {
|
|
85
|
-
if (!this.ignoreWords.has(word.toLowerCase()) &&
|
|
86
|
-
this.evaluateSeverity(word, input) !== undefined) {
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
checkProfanity(text) {
|
|
93
|
-
let input = text;
|
|
94
|
-
if (this.allowObfuscatedMatch) {
|
|
95
|
-
input = this.normalizeObfuscated(text);
|
|
96
|
-
}
|
|
97
|
-
const profaneWords = [];
|
|
98
|
-
const severityMap = {};
|
|
99
|
-
for (const dictWord of this.words.keys()) {
|
|
100
|
-
if (this.ignoreWords.has(dictWord.toLowerCase()))
|
|
101
|
-
continue;
|
|
102
|
-
const severity = this.evaluateSeverity(dictWord, input);
|
|
103
|
-
if (severity !== undefined) {
|
|
104
|
-
const regex = this.getRegex(dictWord);
|
|
105
|
-
let match;
|
|
106
|
-
while ((match = regex.exec(input)) !== null) {
|
|
107
|
-
profaneWords.push(match[0]);
|
|
108
|
-
severityMap[match[0]] = severity;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
let processedText = text;
|
|
113
|
-
if (this.replaceWith && profaneWords.length > 0) {
|
|
114
|
-
const uniqueWords = Array.from(new Set(profaneWords));
|
|
115
|
-
for (const word of uniqueWords) {
|
|
116
|
-
const escaped = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
117
|
-
processedText = processedText.replace(new RegExp(escaped, 'gi'), this.replaceWith);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
containsProfanity: profaneWords.length > 0,
|
|
122
|
-
profaneWords: Array.from(new Set(profaneWords)),
|
|
123
|
-
processedText: this.replaceWith ? processedText : undefined,
|
|
124
|
-
severityMap: this.severityLevels && Object.keys(severityMap).length > 0
|
|
125
|
-
? severityMap
|
|
126
|
-
: undefined,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
export { Filter };
|
|
131
|
-
//# 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;AAiB5C,MAAM,MAAM;IAWV,YAAY,MAAqB;;QAC/B,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,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,CAAC,kDAAkD;QAC9H,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,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC/B,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC/B,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACL,CAAC;QACH,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,mBAAmB,CAAC,IAAY;QACtC,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC,0BAA0B;QACtF,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,CAAC,IAAY,EAAE,IAAY;QACjD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QACrD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,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,cAAc,CAAC,IAAY;QACzB,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,WAAW,GAA+B,EAAE,CAAC;QAEnD,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,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,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,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EACzB,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;CACF;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { CheckProfanityResult, Language } from '../types/types';
|
|
2
|
-
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
|
-
customActions?: (result: CheckProfanityResult) => void;
|
|
13
|
-
}
|
|
14
|
-
export declare const useProfanityChecker: (config?: ProfanityCheckerConfig) => {
|
|
15
|
-
result: CheckProfanityResult;
|
|
16
|
-
checkText: (text: string) => void;
|
|
17
|
-
checkTextAsync: (text: string) => Promise<CheckProfanityResult>;
|
|
18
|
-
reset: () => void;
|
|
19
|
-
};
|
|
20
|
-
export {};
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import { useMemo, useState } from 'react';
|
|
11
|
-
import { Filter } from '../filters/Filter';
|
|
12
|
-
import globalWhitelistData from '../data/globalWhitelist.json';
|
|
13
|
-
export const useProfanityChecker = (config) => {
|
|
14
|
-
const [result, setResult] = useState(null);
|
|
15
|
-
const filterConfig = useMemo(() => {
|
|
16
|
-
var _a;
|
|
17
|
-
const effectiveConfig = Object.assign(Object.assign({}, config), { ignoreWords: globalWhitelistData.whitelist, fuzzyToleranceLevel: (_a = config === null || config === void 0 ? void 0 : config.fuzzyToleranceLevel) !== null && _a !== void 0 ? _a : 0.8 });
|
|
18
|
-
// Optional - warn developer
|
|
19
|
-
if (effectiveConfig.allowObfuscatedMatch &&
|
|
20
|
-
effectiveConfig.wordBoundaries) {
|
|
21
|
-
console.warn('[Glin-Profanity] Obfuscated match enabled → wordBoundaries will be ignored internally.');
|
|
22
|
-
}
|
|
23
|
-
return effectiveConfig;
|
|
24
|
-
}, [config]);
|
|
25
|
-
const filter = useMemo(() => new Filter(filterConfig), [filterConfig]);
|
|
26
|
-
const checkText = (text) => {
|
|
27
|
-
const checkResult = filter.checkProfanity(text);
|
|
28
|
-
setResult(checkResult);
|
|
29
|
-
if (config === null || config === void 0 ? void 0 : config.customActions) {
|
|
30
|
-
config.customActions(checkResult);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
const checkTextAsync = (text) => __awaiter(void 0, void 0, void 0, function* () {
|
|
34
|
-
return new Promise((resolve) => {
|
|
35
|
-
const checkResult = filter.checkProfanity(text);
|
|
36
|
-
setResult(checkResult);
|
|
37
|
-
if (config === null || config === void 0 ? void 0 : config.customActions) {
|
|
38
|
-
config.customActions(checkResult);
|
|
39
|
-
}
|
|
40
|
-
resolve(checkResult);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
const reset = () => setResult(null);
|
|
44
|
-
return {
|
|
45
|
-
result,
|
|
46
|
-
checkText,
|
|
47
|
-
checkTextAsync,
|
|
48
|
-
reset,
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
//# sourceMappingURL=useProfanityChecker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useProfanityChecker.js","sourceRoot":"","sources":["../../../src/hooks/useProfanityChecker.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAe/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAA+B,EAAE,EAAE;IACrE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA8B,IAAI,CAAC,CAAC;IAExE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;;QAChC,MAAM,eAAe,mCAChB,MAAM,KACT,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAC1C,mBAAmB,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,mCAAI,GAAG,GACxD,CAAC;QAEF,4BAA4B;QAC5B,IACE,eAAe,CAAC,oBAAoB;YACpC,eAAe,CAAC,cAAc,EAC9B,CAAC;YACD,OAAO,CAAC,IAAI,CACV,wFAAwF,CACzF,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,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;QAChD,SAAS,CAAC,WAAW,CAAC,CAAC;QACvB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,EAAE,CAAC;YAC1B,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAO,IAAY,EAAE,EAAE;QAC5C,OAAO,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,EAAE;YACnD,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAChD,SAAS,CAAC,WAAW,CAAC,CAAC;YACvB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,EAAE,CAAC;gBAC1B,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAA,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO;QACL,MAAM;QACN,SAAS;QACT,cAAc;QACd,KAAK;KACN,CAAC;AACJ,CAAC,CAAC"}
|
package/lib/esm/index.d.ts
DELETED
package/lib/esm/index.js
DELETED
package/lib/esm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC"}
|
package/lib/esm/types/types.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export declare enum SeverityLevel {
|
|
2
|
-
Exact = 1,
|
|
3
|
-
Fuzzy = 2,
|
|
4
|
-
Merged = 3
|
|
5
|
-
}
|
|
6
|
-
export interface CheckProfanityResult {
|
|
7
|
-
containsProfanity: boolean;
|
|
8
|
-
profaneWords: string[];
|
|
9
|
-
processedText?: string;
|
|
10
|
-
severityMap?: {
|
|
11
|
-
[word: string]: SeverityLevel;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
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';
|
package/lib/esm/types/types.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// src/types/types.ts
|
|
2
|
-
export var SeverityLevel;
|
|
3
|
-
(function (SeverityLevel) {
|
|
4
|
-
SeverityLevel[SeverityLevel["Exact"] = 1] = "Exact";
|
|
5
|
-
SeverityLevel[SeverityLevel["Fuzzy"] = 2] = "Fuzzy";
|
|
6
|
-
SeverityLevel[SeverityLevel["Merged"] = 3] = "Merged";
|
|
7
|
-
})(SeverityLevel || (SeverityLevel = {}));
|
|
8
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/types/types.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,mDAAS,CAAA;IACT,mDAAS,CAAA;IACT,qDAAU,CAAA;AACZ,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|