{"_id":"@binhtommy/text-profanity","name":"@binhtommy/text-profanity","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@binhtommy/text-profanity","version":"1.0.0","type":"module","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --clean","dev":"tsup src/index.ts --format cjs,esm --watch --dts","lint":"tsc","test":"NODE_OPTIONS=--experimental-vm-modules jest"},"devDependencies":{"@types/jest":"^30.0.0","jest":"^30.3.0","ts-jest":"^29.4.9","tsup":"^8.5.1","typescript":"^6.0.3"},"publishConfig":{"access":"public"},"_id":"@binhtommy/text-profanity@1.0.0","description":"Một thư viện gọn nhẹ và cực kỳ mạnh mẽ dùng để kiểm tra, lọc và che (mask) các từ khóa nhạy cảm, từ chửi thề (Profanity/Bad words) trong văn bản.","_nodeVersion":"22.22.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-dd71WWtGxUa6+KH+oYCdwmK/YPd+xPlk5mr2rUX9dU9iMsNCw5OChKSyLE6NSA5HKhKmxKm0WmSgtBI3FpTOtw==","shasum":"1ce880a8445cdacff7b8924fb581020a76adc432","tarball":"https://registry.npmjs.org/@binhtommy/text-profanity/-/text-profanity-1.0.0.tgz","fileCount":6,"unpackedSize":25551,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC5swzVHNxixanrvlVnM7uhE+rSojE2/vD4uUxgJSOfVgIgf+uHMhaazpJ0lN10lAWfYkogLaxFDK6AYJJBr1kl0Pg="}]},"_npmUser":{"name":"binhtommy","email":"binhtommy170904@gmail.com"},"directories":{},"maintainers":[{"name":"binhtommy","email":"binhtommy170904@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/text-profanity_1.0.0_1776742302155_0.9296722182971136"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-21T03:31:42.020Z","1.0.0":"2026-04-21T03:31:42.308Z","modified":"2026-04-21T03:31:42.592Z"},"maintainers":[{"name":"binhtommy","email":"binhtommy170904@gmail.com"}],"description":"Một thư viện gọn nhẹ và cực kỳ mạnh mẽ dùng để kiểm tra, lọc và che (mask) các từ khóa nhạy cảm, từ chửi thề (Profanity/Bad words) trong văn bản.","readme":"# Text Profanity (text-validation)\n\nMột thư viện gọn nhẹ và cực kỳ mạnh mẽ dùng để kiểm tra, lọc và che (mask) các từ khóa nhạy cảm, từ chửi thề (Profanity/Bad words) trong văn bản. \n\nĐặc biệt, hệ thống được thiết kế với **Hệ thống Chống lách luật (Anti-Bypass)** toàn diện nhất, có thể chặn đứng gần như 100% các thủ thuật biến tấu qua mặt chữ của người dùng trên nhiều ngôn ngữ (Vietnamese, English, Japanese).\n\n## 🌟 Tính năng Nổi bật\n\nThư viện không chỉ đơn thuần khớp chuỗi (string matching) mà còn tích hợp bộ lọc AI-like để bóc tách các thủ thuật \"teencode\" và lách luật của người dùng:\n\n- **Bỏ qua Ký tự Gây nhiễu (Noise & Punctuation):** Dấu chấm, phẩy, khoảng trắng, hoặc ký tự đặc biệt chèn giữa từ đều bị vô hiệu hoá. Ví dụ: `v.c.l`, `đ_m`, `c@o` -> Bị chặn.\n- **Rút gọn Ký tự Lặp lại (Repeating Chars):** Tự động phát hiện và thu gọn các chữ cái cố tình viết lặp dài. Ví dụ: `nguuuuuu`, `đmmmm` -> Khớp với `ngu`, `đm`.\n- **Dịch Leetspeak / Teencode:** Convert các số hoặc ký tự biến tấu về mặt chữ gốc. (vd: `3` -> `e`, `@`/`4` -> `a`, `1`/`!` -> `i`, `0` -> `o`). Ví dụ: `ch3t`, `d!t` -> Bị chặn.\n- **Bắt không dấu tự động (Unaccented Matching):** Bất cứ từ tiếng Việt nào đưa vào từ điển đều tự động sinh ra một dạng \"không dấu\". (vd: `ngu vai`, `d m` sẽ match với `ngu vãi`, `đ m`).\n- **Chuẩn hóa Zalgo / Extended Latin:** Các ký tự vay mượn trông nguy hiểm như `nğü`, `vãį` sẽ bị lột trần về `ngu`, `vai`.\n- **Xử lý siêu cấp Tiếng Nhật (Japanese Armor):** \n  - Gộp Katakana và Hiragana thành một (E.g: `シネ` -> `しね`).\n  - Gộp các dấu âm đục (Dakuon) bị tách rời hoặc chữ Half-width (E.g: `ハ゛カ`, `ﾊﾞｶ` -> `ばか`).\n  - Lọc dấu kéo dài âm (Long Vowels) cực chuẩn (E.g: `シーーーネ` -> `しね`).\n\n## 📦 Cài đặt\n\n*(Đang cập nhật NPM)*\nHiện tại, build và import thông qua thư mục dist/src:\n\n```bash\nnpm install\nnpm run build\n```\n\n## 🚀 Hướng dẫn Sử dụng\n\nKhởi tạo một `WordFilter` và chỉ định các bộ ngôn ngữ bạn muốn sử dụng (hệ thống có sẵn data cho `vi`, `en`, `ja`).\n\n```typescript\nimport { WordFilter } from \"text-profanity\";\n\n// Khởi tạo filter (mặc định lấy ngôn ngữ \"vi\" nếu không truyền param)\nconst filter = new WordFilter({ \n    languages: [\"vi\", \"en\", \"ja\"], \n    placeholder: \"*\" // Ký tự dùng để mask (mặc định là *)\n});\n\n// 1. Kiểm tra văn bản có chứa từ bậy hay không\nconsole.log(filter.hasBadWord(\"v.c.l\")); // Trả về: true\nconsole.log(filter.hasBadWord(\"Hôm nay thời tiết đẹp quá\")); // Trả về: false\n\n// 2. Che (Mask) từ bậy trong văn bản (giữ nguyên độ dài và định dạng)\nconst safeText = filter.mask(\"đ!!!t... mmmẹẹẹẹẹ mày là thằng chhhhóoooo\"); \nconsole.log(safeText); \n// Kết quả: \"*****... mmmẹẹẹẹẹ mày là thằng *********\"\n\n// 3. Nạp thêm từ khóa nhạy cảm tùy chỉnh của hệ thống bạn\nfilter.addBadWords([\"trường học lừa đảo\", \"đa cấp\", \"scam\"]);\nconsole.log(filter.mask(\"Cái trung tâm này là scam, trường học lừa đảo!\"));\n// Kết quả: \"Cái trung tâm này là ****, ******************!\"\n```\n\n## 🧠 Sức mạnh Chống Cố Tình Lách Luật\n\nXem các ví dụ dới đây để thấy thư viện có thể trị các thủ thuật phức tạp như thế nào:\n\n```typescript\n// 1. Chia tách / Ngắt dòng (Splitting)\nfilter.hasBadWord(\"n\\ng\\nu\"); // true\n\n// 2. Teencode / Ký tự thay thế\nfilter.hasBadWord(\"ngu l0n\"); // true (0 -> o)\n\n// 3. Tiếng Nhật đổi bảng chữ cái và ký hiệu\nfilter.hasBadWord(\"ハ゛カ\"); // true (Match với \"ばか\" - Đồ ngốc)\n\n// 4. Mã hoá chữ cái Latin\nfilter.hasBadWord(\"nğü\"); // true (Match với \"ngu\")\n```\n\n## 📝 Phát triển (Development)\n\nThư viện sử dụng TypeScript và Jest chuẩn cho Testing.\n\n```bash\n# Compiler / Watch script\nnpm run dev\n\n# Chạy test suite (đã cover 100% các bypass scenarios)\nnpm run test\n```\n","readmeFilename":"README.md","_rev":"1-baa3f447217b4c91249db05cce5a5144"}