@fevo-tech/obscenity 0.0.2

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 ADDED
@@ -0,0 +1,159 @@
1
+ # @fevo/obscenity
2
+
3
+ A robust profanity and obscenity filtering library for Node.js, built on top of [obscenity](https://github.com/jo3-l/obscenity) with extended dictionaries and HTML support.
4
+
5
+ ## Features
6
+
7
+ - 🔍 **Detect profanity** in text strings
8
+ - 🔒 **Censor bad words** with customizable strategies
9
+ - 🌐 **HTML-aware censoring** that preserves HTML tags
10
+ - 📚 **Extended dictionary** including racial slurs, LGBTQ+ slurs, and other offensive terms
11
+ - ⚡ **Fast and efficient** using RegExp-based matching
12
+ - 🎯 **TypeScript support** with full type definitions
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install @fevo/obscenity
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ### Basic Text Censoring
23
+
24
+ ```typescript
25
+ import { censorBadWords, hasContainsBadWords } from "@fevo/obscenity";
26
+
27
+ // Censor bad words in a string
28
+ const text = "This is a test with some bad words";
29
+ const censored = censorBadWords(text);
30
+ console.log(censored); // "This is a test with some b** words"
31
+
32
+ // Check if text contains bad words
33
+ const hasProfanity = hasContainsBadWords(text);
34
+ console.log(hasProfanity); // true or false
35
+ ```
36
+
37
+ ### HTML Censoring
38
+
39
+ The library can censor bad words in HTML content while preserving all HTML tags and structure:
40
+
41
+ ```typescript
42
+ import { censorHtmlPreservingTags } from "@fevo/obscenity";
43
+
44
+ const html = "<p>This has some <strong>bad words</strong> in it</p>";
45
+ const censoredHtml = censorHtmlPreservingTags(html);
46
+ console.log(censoredHtml);
47
+ // Output: '<p>This has some <strong>b** words</strong> in it</p>'
48
+ ```
49
+
50
+ ## API Reference
51
+
52
+ ### `censorBadWords(input: string): string`
53
+
54
+ Censors profanity in the input string by replacing offensive words with asterisks, keeping the first character.
55
+
56
+ **Parameters:**
57
+
58
+ - `input` - The text string to censor
59
+
60
+ **Returns:**
61
+
62
+ - A string with profanity censored
63
+
64
+ **Example:**
65
+
66
+ ```typescript
67
+ censorBadWords("bad word here"); // "b** word here"
68
+ ```
69
+
70
+ ### `hasContainsBadWords(input: string): boolean`
71
+
72
+ Checks whether the input string contains any profanity.
73
+
74
+ **Parameters:**
75
+
76
+ - `input` - The text string to check
77
+
78
+ **Returns:**
79
+
80
+ - `true` if profanity is found, `false` otherwise
81
+
82
+ **Example:**
83
+
84
+ ```typescript
85
+ hasContainsBadWords("clean text"); // false
86
+ hasContainsBadWords("profane text"); // true
87
+ ```
88
+
89
+ ### `censorHtmlPreservingTags(htmlStr: string): string`
90
+
91
+ Censors profanity in HTML content while preserving all HTML tags, attributes, and structure.
92
+
93
+ **Parameters:**
94
+
95
+ - `htmlStr` - The HTML string to censor
96
+
97
+ **Returns:**
98
+
99
+ - A string with profanity censored but HTML structure intact
100
+
101
+ **Example:**
102
+
103
+ ```typescript
104
+ censorHtmlPreservingTags("<div>bad word</div>");
105
+ // '<div>b** word</div>'
106
+ ```
107
+
108
+ ## How It Works
109
+
110
+ The library uses:
111
+
112
+ - **obscenity** library for core matching and censoring functionality
113
+ - Custom extended dictionary with various categories of offensive terms
114
+ - **htmlparser2** for HTML parsing and tag preservation
115
+ - RegExp-based matching with transformers for variant detection
116
+ - Keep-start censoring strategy that preserves the first character and replaces the rest with asterisks
117
+
118
+ ## Dictionary Coverage
119
+
120
+ The extended dictionary includes:
121
+
122
+ - Racial slurs (various ethnicities)
123
+ - LGBTQ+ slurs
124
+ - Gender-based slurs
125
+ - Ableist terms
126
+ - Sexual content
127
+ - Religious slurs
128
+ - And many other offensive terms with common variations
129
+
130
+ ## Development
131
+
132
+ ### Build
133
+
134
+ ```bash
135
+ npm run build
136
+ ```
137
+
138
+ ### Clean
139
+
140
+ ```bash
141
+ npm run clean
142
+ ```
143
+
144
+ ## Dependencies
145
+
146
+ - [obscenity](https://www.npmjs.com/package/obscenity) - Core profanity detection
147
+ - [htmlparser2](https://www.npmjs.com/package/htmlparser2) - HTML parsing
148
+
149
+ ## License
150
+
151
+ ISC
152
+
153
+ ## Contributing
154
+
155
+ Contributions are welcome! Please feel free to submit a Pull Request.
156
+
157
+ ## Disclaimer
158
+
159
+ This library is designed to help filter offensive content, but no automated system is perfect. The dictionary includes explicit terms for detection purposes only. Use responsibly and consider your specific use case and audience.
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var l=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var T=(e,r)=>{for(var n in r)l(e,n,{get:r[n],enumerable:!0})},v=(e,r,n,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of x(r))!z.call(e,s)&&s!==n&&l(e,s,{get:()=>r[s],enumerable:!(i=j(r,s))||i.enumerable});return e};var q=e=>v(l({},"__esModule",{value:!0}),e);var C={};T(C,{censorBadWords:()=>W,censorHtmlPreservingTags:()=>$,hasContainsBadWords:()=>A});module.exports=q(C);var o=require("obscenity");var c=require("obscenity");var D={nigger:["nigger","nigga","n1gger","n!gger","nigg3r","ni99a","n*gger","n_gger","nibba","niqqer","nlgger","\u221A\xB1igger","nagger","n-word","n.i.g.g.e.r","n i g g e r","knee grow","niggers"],negro:["negro"],coon:["coon"],darkie:["darkie"],spook:["spook"],jigaboo:["jigaboo"],sambo:["sambo"],pickaninny:["pickaninny"],"tar baby":["tar baby"],"porch monkey":["porch monkey"],"jungle bunny":["jungle bunny"],spade:["spade"],"moon cricket":["moon cricket"],kike:["kike","k1ke"],yid:["yid"],heeb:["heeb"],hymie:["hymie"],"christ killer":["christ killer"],chink:["chink","ch1nk"],gook:["gook","g00k"],slant:["slant"],slope:["slope"],zipperhead:["zipperhead"],"ching chong":["ching chong"],chinaman:["chinaman"],jap:["jap"],nip:["nip"],wetback:["wetback"],spic:["spic","sp1c"],beaner:["beaner"],greaser:["greaser"],cracker:["cracker"],honky:["honky"],redneck:["redneck"],"white trash":["white trash"],peckerwood:["peckerwood"],"trailer trash":["trailer trash"],raghead:["raghead"],towelhead:["towelhead"],"sand nigger":["sand nigger"],"camel jockey":["camel jockey"],hajji:["hajji"],muzzie:["muzzie"],paki:["paki"],"curry muncher":["curry muncher"],wop:["wop"],dago:["dago"],guinea:["guinea"],polack:["polack"],kraut:["kraut"],frog:["frog"],limey:["limey"],mick:["mick"],paddy:["paddy"],gypsy:["gypsy"],pikey:["pikey"],abo:["abo"],boong:["boong"],redskin:["redskin"],injun:["injun"],squaw:["squaw"],"prairie nigger":["prairie nigger"],faggot:["faggot","fag","faggy","faggotry","f4ggot","f@ggot","f4g","f*ggot","f-word","f.a.g.g.o.t","FAGGOT","Faggot","FaGgOt","faggots"],dyke:["dyke"],lesbo:["lesbo"],lezzie:["lezzie"],"carpet muncher":["carpet muncher"],"muff diver":["muff diver"],homo:["homo"],homosexual:["homosexual"],queer:["queer"],queen:["queen"],pansy:["pansy"],fairy:["fairy"],poof:["poof"],poofter:["poofter"],nancy:["nancy"],"nancy boy":["nancy boy"],fruit:["fruit"],fruitcake:["fruitcake"],"batty boy":["batty boy"],"batty man":["batty man"],"chi chi man":["chi chi man"],sissy:["sissy"],"butt pirate":["butt pirate"],"pillow biter":["pillow biter"],"fudge packer":["fudge packer"],"ass bandit":["ass bandit"],"shirt lifter":["shirt lifter"],tranny:["tranny","tr\u2013\u221Enny"],shemale:["shemale"],"he-she":["he-she"],"she-male":["she-male"],ladyboy:["ladyboy"],trap:["trap"],troon:["troon"],troid:["troid"],hermaphrodite:["hermaphrodite"],retard:["retard","retarded","tard","libtard","fucktard","r3tard","ret@rd","retards"],spaz:["spaz"],spastic:["spastic"],cripple:["cripple"],gimp:["gimp"],invalid:["invalid"],vegetable:["vegetable"],moron:["moron"],imbecile:["imbecile"],idiot:["idiot"],cretin:["cretin"],mongoloid:["mongoloid"],"window licker":["window licker"],"short bus":["short bus"],cunt:["cunt","c*nt"],bitch:["bitch"],whore:["whore"],slut:["slut"],hoe:["hoe"],skank:["skank"],slag:["slag"],twat:["twat"],gash:["gash"],feminazi:["feminazi"],thot:["thot"],roastie:["roastie"],foid:["foid"],femoid:["femoid"],cuck:["cuck"],soyboy:["soyboy"],beta:["beta"],"bible thumper":["bible thumper"],"holy roller":["holy roller"],heathen:["heathen"],infidel:["infidel"],kafir:["kafir"],goy:["goy"],shiksa:["shiksa"],papist:["papist"],"mackerel snapper":["mackerel snapper"],proddy:["proddy"],taig:["taig"],fenian:["fenian"],hun:["hun"],"orange bastard":["orange bastard"]},h=D;var p=new c.DataSet().addAll(c.englishDataset),M=()=>{for(let e in h)p.addPhrase(r=>{r.setMetadata({originalWord:e});for(let n of h[e])r.addPattern(c.pattern`${n}`);return r})};M();var m=require("htmlparser2"),k={...p.build(),...o.englishRecommendedTransformers},y=new o.RegExpMatcher({...k,blacklistMatcherTransformers:[...k.blacklistMatcherTransformers||[]],blacklistedTerms:[...k.blacklistedTerms]}),S=(0,o.keepStartCensorStrategy)((0,o.asteriskCensorStrategy)()),u=new o.TextCensor().setStrategy(S),W=e=>u.applyTo(e,y.getAllMatches(e)),A=e=>y.hasMatch(e),$=e=>{let r=[],n=[],i="",s=new m.Parser({ontext(a){r.push(a),n.push({start:i.length,end:i.length+a.length}),i+=a}},{decodeEntities:!1});s.write(e),s.end();let w=u.applyTo(i,y.getAllMatches(i)),t="",d=0,b=new m.Parser({onopentag(a,g){t+="<"+a;for(let f in g)t+=` ${f}="${g[f]}"`;t+=">"},ontext(a){let g=a.length;t+=w.slice(d,d+g),d+=g},onclosetag(a){t+=`</${a}>`},oncomment(a){t+=`<!--${a}-->`},onprocessinginstruction(a,g){t+=`<${g}>`},oncdatastart(){t+="<![CDATA["},oncdataend(){t+="]]>"},onerror(a){throw a}},{decodeEntities:!1});return b.write(e),b.end(),t};0&&(module.exports={censorBadWords,censorHtmlPreservingTags,hasContainsBadWords});
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/string.ts","../src/dataset.ts","../src/fevo-dictionary.ts"],"sourcesContent":["export * from \"./string\";\n","import {\n asteriskCensorStrategy,\n englishRecommendedTransformers,\n keepStartCensorStrategy,\n RegExpMatcher,\n TextCensor,\n} from \"obscenity\";\nimport { badWordsDataSet } from \"./dataset\";\nimport { Parser } from \"htmlparser2\";\n\nconst presets = {\n ...badWordsDataSet.build(),\n ...englishRecommendedTransformers,\n};\n\nconst badWordsMatcher = new RegExpMatcher({\n ...presets,\n blacklistMatcherTransformers: [\n ...(presets.blacklistMatcherTransformers || []),\n ],\n blacklistedTerms: [...presets.blacklistedTerms],\n});\n\nconst strategy = keepStartCensorStrategy(asteriskCensorStrategy());\nconst censor = new TextCensor().setStrategy(strategy);\n\nexport const censorBadWords = (input: string) => {\n return censor.applyTo(input, badWordsMatcher.getAllMatches(input));\n};\n\nexport const hasContainsBadWords = (input: string) => {\n return badWordsMatcher.hasMatch(input);\n};\n\nexport const censorHtmlPreservingTags = (htmlStr: string) => {\n const textNodes = [];\n const nodePositions = [];\n let fullText = \"\";\n\n const parser = new Parser(\n {\n ontext(text) {\n textNodes.push(text);\n nodePositions.push({\n start: fullText.length,\n end: fullText.length + text.length,\n });\n fullText += text;\n },\n },\n { decodeEntities: false }\n );\n\n parser.write(htmlStr);\n parser.end();\n\n const censored = censor.applyTo(\n fullText,\n badWordsMatcher.getAllMatches(fullText)\n );\n\n let result = \"\";\n let textIndex = 0;\n\n const parser2 = new Parser(\n {\n onopentag(name, attribs) {\n result += \"<\" + name;\n for (const k in attribs) {\n result += ` ${k}=\"${attribs[k]}\"`;\n }\n result += \">\";\n },\n ontext(text) {\n const len = text.length;\n result += censored.slice(textIndex, textIndex + len);\n textIndex += len;\n },\n onclosetag(name) {\n result += `</${name}>`;\n },\n oncomment(data) {\n result += `<!--${data}-->`;\n },\n onprocessinginstruction(name, data) {\n result += `<${data}>`;\n },\n oncdatastart() {\n result += \"<![CDATA[\";\n },\n oncdataend() {\n result += \"]]>\";\n },\n onerror(err) {\n throw err;\n },\n },\n { decodeEntities: false }\n );\n\n parser2.write(htmlStr);\n parser2.end();\n\n return result;\n};\n","import { DataSet, englishDataset, pattern } from \"obscenity\";\nimport fevoDict from \"./fevo-dictionary\";\n\nexport const badWordsDataSet = new DataSet<{ originalWord: string }>().addAll(\n englishDataset\n);\n\nconst initDataSet = () => {\n for (let key in fevoDict) {\n badWordsDataSet.addPhrase((phrase) => {\n phrase.setMetadata({ originalWord: key });\n for (let variant of fevoDict[key] as string[]) {\n phrase.addPattern(pattern`${variant}`);\n }\n return phrase;\n });\n }\n};\n\ninitDataSet();\n","const fevoDict: Record<string, string[]> = {\n // Racial slurs - Black\n nigger: [`nigger`, `nigga`, `n1gger`, `n!gger`, `nigg3r`, `ni99a`, `n*gger`, `n_gger`, `nibba`, `niqqer`, `nlgger`, `ñigger`, `nagger`, `n-word`, `n.i.g.g.e.r`, `n i g g e r`, `knee grow`, `niggers`],\n negro: [`negro`],\n coon: [`coon`],\n darkie: [`darkie`],\n spook: [`spook`],\n jigaboo: [`jigaboo`],\n sambo: [`sambo`],\n pickaninny: [`pickaninny`],\n \"tar baby\": [`tar baby`],\n \"porch monkey\": [`porch monkey`],\n \"jungle bunny\": [`jungle bunny`],\n spade: [`spade`],\n \"moon cricket\": [`moon cricket`],\n \n // Racial slurs - Jewish\n kike: [`kike`, `k1ke`],\n yid: [`yid`],\n heeb: [`heeb`],\n hymie: [`hymie`],\n \"christ killer\": [`christ killer`],\n \n // Racial slurs - Asian\n chink: [`chink`, `ch1nk`],\n gook: [`gook`, `g00k`],\n slant: [`slant`],\n slope: [`slope`],\n zipperhead: [`zipperhead`],\n \"ching chong\": [`ching chong`],\n chinaman: [`chinaman`],\n jap: [`jap`],\n nip: [`nip`],\n \n // Racial slurs - Hispanic/Latino\n wetback: [`wetback`],\n spic: [`spic`, `sp1c`],\n beaner: [`beaner`],\n greaser: [`greaser`],\n \n // Racial slurs - White\n cracker: [`cracker`],\n honky: [`honky`],\n redneck: [`redneck`],\n \"white trash\": [`white trash`],\n peckerwood: [`peckerwood`],\n \"trailer trash\": [`trailer trash`],\n \n // Racial slurs - Middle Eastern\n raghead: [`raghead`],\n towelhead: [`towelhead`],\n \"sand nigger\": [`sand nigger`],\n \"camel jockey\": [`camel jockey`],\n hajji: [`hajji`],\n muzzie: [`muzzie`],\n \n // Racial slurs - South Asian\n paki: [`paki`],\n \"curry muncher\": [`curry muncher`],\n \n // Racial slurs - Italian\n wop: [`wop`],\n dago: [`dago`],\n guinea: [`guinea`],\n \n // Racial slurs - Polish\n polack: [`polack`],\n \n // Racial slurs - German\n kraut: [`kraut`],\n \n // Racial slurs - French\n frog: [`frog`],\n \n // Racial slurs - British\n limey: [`limey`],\n \n // Racial slurs - Irish\n mick: [`mick`],\n paddy: [`paddy`],\n \n // Racial slurs - Romani\n gypsy: [`gypsy`],\n pikey: [`pikey`],\n \n // Racial slurs - Indigenous Australian\n abo: [`abo`],\n boong: [`boong`],\n \n // Racial slurs - Native American\n redskin: [`redskin`],\n injun: [`injun`],\n squaw: [`squaw`],\n \"prairie nigger\": [`prairie nigger`],\n \n // LGBTQ+ slurs\n faggot: [`faggot`, `fag`, `faggy`, `faggotry`, `f4ggot`, `f@ggot`, `f4g`, `f*ggot`, `f-word`, `f.a.g.g.o.t`, `FAGGOT`, `Faggot`, `FaGgOt`, `faggots`],\n dyke: [`dyke`],\n lesbo: [`lesbo`],\n lezzie: [`lezzie`],\n \"carpet muncher\": [`carpet muncher`],\n \"muff diver\": [`muff diver`],\n homo: [`homo`],\n homosexual: [`homosexual`],\n queer: [`queer`],\n queen: [`queen`],\n pansy: [`pansy`],\n fairy: [`fairy`],\n poof: [`poof`],\n poofter: [`poofter`],\n nancy: [`nancy`],\n \"nancy boy\": [`nancy boy`],\n fruit: [`fruit`],\n fruitcake: [`fruitcake`],\n \"batty boy\": [`batty boy`],\n \"batty man\": [`batty man`],\n \"chi chi man\": [`chi chi man`],\n sissy: [`sissy`],\n \"butt pirate\": [`butt pirate`],\n \"pillow biter\": [`pillow biter`],\n \"fudge packer\": [`fudge packer`],\n \"ass bandit\": [`ass bandit`],\n \"shirt lifter\": [`shirt lifter`],\n \n // Transgender slurs\n tranny: [`tranny`, `trаnny`],\n shemale: [`shemale`],\n \"he-she\": [`he-she`],\n \"she-male\": [`she-male`],\n ladyboy: [`ladyboy`],\n trap: [`trap`],\n troon: [`troon`],\n troid: [`troid`],\n hermaphrodite: [`hermaphrodite`],\n \n // Ableist slurs\n retard: [`retard`, `retarded`, `tard`, `libtard`, `fucktard`, `r3tard`, `ret@rd`, `retards`],\n spaz: [`spaz`],\n spastic: [`spastic`],\n cripple: [`cripple`],\n gimp: [`gimp`],\n invalid: [`invalid`],\n vegetable: [`vegetable`],\n moron: [`moron`],\n imbecile: [`imbecile`],\n idiot: [`idiot`],\n cretin: [`cretin`],\n mongoloid: [`mongoloid`],\n \"window licker\": [`window licker`],\n \"short bus\": [`short bus`],\n \n // Misogynistic slurs\n cunt: [`cunt`, `c*nt`],\n bitch: [`bitch`],\n whore: [`whore`],\n slut: [`slut`],\n hoe: [`hoe`],\n skank: [`skank`],\n slag: [`slag`],\n twat: [`twat`],\n gash: [`gash`],\n feminazi: [`feminazi`],\n thot: [`thot`],\n roastie: [`roastie`],\n foid: [`foid`],\n femoid: [`femoid`],\n \n // Other derogatory terms\n cuck: [`cuck`],\n soyboy: [`soyboy`],\n beta: [`beta`],\n \n // Religious slurs\n \"bible thumper\": [`bible thumper`],\n \"holy roller\": [`holy roller`],\n heathen: [`heathen`],\n infidel: [`infidel`],\n kafir: [`kafir`],\n goy: [`goy`],\n shiksa: [`shiksa`],\n papist: [`papist`],\n \"mackerel snapper\": [`mackerel snapper`],\n proddy: [`proddy`],\n taig: [`taig`],\n fenian: [`fenian`],\n hun: [`hun`],\n \"orange bastard\": [`orange bastard`],\n};\n\nexport default fevoDict;\n"],"mappings":"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","names":["index_exports","__export","censorBadWords","censorHtmlPreservingTags","hasContainsBadWords","__toCommonJS","import_obscenity","import_obscenity","fevoDict","fevo_dictionary_default","badWordsDataSet","initDataSet","key","fevo_dictionary_default","phrase","variant","import_htmlparser2","presets","badWordsDataSet","badWordsMatcher","strategy","censor","censorBadWords","input","hasContainsBadWords","censorHtmlPreservingTags","htmlStr","textNodes","nodePositions","fullText","parser","text","censored","result","textIndex","parser2","name","attribs","k","len","data","err"]}
@@ -0,0 +1,5 @@
1
+ declare const censorBadWords: (input: string) => string;
2
+ declare const hasContainsBadWords: (input: string) => boolean;
3
+ declare const censorHtmlPreservingTags: (htmlStr: string) => string;
4
+
5
+ export { censorBadWords, censorHtmlPreservingTags, hasContainsBadWords };
@@ -0,0 +1,5 @@
1
+ declare const censorBadWords: (input: string) => string;
2
+ declare const hasContainsBadWords: (input: string) => boolean;
3
+ declare const censorHtmlPreservingTags: (htmlStr: string) => string;
4
+
5
+ export { censorBadWords, censorHtmlPreservingTags, hasContainsBadWords };
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ import{asteriskCensorStrategy as z,englishRecommendedTransformers as T,keepStartCensorStrategy as v,RegExpMatcher as q,TextCensor as D}from"obscenity";import{DataSet as u,englishDataset as w,pattern as j}from"obscenity";var f={nigger:["nigger","nigga","n1gger","n!gger","nigg3r","ni99a","n*gger","n_gger","nibba","niqqer","nlgger","\u221A\xB1igger","nagger","n-word","n.i.g.g.e.r","n i g g e r","knee grow","niggers"],negro:["negro"],coon:["coon"],darkie:["darkie"],spook:["spook"],jigaboo:["jigaboo"],sambo:["sambo"],pickaninny:["pickaninny"],"tar baby":["tar baby"],"porch monkey":["porch monkey"],"jungle bunny":["jungle bunny"],spade:["spade"],"moon cricket":["moon cricket"],kike:["kike","k1ke"],yid:["yid"],heeb:["heeb"],hymie:["hymie"],"christ killer":["christ killer"],chink:["chink","ch1nk"],gook:["gook","g00k"],slant:["slant"],slope:["slope"],zipperhead:["zipperhead"],"ching chong":["ching chong"],chinaman:["chinaman"],jap:["jap"],nip:["nip"],wetback:["wetback"],spic:["spic","sp1c"],beaner:["beaner"],greaser:["greaser"],cracker:["cracker"],honky:["honky"],redneck:["redneck"],"white trash":["white trash"],peckerwood:["peckerwood"],"trailer trash":["trailer trash"],raghead:["raghead"],towelhead:["towelhead"],"sand nigger":["sand nigger"],"camel jockey":["camel jockey"],hajji:["hajji"],muzzie:["muzzie"],paki:["paki"],"curry muncher":["curry muncher"],wop:["wop"],dago:["dago"],guinea:["guinea"],polack:["polack"],kraut:["kraut"],frog:["frog"],limey:["limey"],mick:["mick"],paddy:["paddy"],gypsy:["gypsy"],pikey:["pikey"],abo:["abo"],boong:["boong"],redskin:["redskin"],injun:["injun"],squaw:["squaw"],"prairie nigger":["prairie nigger"],faggot:["faggot","fag","faggy","faggotry","f4ggot","f@ggot","f4g","f*ggot","f-word","f.a.g.g.o.t","FAGGOT","Faggot","FaGgOt","faggots"],dyke:["dyke"],lesbo:["lesbo"],lezzie:["lezzie"],"carpet muncher":["carpet muncher"],"muff diver":["muff diver"],homo:["homo"],homosexual:["homosexual"],queer:["queer"],queen:["queen"],pansy:["pansy"],fairy:["fairy"],poof:["poof"],poofter:["poofter"],nancy:["nancy"],"nancy boy":["nancy boy"],fruit:["fruit"],fruitcake:["fruitcake"],"batty boy":["batty boy"],"batty man":["batty man"],"chi chi man":["chi chi man"],sissy:["sissy"],"butt pirate":["butt pirate"],"pillow biter":["pillow biter"],"fudge packer":["fudge packer"],"ass bandit":["ass bandit"],"shirt lifter":["shirt lifter"],tranny:["tranny","tr\u2013\u221Enny"],shemale:["shemale"],"he-she":["he-she"],"she-male":["she-male"],ladyboy:["ladyboy"],trap:["trap"],troon:["troon"],troid:["troid"],hermaphrodite:["hermaphrodite"],retard:["retard","retarded","tard","libtard","fucktard","r3tard","ret@rd","retards"],spaz:["spaz"],spastic:["spastic"],cripple:["cripple"],gimp:["gimp"],invalid:["invalid"],vegetable:["vegetable"],moron:["moron"],imbecile:["imbecile"],idiot:["idiot"],cretin:["cretin"],mongoloid:["mongoloid"],"window licker":["window licker"],"short bus":["short bus"],cunt:["cunt","c*nt"],bitch:["bitch"],whore:["whore"],slut:["slut"],hoe:["hoe"],skank:["skank"],slag:["slag"],twat:["twat"],gash:["gash"],feminazi:["feminazi"],thot:["thot"],roastie:["roastie"],foid:["foid"],femoid:["femoid"],cuck:["cuck"],soyboy:["soyboy"],beta:["beta"],"bible thumper":["bible thumper"],"holy roller":["holy roller"],heathen:["heathen"],infidel:["infidel"],kafir:["kafir"],goy:["goy"],shiksa:["shiksa"],papist:["papist"],"mackerel snapper":["mackerel snapper"],proddy:["proddy"],taig:["taig"],fenian:["fenian"],hun:["hun"],"orange bastard":["orange bastard"]},g=f;var c=new u().addAll(w),x=()=>{for(let r in g)c.addPhrase(o=>{o.setMetadata({originalWord:r});for(let i of g[r])o.addPattern(j`${i}`);return o})};x();import{Parser as m}from"htmlparser2";var d={...c.build(),...T},l=new q({...d,blacklistMatcherTransformers:[...d.blacklistMatcherTransformers||[]],blacklistedTerms:[...d.blacklistedTerms]}),M=v(z()),y=new D().setStrategy(M),F=r=>y.applyTo(r,l.getAllMatches(r)),G=r=>l.hasMatch(r),R=r=>{let o=[],i=[],n="",h=new m({ontext(e){o.push(e),i.push({start:n.length,end:n.length+e.length}),n+=e}},{decodeEntities:!1});h.write(r),h.end();let b=y.applyTo(n,l.getAllMatches(n)),a="",s=0,p=new m({onopentag(e,t){a+="<"+e;for(let k in t)a+=` ${k}="${t[k]}"`;a+=">"},ontext(e){let t=e.length;a+=b.slice(s,s+t),s+=t},onclosetag(e){a+=`</${e}>`},oncomment(e){a+=`<!--${e}-->`},onprocessinginstruction(e,t){a+=`<${t}>`},oncdatastart(){a+="<![CDATA["},oncdataend(){a+="]]>"},onerror(e){throw e}},{decodeEntities:!1});return p.write(r),p.end(),a};export{F as censorBadWords,R as censorHtmlPreservingTags,G as hasContainsBadWords};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/string.ts","../src/dataset.ts","../src/fevo-dictionary.ts"],"sourcesContent":["import {\n asteriskCensorStrategy,\n englishRecommendedTransformers,\n keepStartCensorStrategy,\n RegExpMatcher,\n TextCensor,\n} from \"obscenity\";\nimport { badWordsDataSet } from \"./dataset\";\nimport { Parser } from \"htmlparser2\";\n\nconst presets = {\n ...badWordsDataSet.build(),\n ...englishRecommendedTransformers,\n};\n\nconst badWordsMatcher = new RegExpMatcher({\n ...presets,\n blacklistMatcherTransformers: [\n ...(presets.blacklistMatcherTransformers || []),\n ],\n blacklistedTerms: [...presets.blacklistedTerms],\n});\n\nconst strategy = keepStartCensorStrategy(asteriskCensorStrategy());\nconst censor = new TextCensor().setStrategy(strategy);\n\nexport const censorBadWords = (input: string) => {\n return censor.applyTo(input, badWordsMatcher.getAllMatches(input));\n};\n\nexport const hasContainsBadWords = (input: string) => {\n return badWordsMatcher.hasMatch(input);\n};\n\nexport const censorHtmlPreservingTags = (htmlStr: string) => {\n const textNodes = [];\n const nodePositions = [];\n let fullText = \"\";\n\n const parser = new Parser(\n {\n ontext(text) {\n textNodes.push(text);\n nodePositions.push({\n start: fullText.length,\n end: fullText.length + text.length,\n });\n fullText += text;\n },\n },\n { decodeEntities: false }\n );\n\n parser.write(htmlStr);\n parser.end();\n\n const censored = censor.applyTo(\n fullText,\n badWordsMatcher.getAllMatches(fullText)\n );\n\n let result = \"\";\n let textIndex = 0;\n\n const parser2 = new Parser(\n {\n onopentag(name, attribs) {\n result += \"<\" + name;\n for (const k in attribs) {\n result += ` ${k}=\"${attribs[k]}\"`;\n }\n result += \">\";\n },\n ontext(text) {\n const len = text.length;\n result += censored.slice(textIndex, textIndex + len);\n textIndex += len;\n },\n onclosetag(name) {\n result += `</${name}>`;\n },\n oncomment(data) {\n result += `<!--${data}-->`;\n },\n onprocessinginstruction(name, data) {\n result += `<${data}>`;\n },\n oncdatastart() {\n result += \"<![CDATA[\";\n },\n oncdataend() {\n result += \"]]>\";\n },\n onerror(err) {\n throw err;\n },\n },\n { decodeEntities: false }\n );\n\n parser2.write(htmlStr);\n parser2.end();\n\n return result;\n};\n","import { DataSet, englishDataset, pattern } from \"obscenity\";\nimport fevoDict from \"./fevo-dictionary\";\n\nexport const badWordsDataSet = new DataSet<{ originalWord: string }>().addAll(\n englishDataset\n);\n\nconst initDataSet = () => {\n for (let key in fevoDict) {\n badWordsDataSet.addPhrase((phrase) => {\n phrase.setMetadata({ originalWord: key });\n for (let variant of fevoDict[key] as string[]) {\n phrase.addPattern(pattern`${variant}`);\n }\n return phrase;\n });\n }\n};\n\ninitDataSet();\n","const fevoDict: Record<string, string[]> = {\n // Racial slurs - Black\n nigger: [`nigger`, `nigga`, `n1gger`, `n!gger`, `nigg3r`, `ni99a`, `n*gger`, `n_gger`, `nibba`, `niqqer`, `nlgger`, `ñigger`, `nagger`, `n-word`, `n.i.g.g.e.r`, `n i g g e r`, `knee grow`, `niggers`],\n negro: [`negro`],\n coon: [`coon`],\n darkie: [`darkie`],\n spook: [`spook`],\n jigaboo: [`jigaboo`],\n sambo: [`sambo`],\n pickaninny: [`pickaninny`],\n \"tar baby\": [`tar baby`],\n \"porch monkey\": [`porch monkey`],\n \"jungle bunny\": [`jungle bunny`],\n spade: [`spade`],\n \"moon cricket\": [`moon cricket`],\n \n // Racial slurs - Jewish\n kike: [`kike`, `k1ke`],\n yid: [`yid`],\n heeb: [`heeb`],\n hymie: [`hymie`],\n \"christ killer\": [`christ killer`],\n \n // Racial slurs - Asian\n chink: [`chink`, `ch1nk`],\n gook: [`gook`, `g00k`],\n slant: [`slant`],\n slope: [`slope`],\n zipperhead: [`zipperhead`],\n \"ching chong\": [`ching chong`],\n chinaman: [`chinaman`],\n jap: [`jap`],\n nip: [`nip`],\n \n // Racial slurs - Hispanic/Latino\n wetback: [`wetback`],\n spic: [`spic`, `sp1c`],\n beaner: [`beaner`],\n greaser: [`greaser`],\n \n // Racial slurs - White\n cracker: [`cracker`],\n honky: [`honky`],\n redneck: [`redneck`],\n \"white trash\": [`white trash`],\n peckerwood: [`peckerwood`],\n \"trailer trash\": [`trailer trash`],\n \n // Racial slurs - Middle Eastern\n raghead: [`raghead`],\n towelhead: [`towelhead`],\n \"sand nigger\": [`sand nigger`],\n \"camel jockey\": [`camel jockey`],\n hajji: [`hajji`],\n muzzie: [`muzzie`],\n \n // Racial slurs - South Asian\n paki: [`paki`],\n \"curry muncher\": [`curry muncher`],\n \n // Racial slurs - Italian\n wop: [`wop`],\n dago: [`dago`],\n guinea: [`guinea`],\n \n // Racial slurs - Polish\n polack: [`polack`],\n \n // Racial slurs - German\n kraut: [`kraut`],\n \n // Racial slurs - French\n frog: [`frog`],\n \n // Racial slurs - British\n limey: [`limey`],\n \n // Racial slurs - Irish\n mick: [`mick`],\n paddy: [`paddy`],\n \n // Racial slurs - Romani\n gypsy: [`gypsy`],\n pikey: [`pikey`],\n \n // Racial slurs - Indigenous Australian\n abo: [`abo`],\n boong: [`boong`],\n \n // Racial slurs - Native American\n redskin: [`redskin`],\n injun: [`injun`],\n squaw: [`squaw`],\n \"prairie nigger\": [`prairie nigger`],\n \n // LGBTQ+ slurs\n faggot: [`faggot`, `fag`, `faggy`, `faggotry`, `f4ggot`, `f@ggot`, `f4g`, `f*ggot`, `f-word`, `f.a.g.g.o.t`, `FAGGOT`, `Faggot`, `FaGgOt`, `faggots`],\n dyke: [`dyke`],\n lesbo: [`lesbo`],\n lezzie: [`lezzie`],\n \"carpet muncher\": [`carpet muncher`],\n \"muff diver\": [`muff diver`],\n homo: [`homo`],\n homosexual: [`homosexual`],\n queer: [`queer`],\n queen: [`queen`],\n pansy: [`pansy`],\n fairy: [`fairy`],\n poof: [`poof`],\n poofter: [`poofter`],\n nancy: [`nancy`],\n \"nancy boy\": [`nancy boy`],\n fruit: [`fruit`],\n fruitcake: [`fruitcake`],\n \"batty boy\": [`batty boy`],\n \"batty man\": [`batty man`],\n \"chi chi man\": [`chi chi man`],\n sissy: [`sissy`],\n \"butt pirate\": [`butt pirate`],\n \"pillow biter\": [`pillow biter`],\n \"fudge packer\": [`fudge packer`],\n \"ass bandit\": [`ass bandit`],\n \"shirt lifter\": [`shirt lifter`],\n \n // Transgender slurs\n tranny: [`tranny`, `trаnny`],\n shemale: [`shemale`],\n \"he-she\": [`he-she`],\n \"she-male\": [`she-male`],\n ladyboy: [`ladyboy`],\n trap: [`trap`],\n troon: [`troon`],\n troid: [`troid`],\n hermaphrodite: [`hermaphrodite`],\n \n // Ableist slurs\n retard: [`retard`, `retarded`, `tard`, `libtard`, `fucktard`, `r3tard`, `ret@rd`, `retards`],\n spaz: [`spaz`],\n spastic: [`spastic`],\n cripple: [`cripple`],\n gimp: [`gimp`],\n invalid: [`invalid`],\n vegetable: [`vegetable`],\n moron: [`moron`],\n imbecile: [`imbecile`],\n idiot: [`idiot`],\n cretin: [`cretin`],\n mongoloid: [`mongoloid`],\n \"window licker\": [`window licker`],\n \"short bus\": [`short bus`],\n \n // Misogynistic slurs\n cunt: [`cunt`, `c*nt`],\n bitch: [`bitch`],\n whore: [`whore`],\n slut: [`slut`],\n hoe: [`hoe`],\n skank: [`skank`],\n slag: [`slag`],\n twat: [`twat`],\n gash: [`gash`],\n feminazi: [`feminazi`],\n thot: [`thot`],\n roastie: [`roastie`],\n foid: [`foid`],\n femoid: [`femoid`],\n \n // Other derogatory terms\n cuck: [`cuck`],\n soyboy: [`soyboy`],\n beta: [`beta`],\n \n // Religious slurs\n \"bible thumper\": [`bible thumper`],\n \"holy roller\": [`holy roller`],\n heathen: [`heathen`],\n infidel: [`infidel`],\n kafir: [`kafir`],\n goy: [`goy`],\n shiksa: [`shiksa`],\n papist: [`papist`],\n \"mackerel snapper\": [`mackerel snapper`],\n proddy: [`proddy`],\n taig: [`taig`],\n fenian: [`fenian`],\n hun: [`hun`],\n \"orange bastard\": [`orange bastard`],\n};\n\nexport default fevoDict;\n"],"mappings":"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","names":["asteriskCensorStrategy","englishRecommendedTransformers","keepStartCensorStrategy","RegExpMatcher","TextCensor","DataSet","englishDataset","pattern","fevoDict","fevo_dictionary_default","badWordsDataSet","DataSet","englishDataset","initDataSet","key","fevo_dictionary_default","phrase","variant","pattern","Parser","presets","badWordsDataSet","englishRecommendedTransformers","badWordsMatcher","RegExpMatcher","strategy","keepStartCensorStrategy","asteriskCensorStrategy","censor","TextCensor","censorBadWords","input","hasContainsBadWords","censorHtmlPreservingTags","htmlStr","textNodes","nodePositions","fullText","parser","text","censored","result","textIndex","parser2","name","attribs","len","data","err"]}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@fevo-tech/obscenity",
3
+ "version": "0.0.2",
4
+ "description": "",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "exports": {
9
+ "import": "./dist/index.js",
10
+ "require": "./dist/index.cjs"
11
+ },
12
+ "types": "./dist/index.d.ts",
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsup",
18
+ "clean": "rm -rf dist"
19
+ },
20
+ "author": "",
21
+ "license": "ISC",
22
+ "dependencies": {
23
+ "htmlparser2": "^10.0.0",
24
+ "obscenity": "^0.4.5"
25
+ },
26
+ "devDependencies": {
27
+ "tsup": "^8.5.1",
28
+ "typescript": "^5.9.3"
29
+ }
30
+ }