@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 +159 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +30 -0
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"]}
|
package/dist/index.d.cts
ADDED
package/dist/index.d.ts
ADDED
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":"AAAA,OACE,0BAAAA,EACA,kCAAAC,EACA,2BAAAC,EACA,iBAAAC,EACA,cAAAC,MACK,YCNP,OAAS,WAAAC,EAAS,kBAAAC,EAAgB,WAAAC,MAAe,YCAjD,IAAMC,EAAqC,CAEzC,OAAQ,CAAC,SAAU,QAAS,SAAU,SAAU,SAAU,QAAS,SAAU,SAAU,QAAS,SAAU,SAAU,kBAAW,SAAU,SAAU,cAAe,cAAe,YAAa,SAAS,EACvM,MAAO,CAAC,OAAO,EACf,KAAM,CAAC,MAAM,EACb,OAAQ,CAAC,QAAQ,EACjB,MAAO,CAAC,OAAO,EACf,QAAS,CAAC,SAAS,EACnB,MAAO,CAAC,OAAO,EACf,WAAY,CAAC,YAAY,EACzB,WAAY,CAAC,UAAU,EACvB,eAAgB,CAAC,cAAc,EAC/B,eAAgB,CAAC,cAAc,EAC/B,MAAO,CAAC,OAAO,EACf,eAAgB,CAAC,cAAc,EAG/B,KAAM,CAAC,OAAQ,MAAM,EACrB,IAAK,CAAC,KAAK,EACX,KAAM,CAAC,MAAM,EACb,MAAO,CAAC,OAAO,EACf,gBAAiB,CAAC,eAAe,EAGjC,MAAO,CAAC,QAAS,OAAO,EACxB,KAAM,CAAC,OAAQ,MAAM,EACrB,MAAO,CAAC,OAAO,EACf,MAAO,CAAC,OAAO,EACf,WAAY,CAAC,YAAY,EACzB,cAAe,CAAC,aAAa,EAC7B,SAAU,CAAC,UAAU,EACrB,IAAK,CAAC,KAAK,EACX,IAAK,CAAC,KAAK,EAGX,QAAS,CAAC,SAAS,EACnB,KAAM,CAAC,OAAQ,MAAM,EACrB,OAAQ,CAAC,QAAQ,EACjB,QAAS,CAAC,SAAS,EAGnB,QAAS,CAAC,SAAS,EACnB,MAAO,CAAC,OAAO,EACf,QAAS,CAAC,SAAS,EACnB,cAAe,CAAC,aAAa,EAC7B,WAAY,CAAC,YAAY,EACzB,gBAAiB,CAAC,eAAe,EAGjC,QAAS,CAAC,SAAS,EACnB,UAAW,CAAC,WAAW,EACvB,cAAe,CAAC,aAAa,EAC7B,eAAgB,CAAC,cAAc,EAC/B,MAAO,CAAC,OAAO,EACf,OAAQ,CAAC,QAAQ,EAGjB,KAAM,CAAC,MAAM,EACb,gBAAiB,CAAC,eAAe,EAGjC,IAAK,CAAC,KAAK,EACX,KAAM,CAAC,MAAM,EACb,OAAQ,CAAC,QAAQ,EAGjB,OAAQ,CAAC,QAAQ,EAGjB,MAAO,CAAC,OAAO,EAGf,KAAM,CAAC,MAAM,EAGb,MAAO,CAAC,OAAO,EAGf,KAAM,CAAC,MAAM,EACb,MAAO,CAAC,OAAO,EAGf,MAAO,CAAC,OAAO,EACf,MAAO,CAAC,OAAO,EAGf,IAAK,CAAC,KAAK,EACX,MAAO,CAAC,OAAO,EAGf,QAAS,CAAC,SAAS,EACnB,MAAO,CAAC,OAAO,EACf,MAAO,CAAC,OAAO,EACf,iBAAkB,CAAC,gBAAgB,EAGnC,OAAQ,CAAC,SAAU,MAAO,QAAS,WAAY,SAAU,SAAU,MAAO,SAAU,SAAU,cAAe,SAAU,SAAU,SAAU,SAAS,EACpJ,KAAM,CAAC,MAAM,EACb,MAAO,CAAC,OAAO,EACf,OAAQ,CAAC,QAAQ,EACjB,iBAAkB,CAAC,gBAAgB,EACnC,aAAc,CAAC,YAAY,EAC3B,KAAM,CAAC,MAAM,EACb,WAAY,CAAC,YAAY,EACzB,MAAO,CAAC,OAAO,EACf,MAAO,CAAC,OAAO,EACf,MAAO,CAAC,OAAO,EACf,MAAO,CAAC,OAAO,EACf,KAAM,CAAC,MAAM,EACb,QAAS,CAAC,SAAS,EACnB,MAAO,CAAC,OAAO,EACf,YAAa,CAAC,WAAW,EACzB,MAAO,CAAC,OAAO,EACf,UAAW,CAAC,WAAW,EACvB,YAAa,CAAC,WAAW,EACzB,YAAa,CAAC,WAAW,EACzB,cAAe,CAAC,aAAa,EAC7B,MAAO,CAAC,OAAO,EACf,cAAe,CAAC,aAAa,EAC7B,eAAgB,CAAC,cAAc,EAC/B,eAAgB,CAAC,cAAc,EAC/B,aAAc,CAAC,YAAY,EAC3B,eAAgB,CAAC,cAAc,EAG/B,OAAQ,CAAC,SAAU,mBAAS,EAC5B,QAAS,CAAC,SAAS,EACnB,SAAU,CAAC,QAAQ,EACnB,WAAY,CAAC,UAAU,EACvB,QAAS,CAAC,SAAS,EACnB,KAAM,CAAC,MAAM,EACb,MAAO,CAAC,OAAO,EACf,MAAO,CAAC,OAAO,EACf,cAAe,CAAC,eAAe,EAG/B,OAAQ,CAAC,SAAU,WAAY,OAAQ,UAAW,WAAY,SAAU,SAAU,SAAS,EAC3F,KAAM,CAAC,MAAM,EACb,QAAS,CAAC,SAAS,EACnB,QAAS,CAAC,SAAS,EACnB,KAAM,CAAC,MAAM,EACb,QAAS,CAAC,SAAS,EACnB,UAAW,CAAC,WAAW,EACvB,MAAO,CAAC,OAAO,EACf,SAAU,CAAC,UAAU,EACrB,MAAO,CAAC,OAAO,EACf,OAAQ,CAAC,QAAQ,EACjB,UAAW,CAAC,WAAW,EACvB,gBAAiB,CAAC,eAAe,EACjC,YAAa,CAAC,WAAW,EAGzB,KAAM,CAAC,OAAQ,MAAM,EACrB,MAAO,CAAC,OAAO,EACf,MAAO,CAAC,OAAO,EACf,KAAM,CAAC,MAAM,EACb,IAAK,CAAC,KAAK,EACX,MAAO,CAAC,OAAO,EACf,KAAM,CAAC,MAAM,EACb,KAAM,CAAC,MAAM,EACb,KAAM,CAAC,MAAM,EACb,SAAU,CAAC,UAAU,EACrB,KAAM,CAAC,MAAM,EACb,QAAS,CAAC,SAAS,EACnB,KAAM,CAAC,MAAM,EACb,OAAQ,CAAC,QAAQ,EAGjB,KAAM,CAAC,MAAM,EACb,OAAQ,CAAC,QAAQ,EACjB,KAAM,CAAC,MAAM,EAGb,gBAAiB,CAAC,eAAe,EACjC,cAAe,CAAC,aAAa,EAC7B,QAAS,CAAC,SAAS,EACnB,QAAS,CAAC,SAAS,EACnB,MAAO,CAAC,OAAO,EACf,IAAK,CAAC,KAAK,EACX,OAAQ,CAAC,QAAQ,EACjB,OAAQ,CAAC,QAAQ,EACjB,mBAAoB,CAAC,kBAAkB,EACvC,OAAQ,CAAC,QAAQ,EACjB,KAAM,CAAC,MAAM,EACb,OAAQ,CAAC,QAAQ,EACjB,IAAK,CAAC,KAAK,EACX,iBAAkB,CAAC,gBAAgB,CACrC,EAEOC,EAAQD,ED1LR,IAAME,EAAkB,IAAIC,EAAkC,EAAE,OACrEC,CACF,EAEMC,EAAc,IAAM,CACxB,QAASC,KAAOC,EACdL,EAAgB,UAAWM,GAAW,CACpCA,EAAO,YAAY,CAAE,aAAcF,CAAI,CAAC,EACxC,QAASG,KAAWF,EAASD,CAAG,EAC9BE,EAAO,WAAWE,IAAUD,CAAO,EAAE,EAEvC,OAAOD,CACT,CAAC,CAEL,EAEAH,EAAY,EDXZ,OAAS,UAAAM,MAAc,cAEvB,IAAMC,EAAU,CACd,GAAGC,EAAgB,MAAM,EACzB,GAAGC,CACL,EAEMC,EAAkB,IAAIC,EAAc,CACxC,GAAGJ,EACH,6BAA8B,CAC5B,GAAIA,EAAQ,8BAAgC,CAAC,CAC/C,EACA,iBAAkB,CAAC,GAAGA,EAAQ,gBAAgB,CAChD,CAAC,EAEKK,EAAWC,EAAwBC,EAAuB,CAAC,EAC3DC,EAAS,IAAIC,EAAW,EAAE,YAAYJ,CAAQ,EAEvCK,EAAkBC,GACtBH,EAAO,QAAQG,EAAOR,EAAgB,cAAcQ,CAAK,CAAC,EAGtDC,EAAuBD,GAC3BR,EAAgB,SAASQ,CAAK,EAG1BE,EAA4BC,GAAoB,CAC3D,IAAMC,EAAY,CAAC,EACbC,EAAgB,CAAC,EACnBC,EAAW,GAETC,EAAS,IAAInB,EACjB,CACE,OAAOoB,EAAM,CACXJ,EAAU,KAAKI,CAAI,EACnBH,EAAc,KAAK,CACjB,MAAOC,EAAS,OAChB,IAAKA,EAAS,OAASE,EAAK,MAC9B,CAAC,EACDF,GAAYE,CACd,CACF,EACA,CAAE,eAAgB,EAAM,CAC1B,EAEAD,EAAO,MAAMJ,CAAO,EACpBI,EAAO,IAAI,EAEX,IAAME,EAAWZ,EAAO,QACtBS,EACAd,EAAgB,cAAcc,CAAQ,CACxC,EAEII,EAAS,GACTC,EAAY,EAEVC,EAAU,IAAIxB,EAClB,CACE,UAAUyB,EAAMC,EAAS,CACvBJ,GAAU,IAAMG,EAChB,QAAW,KAAKC,EACdJ,GAAU,IAAI,CAAC,KAAKI,EAAQ,CAAC,CAAC,IAEhCJ,GAAU,GACZ,EACA,OAAOF,EAAM,CACX,IAAMO,EAAMP,EAAK,OACjBE,GAAUD,EAAS,MAAME,EAAWA,EAAYI,CAAG,EACnDJ,GAAaI,CACf,EACA,WAAWF,EAAM,CACfH,GAAU,KAAKG,CAAI,GACrB,EACA,UAAUG,EAAM,CACdN,GAAU,OAAOM,CAAI,KACvB,EACA,wBAAwBH,EAAMG,EAAM,CAClCN,GAAU,IAAIM,CAAI,GACpB,EACA,cAAe,CACbN,GAAU,WACZ,EACA,YAAa,CACXA,GAAU,KACZ,EACA,QAAQO,EAAK,CACX,MAAMA,CACR,CACF,EACA,CAAE,eAAgB,EAAM,CAC1B,EAEA,OAAAL,EAAQ,MAAMT,CAAO,EACrBS,EAAQ,IAAI,EAELF,CACT","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
|
+
}
|