@safetype/dom 1.9.0 → 1.10.0
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/dist/safetype.global.js +3 -3
- package/package.json +2 -2
package/dist/safetype.global.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";var SafeType=(()=>{var oe=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var Je=Object.getOwnPropertyNames;var et=Object.prototype.hasOwnProperty;var tt=(e,t)=>{for(var r in t)oe(e,r,{get:t[r],enumerable:!0})},rt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Je(t))!et.call(e,a)&&a!==r&&oe(e,a,{get:()=>t[a],enumerable:!(n=Ze(t,a))||n.enumerable});return e};var nt=e=>rt(oe({},"__esModule",{value:!0}),e);var Ir={};tt(Ir,{DEFAULT_MESSAGES:()=>Se,DEFAULT_SELECTOR:()=>Q,MANAGED_EDITOR_SELECTOR:()=>X,createModerationEngine:()=>Y,createSafeType:()=>Qe,getMessageLevel:()=>ee,isEligible:()=>H,resolveMessage:()=>Ce});var at=[{id:"en.profanity.fuck",pattern:"fuck*",category:"profanity",severity:"high",replacement:"heck"},{id:"en.profanity.motherfucker",pattern:"motherfuck*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.shit",pattern:"shit*",category:"profanity",severity:"medium",replacement:"shoot"},{id:"en.profanity.bullshit",pattern:"(bullshit*|horseshit*)",category:"profanity",severity:"medium",replacement:"nonsense"},{id:"en.profanity.bitch",pattern:"bitch*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.ass",pattern:"(ass|arse)",category:"profanity",severity:"medium",replacement:"butt"},{id:"en.profanity.asshole",pattern:"(asshole*|arsehole*|jackass*|dumbass*)",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.bastard",pattern:"bastard*",category:"profanity",severity:"medium",replacement:"jerk"},{id:"en.profanity.cunt",pattern:"cunt*",category:"profanity",severity:"critical",replacement:"jerk"},{id:"en.profanity.dickhead",pattern:"dickhead*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.cocksucker",pattern:"cocksuck*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.wanker",pattern:"wank*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.twat",pattern:"twat*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.slut",pattern:"slut*",category:"profanity",severity:"high"},{id:"en.profanity.whore",pattern:"whore*",category:"profanity",severity:"high"},{id:"en.profanity.douche",pattern:"douche*",category:"profanity",severity:"medium",replacement:"jerk"},{id:"en.profanity.bollocks",pattern:"bollocks",category:"profanity",severity:"medium",replacement:"nonsense"},{id:"en.profanity.piss",pattern:"(piss|pisses|pissing)",category:"profanity",severity:"medium"},{id:"en.profanity.pissed",pattern:"pissed",category:"profanity",severity:"low",replacement:"annoyed"},{id:"en.profanity.damn",pattern:"(damn*|goddamn*)",category:"profanity",severity:"low",replacement:"darn"},{id:"en.profanity.crap",pattern:"crap*",category:"profanity",severity:"low",replacement:"junk"}],it=[...["nigger*","faggot*","kike*","wetback*","raghead*","towelhead*"].map(e=>({id:`en.hate.slur.${e.replace("*","")}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"en.hate.group-violence",pattern:"(jews|muslims|christians|blacks|whites|asians|mexicans|immigrants|gays|lesbians|trans|women|arabs|africans|hindus|sikhs|refugees) (should|must|need|deserve) (to)? (be)? (die|burn|hang|rot|killed|exterminated|gassed|eradicated)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],ot="(idiot*|moron*|stupid|dumb|loser*|worthless|pathetic|ugly|imbecile*|retard*|trash|garbage|scum|disgusting|failure|freak|clown)",st=[{id:"en.harassment.insult",pattern:`(you|u|ur|youre|yall) (are|re|r)? (such)? (a|an)? (so|fucking|complete|total|absolute)? ${ot}`,category:"harassment",severity:"medium",confidence:.8,label:"insult",replacement:"I disagree with you"},{id:"en.harassment.piece-of",pattern:"(you|u|ur|youre) (are|re|r)? (a)? piece of (shit|crap|garbage|trash)",category:"harassment",severity:"high",confidence:.85,label:"insult",replacement:"I disagree with you"},{id:"en.harassment.you-suck",pattern:"(you|u) (suck|stink)",category:"harassment",severity:"low",confidence:.7,label:"insult"},{id:"en.harassment.self-harm",pattern:"(kill|hang) (yourself|urself|yourselves)",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"en.harassment.kys",pattern:"kys",category:"harassment",severity:"critical",confidence:.8,label:"self-harm-incitement"},{id:"en.harassment.go-die",pattern:"go (die|rot)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"en.harassment.threat",pattern:"(i|ill|imma|im) (ll|will|am|m|gonna)? (going)? (to)? (kill|murder|hurt|stab|shoot) (you|u)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"en.harassment.nobody-likes",pattern:"(nobody|noone) (likes|loves|cares|wants) (about)? (you|u)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],se={language:"en",boundary:"word",rules:[...at,...it,...st],allowList:["shiitake","shitake"]};var ut=[{id:"hi-latn.profanity.behenchod",pattern:"(behenchod*|behanchod*|bahenchod*|bahanchod*|bhenchod*|bhanchod*|benchod*|bhenchud*|behenchood*|bhencho|behencho)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.madarchod",pattern:"(madarchod*|maderchod*|madharchod*|maadarchod*|madarchood*|madrchod*|maderjaat|madarjaat)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.betichod",pattern:"(betichod*|betichood*)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.beti-chod",pattern:"beti (chod*|chood*)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.chut",pattern:"(chut|choot|chuth|chooth)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.loda",pattern:"(loda|lauda|lavda|lawda|laude|lavde|lawde|laudu|lavdu|lund|lundd)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.lodu",pattern:"(lodu|lodoo|loduchand|lodus)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.bhosda",pattern:"(bhosd*|bhosad*|bhosid*|bhosri*|bhosdk)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.abbreviations",pattern:"(bsdk|bkl|mkc)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.chutiya",pattern:"(chutiya*|chutiye*|chutia*|chootiya*|chutya*|chutiye)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.gandu",pattern:"(gandu|gaandu|gandoo|gaandoo|gaand*)",category:"profanity",severity:"medium"},{id:"hi-latn.profanity.randi",pattern:"(randiya|randwa|randibaaz*|randibaz*|randikhana)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.harami",pattern:"(harami|haraami|haramkhor*|haraamkhor*|haramzad*|haraamzad*|haramjad*)",category:"profanity",severity:"medium"},{id:"hi-latn.profanity.bhadwa",pattern:"(bhadwa|bhadwe|bhadva|bhadve|bhadwi|bhadwaa)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.jhaatu",pattern:"(jhaat*|jhant*|jhaant*)",category:"profanity",severity:"medium"},{id:"hi-latn.profanity.kutiya",pattern:"(kutiya|kuttiya|kutiyaa)",category:"profanity",severity:"high"}],ct="(teri|tere|tera|tumhari|tumhara|tumhare|uski|uske|iski|apni)",Re="(maa|ma|mai|behen|bahen|behan|bahan|bhen|beti)",lt=[{id:"hi-latn.harassment.family-insult",pattern:`${ct} ${Re} (ka|ki|ke|ko) (bhosd*|bhosad*|chut|choot|lund|loda|lauda|lavda|lawda)`,category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"hi-latn.harassment.family-abuse",pattern:`${Re} (ko|ki)? (chod*|chud*|chood*)`,category:"harassment",severity:"high",confidence:.85,label:"insult"}],ue={language:"hi-Latn",boundary:"word",rules:[...ut,...lt],allowList:[]};var dt=[{id:"de.profanity.scheisse",pattern:"(scheiss*|scheis)",category:"profanity",severity:"medium",replacement:"Mist"},{id:"de.profanity.arsch",pattern:"arsch",category:"profanity",severity:"medium"},{id:"de.profanity.arschloch",pattern:"(arschloch*|arschloech*|arschgeige*|arschgesicht*|arschkriecher*|arschficker*)",category:"profanity",severity:"high"},{id:"de.profanity.fotze",pattern:"fotze*",category:"profanity",severity:"critical"},{id:"de.profanity.ficken",pattern:"(fick|ficke|fickt|ficken|fickst|fickte|ficktest|gefickt|ficker|fickers|fickdich)",category:"profanity",severity:"high"},{id:"de.profanity.wichser",pattern:"(wichser*|wichse|wichsen|wichst|wixer*|wixxer*)",category:"profanity",severity:"high"},{id:"de.profanity.hurensohn",pattern:"(hurensohn*|hurensoehne*|hurenkind*|hurenbock*)",category:"profanity",severity:"high"},{id:"de.profanity.hure",pattern:"(hure|huren)",category:"profanity",severity:"high"},{id:"de.profanity.schlampe",pattern:"(schlampe|schlampen)",category:"profanity",severity:"high"},{id:"de.profanity.miststueck",pattern:"(miststuck*|miststueck*|mistkerl*|mistsau)",category:"profanity",severity:"high"},{id:"de.profanity.verpiss",pattern:"verpiss*",category:"profanity",severity:"high"},{id:"de.profanity.leck-mich",pattern:"leck mich",category:"profanity",severity:"medium"},{id:"de.profanity.kacke",pattern:"(kacke|kack|kacken|kackbratze*|kackscheiss*)",category:"profanity",severity:"medium"},{id:"de.profanity.pisser",pattern:"(pisser|pissnelke*)",category:"profanity",severity:"medium"},{id:"de.profanity.dreck",pattern:"(drecksau*|dreckschwein*|drecksack*|dreckstuck*|dreckstueck*|drecksfotze*)",category:"profanity",severity:"high"},{id:"de.profanity.schwanzlutscher",pattern:"(schwanzlutscher*|pimmel|pimmelkopf*)",category:"profanity",severity:"high"}],ht=[...["(kanake*|kanacke*)","(neger|negers|negerin*)","schwuchtel*","(kummelturke*|kuemmeltuerke*)","judensau*"].map(e=>({id:`de.hate.slur.${e.replace(/[()*]/g,"").split("|")[0]}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"de.hate.group-violence",pattern:"(juden|muslime|moslems|christen|auslander|auslaender|fluchtlinge|fluechtlinge|migranten|asylanten|schwarze|turken|tuerken|araber|schwule|lesben|frauen|roma|sinti|kanaken) (sollten|sollen|mussen|muessen|gehoren|gehoeren|verdienen) (alle)? (es)? (zu)? (sterben|brennen|vergast|vernichtet|ausgerottet|erschossen|aufgehangt|aufgehaengt|abgeschlachtet|verbrannt|tot)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],Me="(idiot*|vollidiot*|depp*|trottel*|arschloch*|wichser*|dumm|dummkopf*|blod|bloed|behindert*|spast*|mongo|missgeburt*|versager*|loser*|penner*|hurensohn*|witzfigur*|lappen|opfer|abschaum|mull|muell|nichtsnutz*|hackfresse*|schwachkopf*|schwachmat*|pisser|bastard*|hund|schwein|sau|schlampe|fotze|hure|spasti)",De="(so|echt|total|voll|wirklich|einfach)? (ein|eine|einer|n)? (verdammter|verdammte|verdammtes|dummer|dumme|dummes|kleiner|kleine|kleines|elender|elendes|scheiss)?",ft=[{id:"de.harassment.insult",pattern:`du (bist)? ${De} ${Me}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"de.harassment.insult-formal",pattern:`(sie|ihr) (sind|seid) ${De} ${Me}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"de.harassment.self-harm",pattern:"(bring|bringt|bringen) (dich|euch|sich) (doch|endlich)? um",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"de.harassment.self-harm-hang",pattern:"(erhang|erhaeng|toete|tote) (dich|euch)",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"de.harassment.self-harm-hang-up",pattern:"(hang|haeng) (dich|euch) auf",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"de.harassment.go-die",pattern:"(geh|geht) (sterben|verrecken|krepieren)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"de.harassment.threat",pattern:"(ich|wir) (werde|werden|will|wollen)? (dich|euch) (umbringen|toten|toeten|abstechen|erschiessen|abknallen|kaltmachen|abmurksen)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"de.harassment.threat-bring-um",pattern:"(ich|wir) (bringe|bring|bringen) (dich|euch) um",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"de.harassment.nobody-likes",pattern:"(niemand|keiner) (mag|liebt|will|braucht) (dich|euch)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],ce={language:"de",boundary:"word",rules:[...dt,...ht,...ft],allowList:[]};var pt=[{id:"es.profanity.puta",pattern:"(puta|putas|putita*|putada*|putazo*|putear*|puteo|putero*)",category:"profanity",severity:"high"},{id:"es.profanity.puto",pattern:"(puto|putos)",category:"profanity",severity:"high"},{id:"es.profanity.abbreviations",pattern:"(hdp|hdlgp|ctm|ptm)",category:"profanity",severity:"high"},{id:"es.profanity.mierda",pattern:"mierda*",category:"profanity",severity:"medium",replacement:"rayos"},{id:"es.profanity.joder",pattern:"(joder|jodido|jodida|jodidos|jodidas|jodete|jodanse|jodan|jodiendo|jodio)",category:"profanity",severity:"medium",replacement:"caramba"},{id:"es.profanity.cabron",pattern:"(cabron|cabrona|cabrones|cabronas|cabronazo*)",category:"profanity",severity:"high"},{id:"es.profanity.pendejo",pattern:"(pendejo*|pendeja*)",category:"profanity",severity:"high"},{id:"es.profanity.gilipollas",pattern:"(gilipolla*|gilipollez)",category:"profanity",severity:"high"},{id:"es.profanity.chingar",pattern:"(chingar*|chingad*|chingue*|chinguen|chingon*|chinga)",category:"profanity",severity:"high"},{id:"es.profanity.verga",pattern:"(verga|vergas|vergazo*)",category:"profanity",severity:"high"},{id:"es.profanity.culo",pattern:"(culo|culos|culero*|culera*)",category:"profanity",severity:"medium"},{id:"es.profanity.cagar",pattern:"(cagar|cago|cagada*|cagon|cagona|cagando)",category:"profanity",severity:"medium"},{id:"es.profanity.malparido",pattern:"(malparid*|hijueputa*|hijoputa*|hijaputa*)",category:"profanity",severity:"high"},{id:"es.profanity.concha",pattern:"(conchetumare|conchatumadre|conchesumadre|conchasumadre)",category:"profanity",severity:"high"},{id:"es.profanity.carajo",pattern:"carajo",category:"profanity",severity:"low",replacement:"caramba"}],mt=[...["(maricon|maricones|mariconazo|marica|maricas)","(sudaca|sudacas)","(negrata|negratas)","(machorra|machorras)"].map(e=>({id:`es.hate.slur.${e.slice(1).split("|")[0]}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"es.hate.group-violence",pattern:"(judios|musulmanes|cristianos|negros|blancos|gitanos|inmigrantes|migrantes|refugiados|gays|maricones|lesbianas|trans|mujeres|moros|sudacas|indios|indigenas|arabes|africanos) (deberian|deben|merecen|tienen) (que)? (ser)? (morir|arder|exterminados|exterminadas|quemados|quemadas|eliminados|eliminadas|asesinados|asesinadas|colgados|gaseados|ahorcados)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],yt="(idiota*|imbecil*|estupido*|estupida*|tonto|tonta|inutil|basura|escoria|retrasado*|retrasada*|mongolo*|mongolic*|subnormal*|patetico*|patetica*|asqueroso*|asquerosa*|payaso*|perdedor*|fracasado*|fracasada*|pendejo*|pendeja*|cabron*|gilipollas|perra|zorra|puta)",gt=[{id:"es.harassment.insult",pattern:`(eres|sos) (un|una)? (puto|puta|pinche|maldito|maldita|completo|completa|gran|tremendo|tremenda)? ${yt}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"es.harassment.family",pattern:"(concha|chinga|puta) (de)? (tu|su) (madre|hermana|vieja)",category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"es.harassment.self-harm",pattern:"(matate|suicidate|ahorcate)",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"es.harassment.go-die",pattern:"(vete|andate|anda|ve) a (morir|morirte)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"es.harassment.wish-death",pattern:"ojala (que)? te (mueras|murieras|muera)",category:"harassment",severity:"high",confidence:.8,label:"hostility"},{id:"es.harassment.threat",pattern:"te (voy|vamos) a (matar|apunalar|disparar|reventar|partir)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"es.harassment.threat-short",pattern:"te (mato|matare)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"es.harassment.nobody-likes",pattern:"nadie te (quiere|soporta|aguanta|ama)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],le={language:"es",boundary:"word",rules:[...pt,...mt,...gt],allowList:[]};var vt=[{id:"fr.profanity.merde",pattern:"(merde*|merdique*|emmerd*)",category:"profanity",severity:"medium",replacement:"zut"},{id:"fr.profanity.putain",pattern:"(putain*|ptn)",category:"profanity",severity:"medium",replacement:"zut"},{id:"fr.profanity.pute",pattern:"(pute|putes)",category:"profanity",severity:"high"},{id:"fr.profanity.connard",pattern:"(connard*|connasse*|conasse*|conard*)",category:"profanity",severity:"high"},{id:"fr.profanity.salope",pattern:"(salope*|salaud*|salopard*)",category:"profanity",severity:"high"},{id:"fr.profanity.encule",pattern:"encul*",category:"profanity",severity:"high"},{id:"fr.profanity.niquer",pattern:"(nique|niquer|niquez|niques|niquee)",category:"profanity",severity:"high"},{id:"fr.profanity.couille",pattern:"(couille*|couillon*)",category:"profanity",severity:"medium"},{id:"fr.profanity.enfoire",pattern:"enfoire*",category:"profanity",severity:"high"},{id:"fr.profanity.batard",pattern:"batard*",category:"profanity",severity:"high"},{id:"fr.profanity.branleur",pattern:"(branleur*|branleuse*|branlette*)",category:"profanity",severity:"medium"},{id:"fr.profanity.pouffiasse",pattern:"(pouffiasse*|poufiasse*|petasse*)",category:"profanity",severity:"high"},{id:"fr.profanity.trou-du-cul",pattern:"trou (du|de) cul",category:"profanity",severity:"high"},{id:"fr.profanity.bordel",pattern:"bordel",category:"profanity",severity:"low"},{id:"fr.profanity.chier",pattern:"(chier|chiant|chiante|chiants|chiantes|chiasse)",category:"profanity",severity:"low"}],Et=[...["(bougnoul*|bougnoule*)","(youpin*|youtre*)","(negre|negres|negresse*)","bamboula*","(tafiole*|tarlouze*|tantouze*)"].map(e=>({id:`fr.hate.slur.${e.replace(/[()*]/g,"").split("|")[0]}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"fr.hate.group-violence",pattern:"(juifs|musulmans|chretiens|noirs|blancs|arabes|immigres|migrants|refugies|gays|homos|lesbiennes|trans|femmes|africains|asiatiques|roms|gitans) (doivent|devraient|meritent) (d|de)? (etre)? (mourir|crever|bruler|extermines|gazes|brules|tues|pendus|eradiques|massacres)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],bt="(idiot*|imbecile*|debile*|abruti*|cretin*|con|conne|connard*|connasse*|nul|nulle|minable*|pathetique*|attarde*|mongol|mongole|batard*|salope|ordure*|merde|dechet*|rate|ratee|loser*|bouffon*|clown*|stupide*|chienne|grosse|moche|pute)",wt=[{id:"fr.harassment.insult",pattern:`(tu|t|vous) (es|etes) (vraiment|trop|qu)? (un|une)? (sale|gros|grosse|pauvre|petit|petite|vrai|vraie)? ${bt}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"fr.harassment.sale",pattern:"(espece|sale) (de)? (con|conne|connard*|connasse*|pute|chienne|batard*|merde|ordure*|race|arabe|noir|juif)",category:"harassment",severity:"high",confidence:.8,label:"insult"},{id:"fr.harassment.family",pattern:"(nique|niquer|baise) (ta|sa|vos|votre) (mere|race|soeur|famille|daronne)",category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"fr.harassment.go-away",pattern:"(va|allez) (te|vous) faire (foutre|enculer|niquer|voir)",category:"harassment",severity:"high",confidence:.8,label:"hostility"},{id:"fr.harassment.shut-up",pattern:"ta gueule",category:"harassment",severity:"low",confidence:.7,label:"hostility"},{id:"fr.harassment.self-harm",pattern:"(va|vas|allez) (te|vous) (pendre|suicider|tuer)",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"fr.harassment.self-harm-imperative",pattern:"(suicide|tue|pends) (toi)",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"fr.harassment.go-die",pattern:"(va|vas|allez) (crever|mourir)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"fr.harassment.threat",pattern:"(je|j) (vais|v)? (te|vous|t) (tuer|buter|planter|defoncer|tabasser|egorger|tue|bute|plante|defonce|egorge)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"fr.harassment.nobody-likes",pattern:"personne ne (t|te|vous) (aime|supporte|veut|apprecie)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],de={language:"fr",boundary:"word",rules:[...vt,...Et,...wt],allowList:[]};var kt=[{id:"hi.profanity.madarchod",pattern:"(\u092E\u093E\u0926\u0930\u091A\u094B\u0926*|\u092E\u093E\u0926\u0930\u091A\u094C\u0926*|\u092E\u093E\u0926\u0930\u091A\u094B\u0924|\u092E\u093E\u0926\u0930\u091C\u093E\u0924|\u092E\u093E\u0926\u0930\u091C\u093C\u093E\u0924)",category:"profanity",severity:"high"},{id:"hi.profanity.behenchod",pattern:"(\u092C\u0939\u0928\u091A\u094B\u0926*|\u092C\u0939\u0947\u0928\u091A\u094B\u0926*|\u092C\u0939\u093F\u0928\u091A\u094B\u0926*|\u092D\u0947\u0928\u091A\u094B\u0926*|\u092D\u0948\u0928\u091A\u094B\u0926*|\u092C\u0939\u0928\u091A\u094C\u0926*|\u092D\u0948\u0902\u091A\u094B\u0926*)",category:"profanity",severity:"high"},{id:"hi.profanity.betichod",pattern:"(\u092C\u0947\u091F\u0940\u091A\u094B\u0926*|\u092C\u0947\u091F\u093F\u091A\u094B\u0926*)",category:"profanity",severity:"high"},{id:"hi.profanity.chod",pattern:"(\u091A\u094B\u0926*|\u091A\u0941\u0926*)",category:"profanity",severity:"high"},{id:"hi.profanity.chutiya",pattern:"(\u091A\u0942\u0924\u093F\u092F\u093E*|\u091A\u0941\u0924\u093F\u092F\u093E*|\u091A\u0942\u0924\u093F\u092F\u0947*|\u091A\u0941\u0924\u093F\u092F\u0947*|\u091A\u0941\u0924\u094D\u092F\u093E*|\u091A\u0942\u0924\u094D\u092F\u093E*)",category:"profanity",severity:"high"},{id:"hi.profanity.chut",pattern:"(\u091A\u0942\u0924|\u091A\u0941\u0924)",category:"profanity",severity:"high"},{id:"hi.profanity.lund",pattern:"(\u0932\u0902\u0921|\u0932\u0923\u094D\u0921|\u0932\u0928\u094D\u0921|\u0932\u094C\u0921\u093C\u093E|\u0932\u094C\u0921\u093E|\u0932\u094C\u0921\u093C\u0947|\u0932\u094C\u0921\u0947|\u0932\u094B\u0921\u093C\u093E|\u0932\u094B\u0921\u093C\u0947|\u0932\u0935\u0921\u093C\u093E|\u0932\u0935\u0921\u093E|\u0932\u0935\u0921\u093C\u0947|\u0932\u094C\u0921\u093C\u0942|\u0932\u094B\u0921\u093C\u0942|\u0932\u094B\u0921\u0942)",category:"profanity",severity:"high"},{id:"hi.profanity.bhosda",pattern:"(\u092D\u094B\u0938\u0921*|\u092D\u094B\u0938\u0930\u0940*)",category:"profanity",severity:"high"},{id:"hi.profanity.gaandu",pattern:"(\u0917\u093E\u0902\u0921|\u0917\u093E\u0902\u0921\u0942|\u0917\u093E\u0902\u0921\u0941|\u0917\u093E\u0923\u094D\u0921\u0942|\u0917\u093E\u0928\u094D\u0921\u0942|\u0917\u093E\u0923\u094D\u0921|\u0917\u093E\u0928\u094D\u0921|\u0917\u093E\u0902\u0921\u092B\u091F*)",category:"profanity",severity:"medium"},{id:"hi.profanity.harami",pattern:"(\u0939\u0930\u093E\u092E\u0940|\u0939\u0930\u093E\u092E\u091C\u093C\u093E\u0926*|\u0939\u0930\u093E\u092E\u091C\u093E\u0926*|\u0939\u0930\u093E\u092E\u0916\u094B\u0930*|\u0939\u0930\u093E\u092E\u0916\u093C\u094B\u0930*)",category:"profanity",severity:"medium"},{id:"hi.profanity.randi",pattern:"(\u0930\u0902\u0921\u0940|\u0930\u0923\u094D\u0921\u0940|\u0930\u0928\u094D\u0921\u0940|\u0930\u0902\u0921\u093F\u092F\u094B\u0902|\u0930\u0902\u0921\u093F\u092F\u093E|\u0930\u0902\u0921\u0940\u092C\u093E\u091C*|\u0930\u0902\u0921\u0935\u093E|\u0930\u093E\u0902\u0921)",category:"profanity",severity:"high"},{id:"hi.profanity.bhadwa",pattern:"(\u092D\u0921\u093C\u0935\u093E|\u092D\u0921\u093C\u0935\u0947|\u092D\u0921\u093C\u0935\u0940|\u092D\u0921\u0935\u093E|\u092D\u0921\u0935\u0947|\u092D\u0921\u0935\u0940|\u092D\u0921\u093C\u0941\u0906|\u092D\u0921\u0941\u0906)",category:"profanity",severity:"high"},{id:"hi.profanity.jhaat",pattern:"(\u091D\u093E\u091F|\u091D\u093E\u0902\u091F|\u091D\u093E\u091F\u0942|\u091D\u093E\u0902\u091F\u0942)",category:"profanity",severity:"medium"},{id:"hi.profanity.kutiya",pattern:"(\u0915\u0941\u0924\u093F\u092F\u093E|\u0915\u0941\u0924\u094D\u0924\u093F\u092F\u093E)",category:"profanity",severity:"high"}],Le="(\u092E\u0941\u0938\u0932\u092E\u093E\u0928\u094B\u0902|\u092E\u0941\u0938\u0932\u092E\u093E\u0928|\u092E\u0941\u0938\u0932\u092E\u093E\u0928\u094B|\u0939\u093F\u0902\u0926\u0941\u0913\u0902|\u0939\u093F\u0928\u094D\u0926\u0941\u0913\u0902|\u0939\u093F\u0902\u0926\u0941\u0913|\u0938\u093F\u0916\u094B\u0902|\u0908\u0938\u093E\u0907\u092F\u094B\u0902|\u0926\u0932\u093F\u0924\u094B\u0902|\u0915\u091F\u0941\u0913\u0902|\u092E\u0941\u0932\u094D\u0932\u094B\u0902|\u092C\u093F\u0939\u093E\u0930\u093F\u092F\u094B\u0902|\u0914\u0930\u0924\u094B\u0902)",Tt=[{id:"hi.hate.slur.katua",pattern:"(\u0915\u091F\u0941\u0906|\u0915\u091F\u0941\u090F|\u0915\u091F\u0941\u0913\u0902)",category:"hate",severity:"critical",confidence:.9,label:"slur"},{id:"hi.hate.group-violence",pattern:`${Le} (\u0915\u094B)? (\u092E\u093E\u0930|\u0915\u093E\u091F|\u091C\u0932\u093E|\u0916\u0924\u094D\u092E|\u0916\u093C\u0924\u094D\u092E|\u092E\u093F\u091F\u093E|\u0938\u093E\u092B) (\u0915\u0930)? (\u0926\u094B|\u0921\u093E\u0932\u094B|\u0926\u0947\u0928\u093E)`,category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"},{id:"hi.hate.group-violence-imperative",pattern:`${Le} (\u0915\u094B)? (\u092E\u093E\u0930\u094B|\u0915\u093E\u091F\u094B|\u091C\u0932\u093E\u0913|\u092E\u093F\u091F\u093E\u0913)`,category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],Fe="(\u0924\u0942|\u0924\u0941\u092E|\u0906\u092A)",Ie="(\u090F\u0915)? (\u092C\u0939\u0941\u0924|\u092A\u0942\u0930\u093E|\u092A\u0942\u0930\u0940|\u0928\u093F\u0930\u093E|\u0938\u092C\u0938\u0947|\u090F\u0915\u0926\u092E)? (\u092C\u0921\u093C\u093E|\u092C\u0921\u093C\u0940|\u092C\u0921\u093E|\u092C\u0921\u0940)?",xt="(\u0915\u0941\u0924\u094D\u0924\u093E|\u0915\u0941\u0924\u094D\u0924\u0947|\u0915\u0941\u0924\u094D\u0924\u0940|\u0917\u0927\u093E|\u0917\u0927\u0947|\u0909\u0932\u094D\u0932\u0942|\u0938\u0942\u0905\u0930|\u0938\u0941\u0905\u0930)",St="(\u092C\u0947\u0935\u0915\u0942\u092B\u093C|\u092C\u0947\u0935\u0915\u0942\u092B|\u092E\u0942\u0930\u094D\u0916|\u092E\u0942\u0930\u0916|\u0915\u092E\u0940\u0928\u093E|\u0915\u092E\u0940\u0928\u0947|\u0915\u092E\u0940\u0928\u0940|\u0918\u091F\u093F\u092F\u093E|\u0928\u093E\u0932\u093E\u092F\u0915|\u0928\u093F\u0915\u092E\u094D\u092E\u093E|\u0928\u093F\u0915\u092E\u094D\u092E\u0947|\u0928\u093F\u0915\u092E\u094D\u092E\u0940|\u0939\u0930\u093E\u092E\u0940|\u091C\u093E\u0939\u093F\u0932|\u0917\u0902\u0935\u093E\u0930|\u091A\u0942\u0924\u093F\u092F\u093E|\u091A\u0941\u0924\u093F\u092F\u093E|\u0928\u0940\u091A|\u0939\u0930\u093E\u092E\u0916\u094B\u0930|\u0915\u0941\u0924\u093F\u092F\u093E)",Ct=[{id:"hi.harassment.family-insult",pattern:"(\u0924\u0947\u0930\u0940|\u0924\u0947\u0930\u0947|\u0924\u0947\u0930\u093E|\u0924\u0941\u092E\u094D\u0939\u093E\u0930\u0940|\u0924\u0941\u092E\u094D\u0939\u093E\u0930\u0947|\u0909\u0938\u0915\u0940|\u0909\u0938\u0915\u0947|\u0907\u0938\u0915\u0940) (\u092E\u093E\u0902|\u092E\u093E|\u092E\u093E\u0908|\u092E\u0948\u092F\u093E|\u092C\u0939\u0928|\u092C\u0939\u093F\u0928|\u092C\u0947\u0939\u0928|\u092C\u0947\u091F\u0940) (\u0915\u093E|\u0915\u0940|\u0915\u0947|\u0915\u094B) (\u092D\u094B\u0938\u0921\u093C\u093E|\u092D\u094B\u0938\u0921\u093E|\u092D\u094B\u0938\u0921\u093C\u0940|\u092D\u094B\u0938\u0921\u0940|\u091A\u0942\u0924|\u091A\u0941\u0924|\u0932\u0902\u0921|\u0932\u094C\u0921\u093C\u093E|\u0932\u094C\u0921\u093E)",category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"hi.harassment.family-abuse",pattern:"(\u092E\u093E\u0902|\u092C\u0939\u0928|\u092C\u0939\u093F\u0928|\u092C\u0947\u091F\u0940) (\u0915\u094B|\u0915\u0940)? (\u091A\u094B\u0926*|\u091A\u0941\u0926*)",category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"hi.harassment.insult",pattern:`${Fe} ${Ie} ${St}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"hi.harassment.insult-animal",pattern:`${Fe} ${Ie} ${xt} (\u0939\u0948|\u0939\u094B|\u0939\u0948\u0902)`,category:"harassment",severity:"medium",confidence:.75,label:"insult"},{id:"hi.harassment.self-harm",pattern:"(\u0916\u0941\u0926\u0915\u0941\u0936\u0940|\u0916\u093C\u0941\u0926\u0915\u0941\u0936\u0940|\u0906\u0924\u094D\u092E\u0939\u0924\u094D\u092F\u093E) (\u0915\u0930|\u0915\u0930\u094B) (\u0932\u0947|\u0932\u094B)",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"hi.harassment.self-harm-joined",pattern:"(\u0916\u0941\u0926\u0915\u0941\u0936\u0940|\u0916\u093C\u0941\u0926\u0915\u0941\u0936\u0940|\u0906\u0924\u094D\u092E\u0939\u0924\u094D\u092F\u093E) (\u0915\u0930\u0932\u0947|\u0915\u0930\u0932\u094B)",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"hi.harassment.self-harm-hang",pattern:"(\u092B\u093E\u0902\u0938\u0940|\u092B\u0902\u0926\u093E) (\u0932\u0917\u093E|\u0932\u0917\u093E\u0915\u0930) (\u0932\u0947|\u0932\u094B|\u092E\u0930|\u092E\u0930\u094B)",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"hi.harassment.go-die",pattern:"(\u092E\u0930|\u0921\u0942\u092C) (\u091C\u093E|\u091C\u093E\u0913|\u092E\u0930|\u092E\u0930\u094B)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"hi.harassment.threat",pattern:"(\u0924\u0941\u091D\u0947|\u0924\u0941\u092E\u094D\u0939\u0947\u0902|\u0924\u0941\u092E\u094D\u0939\u0947|\u0924\u0941\u092E\u0915\u094B|\u0924\u0941\u091D\u0915\u094B) (\u091C\u093E\u0928)? (\u0938\u0947)? (\u092E\u093E\u0930|\u0915\u093E\u091F|\u0916\u0924\u094D\u092E|\u0916\u093C\u0924\u094D\u092E|\u091C\u0932\u093E) (\u0915\u0930)? (\u0926\u0942\u0902\u0917\u093E|\u0926\u0942\u0902\u0917\u0940|\u0921\u093E\u0932\u0942\u0902\u0917\u093E|\u0921\u093E\u0932\u0942\u0902\u0917\u0940|\u0926\u0947\u0902\u0917\u0947|\u0921\u093E\u0932\u0947\u0902\u0917\u0947)",category:"harassment",severity:"high",confidence:.7,label:"threat"}],he={language:"hi",boundary:"word",rules:[...kt,...Tt,...Ct],allowList:[]};var At=[{id:"pt.profanity.porra",pattern:"(porra|porras)",category:"profanity",severity:"medium"},{id:"pt.profanity.caralho",pattern:"(caralho*|caraio|krl|crl)",category:"profanity",severity:"high"},{id:"pt.profanity.foder",pattern:"(foda|fodas|fodase|fodasse|foder|fodido*|fodida*|fodendo|fode|fodeu|fodam)",category:"profanity",severity:"high"},{id:"pt.profanity.puta",pattern:"(puta|putas|putaria*|putinha*)",category:"profanity",severity:"high"},{id:"pt.profanity.puto",pattern:"(puto|putos)",category:"profanity",severity:"medium"},{id:"pt.profanity.abbreviations",pattern:"(fdp|vtnc|vsf|vsfd|pqp|tnc)",category:"profanity",severity:"high"},{id:"pt.profanity.merda",pattern:"merda*",category:"profanity",severity:"medium"},{id:"pt.profanity.buceta",pattern:"(buceta*|boceta*|xoxota*|xereca*)",category:"profanity",severity:"high"},{id:"pt.profanity.cu",pattern:"(no|do|teu|seu|meu|nosso) cu",category:"profanity",severity:"medium"},{id:"pt.profanity.cuzao",pattern:"(cuzao|cuzinho|cuzona)",category:"profanity",severity:"high"},{id:"pt.profanity.arrombado",pattern:"(arrombad*)",category:"profanity",severity:"high"},{id:"pt.profanity.piroca",pattern:"(piroca*|pirocudo*)",category:"profanity",severity:"high"},{id:"pt.profanity.cacete",pattern:"cacete*",category:"profanity",severity:"medium"},{id:"pt.profanity.bosta",pattern:"bosta*",category:"profanity",severity:"medium"},{id:"pt.profanity.vadia",pattern:"(vadia|vadias)",category:"profanity",severity:"high"},{id:"pt.profanity.desgracado",pattern:"(desgracad*)",category:"profanity",severity:"medium"}],Rt=[...["(viado|viados|viadinho*|viadao)","(sapatao|sapatoes|sapatona*)","(traveco|travecos)"].map(e=>({id:`pt.hate.slur.${e.replace(/[()*]/g,"").split("|")[0]}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"pt.hate.group-violence",pattern:"(judeus|muculmanos|cristaos|negros|pretos|brancos|gays|viados|lesbicas|trans|mulheres|imigrantes|nordestinos|indios|refugiados|ciganos|baianos|africanos|arabes) (deveriam|devem|merecem|tem|teem) (que|de)? (ser)? (morrer|queimar|exterminados|exterminadas|mortos|mortas|queimados|queimadas|eliminados|eliminadas|enforcados|fuzilados)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],Mt="(idiota*|imbecil*|burro|burra|estupido*|estupida*|otario*|otaria*|babaca*|lixo|inutil|retardado*|retardada*|mongoloide*|debil|corno*|vagabundo*|vagabunda*|nojento*|nojenta*|patetico*|patetica*|fracassado*|fracassada*|palhaco*|escroto*|escrota*|merda|arrombado*|arrombada*|desgracado*|desgracada*|vadia|puta|piranha|cachorra)",Dt=[{id:"pt.harassment.insult",pattern:`(voce|vc|tu) (e|eh|es)? (um|uma)? (grande|completo|completa|puta|baita|bela|belo|maior)? ${Mt}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"pt.harassment.self-harm",pattern:"(vai|va) se (matar|enforcar|suicidar)",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"pt.harassment.self-harm-imperative",pattern:"(mate|enforque|suicide) se",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"pt.harassment.go-die",pattern:"(morre|morra|morram) (logo|desgracado|desgracada|lixo|seu|sua|maldito|maldita)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"pt.harassment.threat",pattern:"(vou|vamos|irei) te (matar|esfaquear|furar|apagar|quebrar|encher)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"pt.harassment.threat-short",pattern:"te (mato|matarei)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"pt.harassment.nobody-likes",pattern:"ninguem (gosta|liga|quer|suporta|aguenta) (de)? (voce|vc|ti)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],fe={language:"pt",boundary:"word",rules:[...At,...Rt,...Dt],allowList:[]};var pe={allow:0,mask:1,suggest:2,warn:3,block:4},W={low:0,medium:1,high:2,critical:3},P=["profanity","hate","harassment","custom"];var Lt={direct:1,quoted:.5,mention:.4},Ft=new Set(["word","words","term","slur","phrase","say","said","saying","says","spell","spelled","called","calling","means","meaning","define","definition","using","use"]),It=[['"','"'],["\u201C","\u201D"],["\u2018","\u2019"],["\xAB","\xBB"],["\u300C","\u300D"]];function Bt(e){let t=[];for(let[r,n]of It){let a=0;for(;a<e.length;){let i=e.indexOf(r,a);if(i===-1)break;let o=e.indexOf(n,i+1);if(o===-1)break;let c=e.indexOf(`
|
|
2
|
-
`,i);if(c!==-1&&c<o){a=c+1;continue}t.push([i+1,o]),a=o+1}}return t}function Ot(e,t,r){if(e.tokenIndex!==void 0)for(let n=1;n<=2;n++){let a=t[e.tokenIndex-n];if(a&&Ft.has(a.value))return"mention"}for(let[n,a]of r)if(e.start>=n&&e.end<=a)return"quoted";return"direct"}var jt=class{constructor(e){this.onListenerError=e,this.handlers=new Map}on(e,t){let r=this.handlers.get(e);return r||(r=new Set,this.handlers.set(e,r)),r.add(t),()=>{r.delete(t)}}emit(e,t){let r=this.handlers.get(e);if(r)for(let n of[...r])try{n(t)}catch(a){this.onListenerError&&this.onListenerError(a,e)}}clear(){this.handlers.clear()}},Nt=new RegExp("^[\u200B-\u200D\u2060\uFEFF\xAD\u180E]$"),_t=/\p{M}/u;function $t(e){let t=e.codePointAt(0);return t>=2304&&t<=3583}var zt={\u00DF:"ss","\u0901":"\u0902"},Pt={\u0430:"a",\u0432:"b",\u0435:"e",\u0451:"e",\u043A:"k",\u043C:"m",\u043D:"h",\u043E:"o",\u0440:"p",\u0441:"c",\u0442:"t",\u0443:"y",\u0445:"x",\u0455:"s",\u0456:"i",\u0457:"i",\u0458:"j",\u04BB:"h","\u0501":"d","\u051B":"q","\u051D":"w",\u04AF:"y",\u03B1:"a",\u03B2:"b",\u03B5:"e",\u03B7:"n",\u03B9:"i",\u03BA:"k",\u03BD:"v",\u03BF:"o",\u03C1:"p",\u03C4:"t",\u03C5:"u",\u03C7:"x",\u03C9:"w"},Pe={"@":"a",4:"a",$:"s",5:"s",0:"o",1:"i","!":"i","|":"i",3:"e","\u20AC":"e",7:"t"},me=new Map;function qe(e){let t=me.get(e);if(t!==void 0)return t;let r;if(Nt.test(e))r="";else{r="";for(let n of e.toLowerCase().normalize("NFKD")){if(_t.test(n)&&!$t(n))continue;let a=n.toLowerCase();r+=zt[a]??Pt[a]??a}}return me.size<1e4&&me.set(e,r),r}function He(e){let t="",r=[],n=[],a=0;for(;a<e.length;){let i=e.codePointAt(a),o=String.fromCodePoint(i),c=a+o.length,u=qe(o);for(let h=0;h<u.length;h++)r.push(a),n.push(c);t+=u,a=c}return{text:t,starts:r,ends:n}}function G(e){return Ue(He(e).text)}var qt=/\p{L}/u;function Ue(e){if(!qt.test(e))return e;let t="";for(let r of e)t+=Pe[r]??r;return t}function Ke(e){let t=[];for(let r of e){let n=t[t.length-1];n&&n[0]===r?n[1]++:t.push([r,1])}return t}function Ht(e){let t="";for(let[r]of e)t+=r;return t}function we(e,t){let r=t.runs;if(t.prefix?e.length<r.length:e.length!==r.length)return!1;for(let n=0;n<r.length;n++){let a=e[n],i=r[n];if(a[0]!==i[0]||a[1]<i[1])return!1}return!0}var N=class extends Error{constructor(){super(...arguments),this.name="PatternError"}};function Ut(e,t){let r=e.endsWith("*"),n=G(r?e.slice(0,-1):e);if(!n||/\s/.test(n))throw new N(`Invalid token "${e}" in pattern "${t}"`);let a=Ke(n);return{value:n,prefix:r,runs:a,key:Ht(a)}}function Kt(e){let t=e.trim().split(/\s+/).filter(Boolean);if(t.length===0)throw new N("Pattern must not be empty");return t.map((r,n)=>{let a=r,i=a.endsWith("?");if(i&&(a=a.slice(0,-1)),i&&n===0)throw new N(`First token cannot be optional in "${e}"`);if(a.startsWith("(")){if(!a.endsWith(")"))throw new N(`Unclosed group "${r}" in "${e}"`);a=a.slice(1,-1)}return{alternatives:a.split("|").map(c=>Ut(c,e)),optional:i}})}var Ve={custom:40,hate:30,harassment:20,profanity:10},Vt=new Set(["profanity","hate","harassment","custom"]),Wt=new Set(["low","medium","high","critical"]);function Gt(e,t="word"){if(!e||typeof e.id!="string"||e.id.length===0)throw new TypeError("Rule requires a non-empty id");if(typeof e.pattern!="string")throw new TypeError(`Rule "${e.id}" requires a pattern`);if(!Vt.has(e.category))throw new TypeError(`Rule "${e.id}" has unknown category "${String(e.category)}"`);if(e.severity!==void 0&&!Wt.has(e.severity))throw new TypeError(`Rule "${e.id}" has unknown severity "${String(e.severity)}"`);let r=e.confidence??1;if(!(r>=0&&r<=1))throw new RangeError(`Rule "${e.id}" confidence must be within [0, 1]`);let n;try{n=Kt(e.pattern)}catch(a){throw a instanceof N?new N(`Rule "${e.id}": ${a.message}`):a}if(t==="substring"&&n.length!==1)throw new N(`Rule "${e.id}": substring packs support single-token patterns only`);return{id:e.id,category:e.category,severity:e.severity??"medium",confidence:r,priority:e.priority??Ve[e.category],replacement:e.replacement,label:e.label,boundary:t,elements:n}}var Yt=class{constructor(e){this.exact=new Map,this.prefix=new Map,this.substring=[];for(let t of e){if(t.boundary==="substring"){this.substring.push(t);continue}for(let r of t.elements[0].alternatives){let n=r.prefix?this.prefix:this.exact,a=r.prefix?r.key[0]:r.key,i=n.get(a);i?i.push({rule:t,alt:r}):n.set(a,[{rule:t,alt:r}])}}}candidates(e,t){let r=[];for(let n of this.exact.get(t)??[])we(e,n.alt)&&r.push(n);for(let n of this.prefix.get(t[0]??"")??[])we(e,n.alt)&&r.push(n);return r}get substringRules(){return this.substring}};function Be(e,t){let r=Ke(e.value),n="";for(let[a]of r)n+=a;return{runs:r,key:n,blocked:e.masked||t.has(e.value)}}function Xt(e,t){return t.blocked?!1:e.alternatives.some(r=>we(t.runs,r))}function ke(e,t,r,n){if(t===e.length)return n-1;let a=e[t],i=-1;return n<r.length&&Xt(a,r[n])&&(i=ke(e,t+1,r,n+1)),a.optional&&(i=Math.max(i,ke(e,t+1,r,n))),i}function Qt(e,t){let{tokens:r,spaced:n,allowList:a,normalized:i}=t,o=r.map(m=>Be(m,a)),c=[],u=new Set,h=m=>{let b=`${m.rule.id}:${m.start}:${m.end}`;u.has(b)||(u.add(b),c.push(m))};for(let m=0;m<r.length;m++){let b=o[m];if(b.blocked)continue;let T=new Set;for(let{rule:S}of e.candidates(b.runs,b.key)){if(T.has(S.id))continue;T.add(S.id);let B=ke(S.elements,1,o,m+1);B<m||h({start:r[m].start,end:r[B].end,rule:S,confidence:S.confidence,tokenIndex:m})}}for(let m of n){let b=Be(m,a);if(!b.blocked)for(let{rule:T}of e.candidates(b.runs,b.key))T.elements.length===1&&h({start:m.start,end:m.end,rule:T,confidence:T.confidence,tokenIndex:m.firstIndex})}let E=i.text;for(let m of e.substringRules)for(let b of m.elements[0].alternatives)for(let T=E.indexOf(b.value);T!==-1;T=E.indexOf(b.value,T+1)){let S=T+b.value.length;h({start:i.starts[T],end:i.ends[S-1],rule:m,confidence:m.confidence})}return c}var Zt=new Set(["allow","mask","suggest","warn","block"]);function Te(e){if(!Zt.has(e))throw new TypeError(`Unknown moderation action "${String(e)}"`)}function ye(e,t){let r=new Set(t),n=(a,i)=>({enabled:r.has(a),...i});return{profanity:n("profanity",{action:e,minConfidence:0,minSeverity:"medium"}),custom:n("custom",{action:e,minConfidence:0,minSeverity:"low"}),hate:n("hate",{action:e,minConfidence:.6,minSeverity:"low"}),harassment:n("harassment",{action:e==="mask"?"warn":e,minConfidence:.6,minSeverity:"low"})}}function ge(e,t){let r={...e};if(!t)return r;for(let n of P){let a=t[n];if(a){if(a.action!==void 0&&Te(a.action),a.minConfidence!==void 0&&!(a.minConfidence>=0&&a.minConfidence<=1))throw new RangeError(`minConfidence for "${n}" must be within [0, 1]`);if(a.minSeverity!==void 0&&!(a.minSeverity in W))throw new TypeError(`Unknown severity "${String(a.minSeverity)}"`);r[n]={...r[n],...Jt(a)}}}return r}function Jt(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function er(e,t,r){return!e.enabled||W[t]<W[e.minSeverity]?{keep:!1,action:"allow",requiresReview:!1}:r<e.minConfidence?{keep:!0,action:"allow",requiresReview:!0}:{keep:!0,action:e.action,requiresReview:!1}}function tr(e){let t="allow";for(let r of e)pe[r]>pe[t]&&(t=r);return t}function rr(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function nr(e,t={}){let r=Math.max(0,t.debounceMs??0),n=0,a,i,o,c=()=>{n++,i!==void 0&&clearTimeout(i),i=void 0,o?.(void 0),o=void 0,a?.abort(),a=void 0};return{moderate(u){c();let h=n;return new Promise((E,m)=>{o=E;let b=()=>{i=void 0;let T=new AbortController;a=T,e(u,{signal:T.signal}).then(S=>{h===n&&(o=void 0,a=void 0,E(S))},S=>{h===n&&(o=void 0,a=void 0,rr(S)?E(void 0):m(S))})};r>0?i=setTimeout(b,r):b()})},cancel:c}}var Oe=new Set(["*","!","|"]),ar=new Set([" ",".","-","_"]),je=new Map;function ir(e){let t=je.get(e);if(!t){let r=e.replace(/[\\\]^-]/g,"\\$&");t=new RegExp(`[\\p{L}\\p{M}\\p{N}@$!|*\u20AC${r}]+`,"gu"),je.set(e,t)}return t}function or(e,t="*"){let{text:r,starts:n,ends:a}=e,i=[],o=ir(t);o.lastIndex=0;for(let c=o.exec(r);c!==null;c=o.exec(r)){let u=c.index,h=c.index+c[0].length;for(;u<h&&Oe.has(r[u]);)u++;for(;h>u&&Oe.has(r[h-1]);)h--;if(u===h)continue;let E=r.slice(u,h);i.push({start:n[u],end:a[h-1],nStart:u,nEnd:h,value:Ue(E),masked:E.includes(t),firstIndex:i.length})}return i}function sr(e,t){let r=[],n=0;for(;n<e.length;){let a=n;for(;a+1<e.length&&e[a].value.length===1&&e[a+1].value.length===1&&e[a+1].nStart-e[a].nEnd===1&&ar.has(t[e[a].nEnd]);)a++;if(a-n+1>=3){let i=e.slice(n,a+1);r.push({start:i[0].start,end:i[i.length-1].end,nStart:i[0].nStart,nEnd:i[i.length-1].nEnd,value:i.map(o=>o.value).join(""),masked:i.some(o=>o.masked),firstIndex:n}),n=a+1}else n++}return r}var ur=new RegExp("[\\p{L}\\p{N}@$!|\u20AC]","u"),cr=/\p{M}/u,lr=new Set(["a","e","i","o","u"]);function dr(e){return ur.test(e)}function hr(e){let t=[];for(let r of e)cr.test(r)&&t.length>0?t[t.length-1]+=r:t.push(r);return t}function Ne(e,t="vowels",r="*"){if(typeof t=="function")return t(e);let n=hr(e),a=n.map((u,h)=>dr(Array.from(u)[0])?h:-1).filter(u=>u>=0);if(a.length===0)return e;let i=n.slice(),o=a[0],c=a[a.length-1];if(t==="full"){for(let u of a)i[u]=r;return i.join("")}if(t==="vowels"){let u=0;for(let h of a){if(h===o)continue;let E=qe(Array.from(n[h])[0]);lr.has(Pe[E]??E)&&(i[h]=r,u++)}if(u>0)return i.join("")}for(let u of a)u!==o&&(u===c&&a.length>2||(i[u]=r));return i.join("")}function fr(e,t){let r=e.replace(/[^\p{L}]/gu,"");if(r.length>1&&r===r.toUpperCase()&&r!==r.toLowerCase())return t.toUpperCase();let n=r[0];return n&&n!==n.toLowerCase()?t.charAt(0).toUpperCase()+t.slice(1):t}function q(e,t){let r=[...t].sort((i,o)=>i.start-o.start);for(let i=1;i<r.length;i++)if(r[i].start<r[i-1].end)throw new RangeError("Edits must not overlap");let n="",a=0;for(let i of r)n+=e.slice(a,i.start)+i.replacement,a=i.end;return n+=e.slice(a),{text:n,mapping:pr(r,e.length,n.length)}}function pr(e,t,r){let n=Object.freeze(e.map(i=>Object.freeze({...i}))),a=(i,o)=>Math.min(Math.max(0,Math.trunc(i)),o);return{edits:n,toTransformed(i){let o=a(i,t),c=0;for(let u of n){if(o<=u.start)return o+c;if(o<u.end)return u.start+c+Math.min(o-u.start,u.replacement.length);c+=u.replacement.length-(u.end-u.start)}return o+c},toOriginal(i){let o=a(i,r),c=0;for(let u of n){let h=u.start+c,E=h+u.replacement.length;if(o<=h)return o-c;if(o<E)return u.start+Math.min(o-h,u.end-u.start);c+=u.replacement.length-(u.end-u.start)}return o-c}}}var ve={en:se,"hi-latn":ue,hi:he,es:le,fr:de,de:ce,pt:fe},_e={en:["en","hi-latn"],hi:["hi","hi-latn"]};function mr(e,t){let r=e.toLowerCase();return(t??(ve[r]&&!_e[r]?[r]:_e[r.split("-")[0]]??[e])).map(a=>{let i=a.toLowerCase(),o=ve[i]??ve[i.split("-")[0]];if(!o)throw new Error(`No built-in dictionary pack for language "${a}". Pass one via the \`packs\` option.`);return o})}function Ee(e){return e?.reason!==void 0?e.reason:new DOMException("The operation was aborted.","AbortError")}function be(e){return Math.round(e*1e4)/1e4}function $e(e){return Math.min(1,Math.max(0,e))}var ze=new Set(P);function Y(e={}){let t=e.mode??"mask";Te(t);let r=e.language??"en",n=e.categories??P;for(let s of n)if(!ze.has(s))throw new TypeError(`Unknown category "${String(s)}"`);let a=e.maskChar??"*";if(Array.from(a).length!==1||/[\p{L}\p{N}\s]/u.test(a))throw new TypeError("maskChar must be a single non-letter, non-digit, non-space character");let i=e.maskStyle??"vowels",o=e.detectSpacedLetters??!0,c=e.classifiers??[],u=e.classifierTimeoutMs??3e3,h=new jt((s,d)=>{d!=="error"&&h.emit("error",{error:s})});e.onModerated&&h.on("moderated",e.onModerated),e.onViolation&&h.on("violation",e.onViolation),e.onBlocked&&h.on("blocked",e.onBlocked),e.onWarning&&h.on("warning",e.onWarning),e.onError&&h.on("error",e.onError);let E=new Map,m=new Set,b=null,T=(s,d="word")=>{E.set(s.id,{source:{...s},compiled:Gt(s,d)}),b=null};for(let s of e.packs??mr(r,e.languages)){for(let d of s.rules)T(d,s.boundary??"word");for(let d of s.allowList??[])m.add(G(d))}for(let s of e.customWords??[]){let d=s.replace(/[()|?]/g,"").trim().split(/\s+/).join(" ");d&&T({id:`custom.${G(d).replace(/\s+/g,"-")}`,pattern:d,category:"custom",severity:"medium"})}for(let s of e.rules??[])T(s);for(let s of e.allowList??[])m.add(G(s));let S={...e.policy},B=ge(ye(t,n),S),U=()=>(b||(b=new Yt(Array.from(E.values(),s=>s.compiled))),b);function _(s){let d=He(s),v=or(d,a),g=o?sr(v,d.text):[],f=Qt(U(),{normalized:d,tokens:v,spaced:g,allowList:m});if(f.length===0)return[];let x=Bt(s);return f.map(C=>{let D=Ot(C,v,x);return{...C,context:D,confidence:be(C.confidence*Lt[D])}})}function K(s){let d=[...s].sort((g,f)=>f.priority-g.priority||f.end-f.start-(g.end-g.start)||g.start-f.start||(g.ruleId<f.ruleId?-1:g.ruleId>f.ruleId?1:0)),v=[];for(let g of d)v.every(f=>g.end<=f.start||g.start>=f.end)&&v.push(g);return v}function O(s,d,v){let g=[];for(let p of d){let w=p.rule,I=er(B[w.category],w.severity,p.confidence);if(!I.keep)continue;let j=v&&I.action!=="allow"?v:I.action,V=w.elements.length>1||w.elements.length===0&&/\s/.test(s.slice(p.start,p.end).trim());j==="mask"&&V&&(w.category==="hate"||w.category==="harassment")&&(j="warn");let l=s.slice(p.start,p.end),y={start:p.start,end:p.end,text:l,category:w.category,ruleId:w.id,severity:w.severity,confidence:p.confidence,priority:w.priority,context:p.context,action:j,requiresReview:I.requiresReview,applied:!1};w.replacement!==void 0?y.suggestedReplacement=fr(l,w.replacement):j==="suggest"&&(y.suggestedReplacement=Ne(l,i,a)),w.label!==void 0&&(y.label=w.label),p.source!==void 0&&(y.source=p.source),g.push(y)}g.sort((p,w)=>p.start-w.start||p.end-w.end||w.priority-p.priority);let f=K(g.filter(p=>p.action==="mask")),x=K(g.filter(p=>p.action==="mask"||p.action==="suggest")),C=p=>({start:p.start,end:p.end,replacement:p.action==="suggest"&&p.suggestedReplacement!==void 0?p.suggestedReplacement:Ne(p.text,i,a)});for(let p of f)p.applied=!0;for(let p of x)p.action==="suggest"&&(p.applied=!0);let D=q(s,f.map(C)),F=q(s,x.map(C)),L=tr(g.map(p=>p.action));return{originalText:s,text:D.text,suggestedText:F.text,matches:g,allowed:L!=="block",action:L,requiresReview:g.some(p=>p.requiresReview),mapping:D.mapping}}function $(s){h.emit("moderated",s),s.matches.some(d=>d.action!=="allow")&&h.emit("violation",s),s.action==="block"&&h.emit("blocked",s),s.matches.some(d=>d.action==="warn")&&h.emit("warning",s)}async function M(s,d,v,g){let f=new AbortController,x=()=>f.abort(Ee(g));g?.addEventListener("abort",x,{once:!0});let C;try{return await new Promise((D,F)=>{f.signal.addEventListener("abort",()=>F(f.signal.reason),{once:!0}),C=setTimeout(()=>{let L=new Error(`Classifier "${s.name}" timed out after ${v}ms`);L.name="TimeoutError",f.abort(L)},v),Promise.resolve().then(()=>s.classify({...d,signal:f.signal})).then(D,F)})}finally{C!==void 0&&clearTimeout(C),g?.removeEventListener("abort",x)}}function z(s,d,v,g){for(let f of g.adjustments??[]){let x=d.find(C=>C.rule.id===f.ruleId&&C.start===f.start);x&&Number.isFinite(f.confidence)&&(x.confidence=be($e(f.confidence)))}for(let f of g.matches??[]){if(!ze.has(f.category)||!(Number.isInteger(f.start)&&Number.isInteger(f.end)&&f.start>=0&&f.end<=s.length&&f.start<f.end))continue;let x={id:`${v}:${f.label??f.category}`,category:f.category,severity:f.severity??"medium",confidence:$e(f.confidence),priority:Ve[f.category],replacement:f.replacement,label:f.label,boundary:"word",elements:[]};d.push({start:f.start,end:f.end,rule:x,confidence:be(x.confidence),context:"direct",source:v})}}let A={moderate(s){let d=O(s,_(s));return $(d),d},async moderateAsync(s,d={}){let{signal:v}=d;if(v?.aborted)throw Ee(v);let g=_(s),f=[],x=[];if(c.length>0){let D=O(s,g),F=d.timeoutMs??u,L=await Promise.all(c.map(p=>M(p,{text:s,matches:D.matches,language:r},F,v).then(w=>({classifier:p,output:w,error:void 0}),w=>({classifier:p,output:void 0,error:w}))));if(v?.aborted)throw Ee(v);for(let{classifier:p,output:w,error:I}of L)w?(z(s,g,p.name,w),f.push(p.name)):(x.push(p.name),h.emit("error",{error:I,provider:p.name}))}let C={...O(s,g),providers:f,failedProviders:x};return $(C),C},mask(s){return O(s,_(s),"mask").text},validate(s){let d=A.moderate(s);return{valid:d.allowed,result:d,violations:d.matches.filter(v=>v.action!=="allow")}},addRule(s){T(s)},removeRule(s){let d=E.delete(s);return d&&(b=null),d},getRules(){return Array.from(E.values(),s=>({...s.source}))},setPolicy(s){let d={...S};for(let v of P){let g=s[v];g&&(d[v]={...d[v],...g})}B=ge(ye(t,n),d),S=d},setMode(s){Te(s),t=s,B=ge(ye(t,n),S)},on(s,d){return h.on(s,d)},createSession(s){return nr((d,v)=>A.moderateAsync(d,v),s)}};return A}var Q="input, textarea, [contenteditable]",yr=new Set(["text","search"]),gr=new Set(["current-password","new-password","one-time-code","email","username","tel","cc-name","cc-given-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type"]),vr=/pass(word|wd)?|pwd|secret|token|otp|one.?time|cvv|cvc|card.?num|cc.?num|iban|ssn|social.?sec|pin(code)?$/i,X=[".ProseMirror","[data-lexical-editor]",".ql-editor",".cm-content",".monaco-editor","[data-slate-editor]",".public-DraftEditor-content",".ck-editor__editable"].join(", ");function Z(e){return e.tagName==="INPUT"||e.tagName==="TEXTAREA"}function We(e){let t=e;if(typeof t.isContentEditable=="boolean")return t.isContentEditable;for(let r=e;r;r=r.parentElement){let n=r.getAttribute("contenteditable");if(n!==null)return n===""||n==="true"||n==="plaintext-only"}return!1}function Er(e){return Z(e)||!We(e)?!1:!e.parentElement||!We(e.parentElement)}function xe(e){return(e.getAttribute("autocomplete")??"").toLowerCase().split(/\s+/).some(n=>gr.has(n))?!0:[e.getAttribute("name"),e.id,e.getAttribute("inputmode")==="numeric"?"pin":null].some(n=>n!==null&&n!==""&&vr.test(n))}function H(e,t){if(e.nodeType!==1||e.closest('[data-safetype="off"]'))return!1;for(let r of t)if(e.matches(r))return!1;if(e.tagName==="INPUT"){let r=e,n=(r.getAttribute("type")??"text").toLowerCase();return!yr.has(n)||r.readOnly||r.disabled?!1:!xe(e)}if(e.tagName==="TEXTAREA"){let r=e;return r.readOnly||r.disabled?!1:!xe(e)}return!Er(e)||e.matches(X)||e.closest(X)?!1:!xe(e)}var Se={warn:"This may come across as hurtful. Please consider rephrasing.",block:"This can't be sent because it contains language that breaks the community guidelines."},Ge=`
|
|
2
|
+
`,i);if(c!==-1&&c<o){a=c+1;continue}t.push([i+1,o]),a=o+1}}return t}function Ot(e,t,r){if(e.tokenIndex!==void 0)for(let n=1;n<=2;n++){let a=t[e.tokenIndex-n];if(a&&Ft.has(a.value))return"mention"}for(let[n,a]of r)if(e.start>=n&&e.end<=a)return"quoted";return"direct"}var jt=class{constructor(e){this.onListenerError=e,this.handlers=new Map}on(e,t){let r=this.handlers.get(e);return r||(r=new Set,this.handlers.set(e,r)),r.add(t),()=>{r.delete(t)}}emit(e,t){let r=this.handlers.get(e);if(r)for(let n of[...r])try{n(t)}catch(a){this.onListenerError&&this.onListenerError(a,e)}}clear(){this.handlers.clear()}},Nt=new RegExp("^[\u200B-\u200D\u2060\uFEFF\xAD\u180E]$"),_t=/\p{M}/u;function $t(e){let t=e.codePointAt(0);return t>=2304&&t<=3583}var zt={\u00DF:"ss","\u0901":"\u0902"},Pt={\u0430:"a",\u0432:"b",\u0435:"e",\u0451:"e",\u043A:"k",\u043C:"m",\u043D:"h",\u043E:"o",\u0440:"p",\u0441:"c",\u0442:"t",\u0443:"y",\u0445:"x",\u0455:"s",\u0456:"i",\u0457:"i",\u0458:"j",\u04BB:"h","\u0501":"d","\u051B":"q","\u051D":"w",\u04AF:"y",\u03B1:"a",\u03B2:"b",\u03B5:"e",\u03B7:"n",\u03B9:"i",\u03BA:"k",\u03BD:"v",\u03BF:"o",\u03C1:"p",\u03C4:"t",\u03C5:"u",\u03C7:"x",\u03C9:"w"},Pe={"@":"a",4:"a",$:"s",5:"s",0:"o",1:"i","!":"i","|":"i",3:"e","\u20AC":"e",7:"t"},me=new Map;function qe(e){let t=me.get(e);if(t!==void 0)return t;let r;if(Nt.test(e))r="";else{r="";for(let n of e.toLowerCase().normalize("NFKD")){if(_t.test(n)&&!$t(n))continue;let a=n.toLowerCase();r+=zt[a]??Pt[a]??a}}return me.size<1e4&&me.set(e,r),r}function He(e){let t="",r=[],n=[],a=0;for(;a<e.length;){let i=e.codePointAt(a),o=String.fromCodePoint(i),c=a+o.length,u=qe(o);for(let l=0;l<u.length;l++)r.push(a),n.push(c);t+=u,a=c}return{text:t,starts:r,ends:n}}function G(e){return Ue(He(e).text)}var qt=/\p{L}/u;function Ue(e){if(!qt.test(e))return e;let t="";for(let r of e)t+=Pe[r]??r;return t}function Ke(e){let t=[];for(let r of e){let n=t[t.length-1];n&&n[0]===r?n[1]++:t.push([r,1])}return t}function Ht(e){let t="";for(let[r]of e)t+=r;return t}function we(e,t){let r=t.runs;if(t.prefix?e.length<r.length:e.length!==r.length)return!1;for(let n=0;n<r.length;n++){let a=e[n],i=r[n];if(a[0]!==i[0]||a[1]<i[1])return!1}return!0}var N=class extends Error{constructor(){super(...arguments),this.name="PatternError"}};function Ut(e,t){let r=e.endsWith("*"),n=G(r?e.slice(0,-1):e);if(!n||/\s/.test(n))throw new N(`Invalid token "${e}" in pattern "${t}"`);let a=Ke(n);return{value:n,prefix:r,runs:a,key:Ht(a)}}function Kt(e){let t=e.trim().split(/\s+/).filter(Boolean);if(t.length===0)throw new N("Pattern must not be empty");return t.map((r,n)=>{let a=r,i=a.endsWith("?");if(i&&(a=a.slice(0,-1)),i&&n===0)throw new N(`First token cannot be optional in "${e}"`);if(a.startsWith("(")){if(!a.endsWith(")"))throw new N(`Unclosed group "${r}" in "${e}"`);a=a.slice(1,-1)}return{alternatives:a.split("|").map(c=>Ut(c,e)),optional:i}})}var Ve={custom:40,hate:30,harassment:20,profanity:10},Vt=new Set(["profanity","hate","harassment","custom"]),Wt=new Set(["low","medium","high","critical"]);function Gt(e,t="word"){if(!e||typeof e.id!="string"||e.id.length===0)throw new TypeError("Rule requires a non-empty id");if(typeof e.pattern!="string")throw new TypeError(`Rule "${e.id}" requires a pattern`);if(!Vt.has(e.category))throw new TypeError(`Rule "${e.id}" has unknown category "${String(e.category)}"`);if(e.severity!==void 0&&!Wt.has(e.severity))throw new TypeError(`Rule "${e.id}" has unknown severity "${String(e.severity)}"`);let r=e.confidence??1;if(!(r>=0&&r<=1))throw new RangeError(`Rule "${e.id}" confidence must be within [0, 1]`);let n;try{n=Kt(e.pattern)}catch(a){throw a instanceof N?new N(`Rule "${e.id}": ${a.message}`):a}if(t==="substring"&&n.length!==1)throw new N(`Rule "${e.id}": substring packs support single-token patterns only`);return{id:e.id,category:e.category,severity:e.severity??"medium",confidence:r,priority:e.priority??Ve[e.category],replacement:e.replacement,label:e.label,boundary:t,elements:n}}var Yt=class{constructor(e){this.exact=new Map,this.prefix=new Map,this.substring=[];for(let t of e){if(t.boundary==="substring"){this.substring.push(t);continue}for(let r of t.elements[0].alternatives){let n=r.prefix?this.prefix:this.exact,a=r.prefix?r.key[0]:r.key,i=n.get(a);i?i.push({rule:t,alt:r}):n.set(a,[{rule:t,alt:r}])}}}candidates(e,t){let r=[];for(let n of this.exact.get(t)??[])we(e,n.alt)&&r.push(n);for(let n of this.prefix.get(t[0]??"")??[])we(e,n.alt)&&r.push(n);return r}get substringRules(){return this.substring}};function Be(e,t){let r=Ke(e.value),n="";for(let[a]of r)n+=a;return{runs:r,key:n,blocked:e.masked||t.has(e.value)}}function Xt(e,t){return t.blocked?!1:e.alternatives.some(r=>we(t.runs,r))}function ke(e,t,r,n){if(t===e.length)return n-1;let a=e[t],i=-1;return n<r.length&&Xt(a,r[n])&&(i=ke(e,t+1,r,n+1)),a.optional&&(i=Math.max(i,ke(e,t+1,r,n))),i}function Qt(e,t){let{tokens:r,spaced:n,allowList:a,normalized:i}=t,o=r.map(m=>Be(m,a)),c=[],u=new Set,l=m=>{let b=`${m.rule.id}:${m.start}:${m.end}`;u.has(b)||(u.add(b),c.push(m))};for(let m=0;m<r.length;m++){let b=o[m];if(b.blocked)continue;let T=new Set;for(let{rule:S}of e.candidates(b.runs,b.key)){if(T.has(S.id))continue;T.add(S.id);let B=ke(S.elements,1,o,m+1);B<m||l({start:r[m].start,end:r[B].end,rule:S,confidence:S.confidence,tokenIndex:m})}}for(let m of n){let b=Be(m,a);if(!b.blocked)for(let{rule:T}of e.candidates(b.runs,b.key))T.elements.length===1&&l({start:m.start,end:m.end,rule:T,confidence:T.confidence,tokenIndex:m.firstIndex})}let E=i.text;for(let m of e.substringRules)for(let b of m.elements[0].alternatives)for(let T=E.indexOf(b.value);T!==-1;T=E.indexOf(b.value,T+1)){let S=T+b.value.length;l({start:i.starts[T],end:i.ends[S-1],rule:m,confidence:m.confidence})}return c}var Zt=new Set(["allow","mask","suggest","warn","block"]);function Te(e){if(!Zt.has(e))throw new TypeError(`Unknown moderation action "${String(e)}"`)}function ye(e,t){let r=new Set(t),n=(a,i)=>({enabled:r.has(a),...i});return{profanity:n("profanity",{action:e,minConfidence:0,minSeverity:"medium"}),custom:n("custom",{action:e,minConfidence:0,minSeverity:"low"}),hate:n("hate",{action:e,minConfidence:.6,minSeverity:"low"}),harassment:n("harassment",{action:e==="mask"?"warn":e,minConfidence:.6,minSeverity:"low"})}}function ge(e,t){let r={...e};if(!t)return r;for(let n of P){let a=t[n];if(a){if(a.action!==void 0&&Te(a.action),a.minConfidence!==void 0&&!(a.minConfidence>=0&&a.minConfidence<=1))throw new RangeError(`minConfidence for "${n}" must be within [0, 1]`);if(a.minSeverity!==void 0&&!(a.minSeverity in W))throw new TypeError(`Unknown severity "${String(a.minSeverity)}"`);r[n]={...r[n],...Jt(a)}}}return r}function Jt(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function er(e,t,r){return!e.enabled||W[t]<W[e.minSeverity]?{keep:!1,action:"allow",requiresReview:!1}:r<e.minConfidence?{keep:!0,action:"allow",requiresReview:!0}:{keep:!0,action:e.action,requiresReview:!1}}function tr(e){let t="allow";for(let r of e)pe[r]>pe[t]&&(t=r);return t}function rr(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function nr(e,t={}){let r=Math.max(0,t.debounceMs??0),n=0,a,i,o,c=()=>{n++,i!==void 0&&clearTimeout(i),i=void 0,o?.(void 0),o=void 0,a?.abort(),a=void 0};return{moderate(u){c();let l=n;return new Promise((E,m)=>{o=E;let b=()=>{i=void 0;let T=new AbortController;a=T,e(u,{signal:T.signal}).then(S=>{l===n&&(o=void 0,a=void 0,E(S))},S=>{l===n&&(o=void 0,a=void 0,rr(S)?E(void 0):m(S))})};r>0?i=setTimeout(b,r):b()})},cancel:c}}var Oe=new Set(["*","!","|"]),ar=new Set([" ",".","-","_"]),je=new Map;function ir(e){let t=je.get(e);if(!t){let r=e.replace(/[\\\]^-]/g,"\\$&");t=new RegExp(`[\\p{L}\\p{M}\\p{N}@$!|*\u20AC${r}]+`,"gu"),je.set(e,t)}return t}function or(e,t="*"){let{text:r,starts:n,ends:a}=e,i=[],o=ir(t);o.lastIndex=0;for(let c=o.exec(r);c!==null;c=o.exec(r)){let u=c.index,l=c.index+c[0].length;for(;u<l&&Oe.has(r[u]);)u++;for(;l>u&&Oe.has(r[l-1]);)l--;if(u===l)continue;let E=r.slice(u,l);i.push({start:n[u],end:a[l-1],nStart:u,nEnd:l,value:Ue(E),masked:E.includes(t),firstIndex:i.length})}return i}function sr(e,t){let r=[],n=0;for(;n<e.length;){let a=n;for(;a+1<e.length&&e[a].value.length===1&&e[a+1].value.length===1&&e[a+1].nStart-e[a].nEnd===1&&ar.has(t[e[a].nEnd]);)a++;if(a-n+1>=3){let i=e.slice(n,a+1);r.push({start:i[0].start,end:i[i.length-1].end,nStart:i[0].nStart,nEnd:i[i.length-1].nEnd,value:i.map(o=>o.value).join(""),masked:i.some(o=>o.masked),firstIndex:n}),n=a+1}else n++}return r}var ur=new RegExp("[\\p{L}\\p{N}@$!|\u20AC]","u"),cr=/\p{M}/u,lr=new Set(["a","e","i","o","u"]);function dr(e){return ur.test(e)}function hr(e){let t=[];for(let r of e)cr.test(r)&&t.length>0?t[t.length-1]+=r:t.push(r);return t}function Ne(e,t="vowels",r="*"){if(typeof t=="function")return t(e);let n=hr(e),a=n.map((u,l)=>dr(Array.from(u)[0])?l:-1).filter(u=>u>=0);if(a.length===0)return e;let i=n.slice(),o=a[0],c=a[a.length-1];if(t==="full"){for(let u of a)i[u]=r;return i.join("")}if(t==="vowels"){let u=0;for(let l of a){if(l===o)continue;let E=qe(Array.from(n[l])[0]);lr.has(Pe[E]??E)&&(i[l]=r,l!==c&&u++)}if(u>0)return i.join("");for(let l of a)i[l]=n[l]}for(let u of a)u!==o&&(u===c&&a.length>2||(i[u]=r));return i.join("")}function fr(e,t){let r=e.replace(/[^\p{L}]/gu,"");if(r.length>1&&r===r.toUpperCase()&&r!==r.toLowerCase())return t.toUpperCase();let n=r[0];return n&&n!==n.toLowerCase()?t.charAt(0).toUpperCase()+t.slice(1):t}function q(e,t){let r=[...t].sort((i,o)=>i.start-o.start);for(let i=1;i<r.length;i++)if(r[i].start<r[i-1].end)throw new RangeError("Edits must not overlap");let n="",a=0;for(let i of r)n+=e.slice(a,i.start)+i.replacement,a=i.end;return n+=e.slice(a),{text:n,mapping:pr(r,e.length,n.length)}}function pr(e,t,r){let n=Object.freeze(e.map(i=>Object.freeze({...i}))),a=(i,o)=>Math.min(Math.max(0,Math.trunc(i)),o);return{edits:n,toTransformed(i){let o=a(i,t),c=0;for(let u of n){if(o<=u.start)return o+c;if(o<u.end)return u.start+c+Math.min(o-u.start,u.replacement.length);c+=u.replacement.length-(u.end-u.start)}return o+c},toOriginal(i){let o=a(i,r),c=0;for(let u of n){let l=u.start+c,E=l+u.replacement.length;if(o<=l)return o-c;if(o<E)return u.start+Math.min(o-l,u.end-u.start);c+=u.replacement.length-(u.end-u.start)}return o-c}}}var ve={en:se,"hi-latn":ue,hi:he,es:le,fr:de,de:ce,pt:fe},_e={en:["en","hi-latn"],hi:["hi","hi-latn"]};function mr(e,t){let r=e.toLowerCase();return(t??(ve[r]&&!_e[r]?[r]:_e[r.split("-")[0]]??[e])).map(a=>{let i=a.toLowerCase(),o=ve[i]??ve[i.split("-")[0]];if(!o)throw new Error(`No built-in dictionary pack for language "${a}". Pass one via the \`packs\` option.`);return o})}function Ee(e){return e?.reason!==void 0?e.reason:new DOMException("The operation was aborted.","AbortError")}function be(e){return Math.round(e*1e4)/1e4}function $e(e){return Math.min(1,Math.max(0,e))}var ze=new Set(P);function Y(e={}){let t=e.mode??"mask";Te(t);let r=e.language??"en",n=e.categories??P;for(let s of n)if(!ze.has(s))throw new TypeError(`Unknown category "${String(s)}"`);let a=e.maskChar??"*";if(Array.from(a).length!==1||/[\p{L}\p{N}\s]/u.test(a))throw new TypeError("maskChar must be a single non-letter, non-digit, non-space character");let i=e.maskStyle??"vowels",o=e.detectSpacedLetters??!0,c=e.classifiers??[],u=e.classifierTimeoutMs??3e3,l=new jt((s,h)=>{h!=="error"&&l.emit("error",{error:s})});e.onModerated&&l.on("moderated",e.onModerated),e.onViolation&&l.on("violation",e.onViolation),e.onBlocked&&l.on("blocked",e.onBlocked),e.onWarning&&l.on("warning",e.onWarning),e.onError&&l.on("error",e.onError);let E=new Map,m=new Set,b=null,T=(s,h="word")=>{E.set(s.id,{source:{...s},compiled:Gt(s,h)}),b=null};for(let s of e.packs??mr(r,e.languages)){for(let h of s.rules)T(h,s.boundary??"word");for(let h of s.allowList??[])m.add(G(h))}for(let s of e.customWords??[]){let h=s.replace(/[()|?]/g,"").trim().split(/\s+/).join(" ");h&&T({id:`custom.${G(h).replace(/\s+/g,"-")}`,pattern:h,category:"custom",severity:"medium"})}for(let s of e.rules??[])T(s);for(let s of e.allowList??[])m.add(G(s));let S={...e.policy},B=ge(ye(t,n),S),U=()=>(b||(b=new Yt(Array.from(E.values(),s=>s.compiled))),b);function _(s){let h=He(s),v=or(h,a),g=o?sr(v,h.text):[],f=Qt(U(),{normalized:h,tokens:v,spaced:g,allowList:m});if(f.length===0)return[];let x=Bt(s);return f.map(C=>{let D=Ot(C,v,x);return{...C,context:D,confidence:be(C.confidence*Lt[D])}})}function K(s){let h=[...s].sort((g,f)=>f.priority-g.priority||f.end-f.start-(g.end-g.start)||g.start-f.start||(g.ruleId<f.ruleId?-1:g.ruleId>f.ruleId?1:0)),v=[];for(let g of h)v.every(f=>g.end<=f.start||g.start>=f.end)&&v.push(g);return v}function O(s,h,v){let g=[];for(let p of h){let w=p.rule,I=er(B[w.category],w.severity,p.confidence);if(!I.keep)continue;let j=v&&I.action!=="allow"?v:I.action,V=w.elements.length>1||w.elements.length===0&&/\s/.test(s.slice(p.start,p.end).trim());j==="mask"&&V&&(w.category==="hate"||w.category==="harassment")&&(j="warn");let d=s.slice(p.start,p.end),y={start:p.start,end:p.end,text:d,category:w.category,ruleId:w.id,severity:w.severity,confidence:p.confidence,priority:w.priority,context:p.context,action:j,requiresReview:I.requiresReview,applied:!1};w.replacement!==void 0?y.suggestedReplacement=fr(d,w.replacement):j==="suggest"&&(y.suggestedReplacement=Ne(d,i,a)),w.label!==void 0&&(y.label=w.label),p.source!==void 0&&(y.source=p.source),g.push(y)}g.sort((p,w)=>p.start-w.start||p.end-w.end||w.priority-p.priority);let f=K(g.filter(p=>p.action==="mask")),x=K(g.filter(p=>p.action==="mask"||p.action==="suggest")),C=p=>({start:p.start,end:p.end,replacement:p.action==="suggest"&&p.suggestedReplacement!==void 0?p.suggestedReplacement:Ne(p.text,i,a)});for(let p of f)p.applied=!0;for(let p of x)p.action==="suggest"&&(p.applied=!0);let D=q(s,f.map(C)),F=q(s,x.map(C)),L=tr(g.map(p=>p.action));return{originalText:s,text:D.text,suggestedText:F.text,matches:g,allowed:L!=="block",action:L,requiresReview:g.some(p=>p.requiresReview),mapping:D.mapping}}function $(s){l.emit("moderated",s),s.matches.some(h=>h.action!=="allow")&&l.emit("violation",s),s.action==="block"&&l.emit("blocked",s),s.matches.some(h=>h.action==="warn")&&l.emit("warning",s)}async function M(s,h,v,g){let f=new AbortController,x=()=>f.abort(Ee(g));g?.addEventListener("abort",x,{once:!0});let C;try{return await new Promise((D,F)=>{f.signal.addEventListener("abort",()=>F(f.signal.reason),{once:!0}),C=setTimeout(()=>{let L=new Error(`Classifier "${s.name}" timed out after ${v}ms`);L.name="TimeoutError",f.abort(L)},v),Promise.resolve().then(()=>s.classify({...h,signal:f.signal})).then(D,F)})}finally{C!==void 0&&clearTimeout(C),g?.removeEventListener("abort",x)}}function z(s,h,v,g){for(let f of g.adjustments??[]){let x=h.find(C=>C.rule.id===f.ruleId&&C.start===f.start);x&&Number.isFinite(f.confidence)&&(x.confidence=be($e(f.confidence)))}for(let f of g.matches??[]){if(!ze.has(f.category)||!(Number.isInteger(f.start)&&Number.isInteger(f.end)&&f.start>=0&&f.end<=s.length&&f.start<f.end))continue;let x={id:`${v}:${f.label??f.category}`,category:f.category,severity:f.severity??"medium",confidence:$e(f.confidence),priority:Ve[f.category],replacement:f.replacement,label:f.label,boundary:"word",elements:[]};h.push({start:f.start,end:f.end,rule:x,confidence:be(x.confidence),context:"direct",source:v})}}let A={moderate(s){let h=O(s,_(s));return $(h),h},async moderateAsync(s,h={}){let{signal:v}=h;if(v?.aborted)throw Ee(v);let g=_(s),f=[],x=[];if(c.length>0){let D=O(s,g),F=h.timeoutMs??u,L=await Promise.all(c.map(p=>M(p,{text:s,matches:D.matches,language:r},F,v).then(w=>({classifier:p,output:w,error:void 0}),w=>({classifier:p,output:void 0,error:w}))));if(v?.aborted)throw Ee(v);for(let{classifier:p,output:w,error:I}of L)w?(z(s,g,p.name,w),f.push(p.name)):(x.push(p.name),l.emit("error",{error:I,provider:p.name}))}let C={...O(s,g),providers:f,failedProviders:x};return $(C),C},mask(s){return O(s,_(s),"mask").text},validate(s){let h=A.moderate(s);return{valid:h.allowed,result:h,violations:h.matches.filter(v=>v.action!=="allow")}},addRule(s){T(s)},removeRule(s){let h=E.delete(s);return h&&(b=null),h},getRules(){return Array.from(E.values(),s=>({...s.source}))},setPolicy(s){let h={...S};for(let v of P){let g=s[v];g&&(h[v]={...h[v],...g})}B=ge(ye(t,n),h),S=h},setMode(s){Te(s),t=s,B=ge(ye(t,n),S)},on(s,h){return l.on(s,h)},createSession(s){return nr((h,v)=>A.moderateAsync(h,v),s)}};return A}var Q="input, textarea, [contenteditable]",yr=new Set(["text","search"]),gr=new Set(["current-password","new-password","one-time-code","email","username","tel","cc-name","cc-given-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type"]),vr=/pass(word|wd)?|pwd|secret|token|otp|one.?time|cvv|cvc|card.?num|cc.?num|iban|ssn|social.?sec|pin(code)?$/i,X=[".ProseMirror","[data-lexical-editor]",".ql-editor",".cm-content",".monaco-editor","[data-slate-editor]",".public-DraftEditor-content",".ck-editor__editable"].join(", ");function Z(e){return e.tagName==="INPUT"||e.tagName==="TEXTAREA"}function We(e){let t=e;if(typeof t.isContentEditable=="boolean")return t.isContentEditable;for(let r=e;r;r=r.parentElement){let n=r.getAttribute("contenteditable");if(n!==null)return n===""||n==="true"||n==="plaintext-only"}return!1}function Er(e){return Z(e)||!We(e)?!1:!e.parentElement||!We(e.parentElement)}function xe(e){return(e.getAttribute("autocomplete")??"").toLowerCase().split(/\s+/).some(n=>gr.has(n))?!0:[e.getAttribute("name"),e.id,e.getAttribute("inputmode")==="numeric"?"pin":null].some(n=>n!==null&&n!==""&&vr.test(n))}function H(e,t){if(e.nodeType!==1||e.closest('[data-safetype="off"]'))return!1;for(let r of t)if(e.matches(r))return!1;if(e.tagName==="INPUT"){let r=e,n=(r.getAttribute("type")??"text").toLowerCase();return!yr.has(n)||r.readOnly||r.disabled?!1:!xe(e)}if(e.tagName==="TEXTAREA"){let r=e;return r.readOnly||r.disabled?!1:!xe(e)}return!Er(e)||e.matches(X)||e.closest(X)?!1:!xe(e)}var Se={warn:"This may come across as hurtful. Please consider rephrasing.",block:"This can't be sent because it contains language that breaks the community guidelines."},Ge=`
|
|
3
3
|
:where(.safetype-message){display:block;margin-top:4px;font-size:.875em;line-height:1.4}
|
|
4
4
|
:where(.safetype-message[data-level="warn"]){color:#8a5300}
|
|
5
5
|
:where(.safetype-message[data-level="block"]){color:#b42318}
|
|
6
|
-
`;function ee(e){return e.action==="block"?"block":e.matches.some(t=>t.action==="warn")?"warn":null}function Ce(e,t,r){let n=t?.[e]??Se[e];return typeof n=="function"?n(r):n}var br=0;function wr(e,t,r){let n=(e.getAttribute(t)??"").split(/\s+/).filter(Boolean);n.includes(r)||e.setAttribute(t,[...n,r].join(" "))}function kr(e,t,r){let n=(e.getAttribute(t)??"").split(/\s+/).filter(a=>a&&a!==r);n.length?e.setAttribute(t,n.join(" ")):e.removeAttribute(t)}var J=class{constructor(t,r){this.field=t;this.texts=r;this.node=null;this.id=`safetype-message-${++br}`;this.setInvalid=!1}update(t,r){if(!t)return this.clear();let n=Ce(t,this.texts,r);if(!this.node){let a=this.field.ownerDocument.createElement("div");a.id=this.id,a.className="safetype-message",a.setAttribute("role","status"),a.setAttribute("aria-live","polite"),this.field.insertAdjacentElement("afterend",a),wr(this.field,"aria-describedby",this.id),this.node=a}this.node.dataset.level=t,this.node.textContent!==n&&(this.node.textContent=n),t==="block"?this.field.hasAttribute("aria-invalid")||(this.field.setAttribute("aria-invalid","true"),this.setInvalid=!0):this.clearInvalid()}clearInvalid(){this.setInvalid&&this.field.removeAttribute("aria-invalid"),this.setInvalid=!1}clear(){this.clearInvalid(),this.node&&(this.node.remove(),this.node=null,kr(this.field,"aria-describedby",this.id))}};var Tr=new Set(["insertFromPaste","insertFromPasteAsQuotation","insertFromDrop","insertReplacementText","insertFromYank"]);function xr(e){return e.matches.filter(t=>t.action!=="allow").map(t=>`${t.ruleId}:${t.start}:${t.end}:${t.action}`).join("|")}var te=class{constructor(t,r,n){this.element=t;this.surface=r;this.ctx=n;this.applying=!1;this.composing=!1;this.attached=!1;this.lastViolationKey="";this.lastWarningKey="";this.listeners=[];this.messages=n.showMessages?new J(t,n.messages):null,this.session=n.asyncModeration?n.engine.createSession({debounceMs:n.asyncDebounceMs}):null}attach(){this.attached||(this.attached=!0,this.listen("input",t=>this.onInput(t)),this.listen("compositionstart",()=>{this.composing=!0}),this.listen("compositionend",()=>{this.composing=!1,this.safeRun("typing")}),this.listen("focusout",()=>this.safeRun("final")))}detach(){if(this.attached){this.attached=!1;for(let[t,r]of this.listeners)this.element.removeEventListener(t,r);this.listeners.length=0,this.session?.cancel(),this.messages?.clear()}}listen(t,r){this.element.addEventListener(t,r),this.listeners.push([t,r])}onInput(t){if(this.applying||this.composing||t.isComposing)return;let r=t.inputType??"";r==="historyUndo"||r==="historyRedo"?this.safeRun("observe"):Tr.has(r)?this.safeRun("final"):this.safeRun("typing")}safeRun(t){try{this.run(t)}catch(r){this.ctx.reportError(r,this.element)}}run(t){let r=this.surface.getText(),n=this.ctx.engine.moderate(r);return this.applyResult(n,t),this.session&&t!=="observe"&&this.session.moderate(r).then(a=>{a&&this.attached&&this.surface.getText()===a.originalText&&this.applyResult(a,t==="final"?"final":"typing")},a=>this.ctx.reportError(a,this.element)),n}applyResult(t,r){let n=t.originalText,a=r==="observe"?[]:t.mapping.edits.filter(i=>n.slice(i.start,i.end)!==i.replacement);if(r==="typing"&&a.length){let i=this.surface.getSelection();if(i&&i.start===i.end){let o=i.start;a=a.filter(c=>!(c.start<o&&o<=c.end))}}if(a.length){this.applying=!0;try{this.surface.apply(n,a)}finally{this.applying=!1}}this.result=t,this.updateMessages(t),this.emit(t)}updateMessages(t){this.messages&&this.messages.update(ee(t),t)}emit(t){this.ctx.dispatch("moderated",t,this.element);let r=xr(t);r!==this.lastViolationKey&&(this.lastViolationKey=r,r&&this.ctx.dispatch("violation",t,this.element));let n=t.matches.filter(a=>a.action==="warn").map(a=>`${a.ruleId}:${a.start}`).join("|");n!==this.lastWarningKey&&(this.lastWarningKey=n,n&&this.ctx.dispatch("warning",t,this.element))}};function Ye(e){return typeof e.execCommand=="function"}function Xe(e){return[...e].sort((t,r)=>r.start-t.start)}function Sr(e,t){let r=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),"value");r?.set?r.set.call(e,t):e.value=t}var re=class{constructor(t){this.el=t}getText(){return this.el.value}getSelection(){let{el:t}=this;return t.ownerDocument.activeElement!==t||t.selectionStart===null||t.selectionEnd===null?null:{start:t.selectionStart,end:t.selectionEnd}}apply(t,r){let{el:n}=this,a=n.ownerDocument,{text:i,mapping:o}=q(t,r),c=this.getSelection(),u=n.selectionDirection??void 0,{scrollTop:
|
|
6
|
+
`;function ee(e){return e.action==="block"?"block":e.matches.some(t=>t.action==="warn")?"warn":null}function Ce(e,t,r){let n=t?.[e]??Se[e];return typeof n=="function"?n(r):n}var br=0;function wr(e,t,r){let n=(e.getAttribute(t)??"").split(/\s+/).filter(Boolean);n.includes(r)||e.setAttribute(t,[...n,r].join(" "))}function kr(e,t,r){let n=(e.getAttribute(t)??"").split(/\s+/).filter(a=>a&&a!==r);n.length?e.setAttribute(t,n.join(" ")):e.removeAttribute(t)}var J=class{constructor(t,r){this.field=t;this.texts=r;this.node=null;this.id=`safetype-message-${++br}`;this.setInvalid=!1}update(t,r){if(!t)return this.clear();let n=Ce(t,this.texts,r);if(!this.node){let a=this.field.ownerDocument.createElement("div");a.id=this.id,a.className="safetype-message",a.setAttribute("role","status"),a.setAttribute("aria-live","polite"),this.field.insertAdjacentElement("afterend",a),wr(this.field,"aria-describedby",this.id),this.node=a}this.node.dataset.level=t,this.node.textContent!==n&&(this.node.textContent=n),t==="block"?this.field.hasAttribute("aria-invalid")||(this.field.setAttribute("aria-invalid","true"),this.setInvalid=!0):this.clearInvalid()}clearInvalid(){this.setInvalid&&this.field.removeAttribute("aria-invalid"),this.setInvalid=!1}clear(){this.clearInvalid(),this.node&&(this.node.remove(),this.node=null,kr(this.field,"aria-describedby",this.id))}};var Tr=new Set(["insertFromPaste","insertFromPasteAsQuotation","insertFromDrop","insertReplacementText","insertFromYank"]);function xr(e){return e.matches.filter(t=>t.action!=="allow").map(t=>`${t.ruleId}:${t.start}:${t.end}:${t.action}`).join("|")}var te=class{constructor(t,r,n){this.element=t;this.surface=r;this.ctx=n;this.applying=!1;this.composing=!1;this.attached=!1;this.lastViolationKey="";this.lastWarningKey="";this.listeners=[];this.messages=n.showMessages?new J(t,n.messages):null,this.session=n.asyncModeration?n.engine.createSession({debounceMs:n.asyncDebounceMs}):null}attach(){this.attached||(this.attached=!0,this.listen("input",t=>this.onInput(t)),this.listen("compositionstart",()=>{this.composing=!0}),this.listen("compositionend",()=>{this.composing=!1,this.safeRun("typing")}),this.listen("focusout",()=>this.safeRun("final")))}detach(){if(this.attached){this.attached=!1;for(let[t,r]of this.listeners)this.element.removeEventListener(t,r);this.listeners.length=0,this.session?.cancel(),this.messages?.clear()}}listen(t,r){this.element.addEventListener(t,r),this.listeners.push([t,r])}onInput(t){if(this.applying||this.composing||t.isComposing)return;let r=t.inputType??"";r==="historyUndo"||r==="historyRedo"?this.safeRun("observe"):Tr.has(r)?this.safeRun("final"):this.safeRun("typing")}safeRun(t){try{this.run(t)}catch(r){this.ctx.reportError(r,this.element)}}run(t){let r=this.surface.getText(),n=this.ctx.engine.moderate(r);return this.applyResult(n,t),this.session&&t!=="observe"&&this.session.moderate(r).then(a=>{a&&this.attached&&this.surface.getText()===a.originalText&&this.applyResult(a,t==="final"?"final":"typing")},a=>this.ctx.reportError(a,this.element)),n}applyResult(t,r){let n=t.originalText,a=r==="observe"?[]:t.mapping.edits.filter(i=>n.slice(i.start,i.end)!==i.replacement);if(r==="typing"&&a.length){let i=this.surface.getSelection();if(i&&i.start===i.end){let o=i.start;a=a.filter(c=>!(c.start<o&&o<=c.end))}}if(a.length){this.applying=!0;try{this.surface.apply(n,a)}finally{this.applying=!1}}this.result=t,this.updateMessages(t),this.emit(t)}updateMessages(t){this.messages&&this.messages.update(ee(t),t)}emit(t){this.ctx.dispatch("moderated",t,this.element);let r=xr(t);r!==this.lastViolationKey&&(this.lastViolationKey=r,r&&this.ctx.dispatch("violation",t,this.element));let n=t.matches.filter(a=>a.action==="warn").map(a=>`${a.ruleId}:${a.start}`).join("|");n!==this.lastWarningKey&&(this.lastWarningKey=n,n&&this.ctx.dispatch("warning",t,this.element))}};function Ye(e){return typeof e.execCommand=="function"}function Xe(e){return[...e].sort((t,r)=>r.start-t.start)}function Sr(e,t){let r=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),"value");r?.set?r.set.call(e,t):e.value=t}var re=class{constructor(t){this.el=t}getText(){return this.el.value}getSelection(){let{el:t}=this;return t.ownerDocument.activeElement!==t||t.selectionStart===null||t.selectionEnd===null?null:{start:t.selectionStart,end:t.selectionEnd}}apply(t,r){let{el:n}=this,a=n.ownerDocument,{text:i,mapping:o}=q(t,r),c=this.getSelection(),u=n.selectionDirection??void 0,{scrollTop:l,scrollLeft:E}=n,m=!1;if(c&&Ye(a)){m=!0;try{for(let b of Xe(r))if(n.setSelectionRange(b.start,b.end),!a.execCommand("insertText",!1,b.replacement)){m=!1;break}}catch{m=!1}}if((!m||n.value!==i)&&(Sr(n,i),n.dispatchEvent(new Event("input",{bubbles:!0}))),c)try{n.setSelectionRange(o.toTransformed(c.start),o.toTransformed(c.end),u)}catch{}n.scrollTop=l,n.scrollLeft=E}},Cr=new Set(["ADDRESS","ARTICLE","ASIDE","BLOCKQUOTE","DD","DETAILS","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","H1","H2","H3","H4","H5","H6","HEADER","HR","LI","MAIN","NAV","OL","P","PRE","SECTION","SUMMARY","TABLE","TD","TH","TR","UL"]),Ar=1,Rr=4,ne=class{constructor(t){this.root=t}blockOf(t){for(let r=t.parentNode;r&&r!==this.root;r=r.parentNode)if(r.nodeType===1&&Cr.has(r.tagName))return r;return this.root}snapshot(){let r=this.root.ownerDocument.createTreeWalker(this.root,Ar|Rr),n="",a=[],i=null;for(let o=r.nextNode();o;o=r.nextNode()){if(o.nodeType===1){o.tagName==="BR"&&(n+=`
|
|
7
7
|
`);continue}let c=o,u=this.blockOf(c);i&&u!==i&&!n.endsWith(`
|
|
8
8
|
`)&&(n+=`
|
|
9
|
-
`),i=u,a.push({node:c,start:n.length,end:n.length+c.data.length}),n+=c.data}return{text:n,segments:a}}pointFor(t,r){for(let a of r){if(t<a.start)return{node:a.node,offset:0};if(t<=a.end)return{node:a.node,offset:t-a.start}}let n=r[r.length-1];return n?{node:n.node,offset:n.node.data.length}:{node:this.root,offset:0}}offsetFor(t,r,n){let a=this.root.ownerDocument.createRange();a.setStart(this.root,0),a.setEnd(t,r);let i=0;for(let o of n){if(o.node===t)return o.start+r;if(a.comparePoint(o.node,o.node.data.length)===0)i=o.end;else break}return i}getText(){return this.snapshot().text}getSelection(){let t=this.root.ownerDocument.getSelection();if(!t||t.rangeCount===0)return null;let r=t.getRangeAt(0);if(!this.root.contains(r.startContainer)||!this.root.contains(r.endContainer))return null;let{segments:n}=this.snapshot();return{start:this.offsetFor(r.startContainer,r.startOffset,n),end:this.offsetFor(r.endContainer,r.endOffset,n)}}replaceDirect(t,r){let n=t.replacement.length===t.end-t.start,a=!0;for(let i of r){let o=Math.max(t.start,i.start),c=Math.min(t.end,i.end);if(!(o>=c)){if(n){let u=t.replacement.slice(o-t.start,c-t.start);i.node.data.slice(o-i.start,c-i.start)!==u&&i.node.replaceData(o-i.start,c-o,u)}else a?i.node.replaceData(o-i.start,c-o,t.replacement):i.node.deleteData(o-i.start,c-o);a=!1}}}apply(t,r){let n=this.root.ownerDocument,{mapping:a}=q(t,r),i=this.getSelection();for(let o of Xe(r)){let{segments:c}=this.snapshot(),u=this.pointFor(o.start,c),
|
|
9
|
+
`),i=u,a.push({node:c,start:n.length,end:n.length+c.data.length}),n+=c.data}return{text:n,segments:a}}pointFor(t,r){for(let a of r){if(t<a.start)return{node:a.node,offset:0};if(t<=a.end)return{node:a.node,offset:t-a.start}}let n=r[r.length-1];return n?{node:n.node,offset:n.node.data.length}:{node:this.root,offset:0}}offsetFor(t,r,n){let a=this.root.ownerDocument.createRange();a.setStart(this.root,0),a.setEnd(t,r);let i=0;for(let o of n){if(o.node===t)return o.start+r;if(a.comparePoint(o.node,o.node.data.length)===0)i=o.end;else break}return i}getText(){return this.snapshot().text}getSelection(){let t=this.root.ownerDocument.getSelection();if(!t||t.rangeCount===0)return null;let r=t.getRangeAt(0);if(!this.root.contains(r.startContainer)||!this.root.contains(r.endContainer))return null;let{segments:n}=this.snapshot();return{start:this.offsetFor(r.startContainer,r.startOffset,n),end:this.offsetFor(r.endContainer,r.endOffset,n)}}replaceDirect(t,r){let n=t.replacement.length===t.end-t.start,a=!0;for(let i of r){let o=Math.max(t.start,i.start),c=Math.min(t.end,i.end);if(!(o>=c)){if(n){let u=t.replacement.slice(o-t.start,c-t.start);i.node.data.slice(o-i.start,c-i.start)!==u&&i.node.replaceData(o-i.start,c-o,u)}else a?i.node.replaceData(o-i.start,c-o,t.replacement):i.node.deleteData(o-i.start,c-o);a=!1}}}apply(t,r){let n=this.root.ownerDocument,{mapping:a}=q(t,r),i=this.getSelection();for(let o of Xe(r)){let{segments:c}=this.snapshot(),u=this.pointFor(o.start,c),l=this.pointFor(o.end,c);if(i&&u.node===l.node&&u.node.nodeType===3&&Ye(n)){let E=n.createRange();E.setStart(u.node,u.offset),E.setEnd(l.node,l.offset);let m=n.getSelection();m?.removeAllRanges(),m?.addRange(E);try{if(n.execCommand("insertText",!1,o.replacement))continue}catch{}}this.replaceDirect(o,c)}if(i){let{segments:o}=this.snapshot(),c=this.pointFor(a.toTransformed(i.start),o),u=this.pointFor(a.toTransformed(i.end),o),l=n.createRange();l.setStart(c.node,c.offset),l.setEnd(u.node,u.offset);let E=n.getSelection();E?.removeAllRanges(),E?.addRange(l)}}};var Mr=["type","contenteditable","data-safetype","readonly","disabled","autocomplete","name"],ae=new WeakMap;function Dr(e){let t=ae.get(e);if(t){t.count++;return}let r=e.nodeType===9?e:e.ownerDocument,n=r.createElement("style");n.setAttribute("data-safetype",""),n.textContent=Ge,(e.nodeType===9?r.head??r.documentElement:e).appendChild(n),ae.set(e,{node:n,count:1})}function Lr(e){let t=ae.get(e);t&&--t.count===0&&(t.node.remove(),ae.delete(e))}var Fr={moderated:"onModerated",violation:"onViolation",warning:"onWarning",blocked:"onBlocked"};function Qe(e={}){let{selector:t=Q,root:r,engine:n,observeDynamicElements:a=!0,excludeSelectors:i=[],showMessages:o=!0,messages:c={},injectStyles:u=!0,blockSubmit:l=!0,asyncModeration:E,asyncDebounceMs:m=300,onModerated:b,onViolation:T,onWarning:S,onBlocked:B,onError:U,..._}=e,K={onModerated:b,onViolation:T,onWarning:S,onBlocked:B},O=n??Y(_),$=(d,y)=>{U?U(d,y):console.error("[safetype]",d)};n||O.on("error",({error:d})=>$(d));let M=new Map,z=null,A=null,s=!1,h=!1,v=(d,y,k)=>{try{K[Fr[d]]?.(y,k)}catch(ie){$(ie,k)}let R=k.ownerDocument.defaultView;R&&k.dispatchEvent(new R.CustomEvent(`safetype:${d}`,{bubbles:!0,composed:!0,detail:{result:y,element:k}}))},g={engine:O,showMessages:o,messages:c,asyncModeration:E??(_.classifiers?.length??0)>0,asyncDebounceMs:m,dispatch:v,reportError:$};function f(d){let y=d;if(h)return!1;if(M.has(y))return!0;if(!H(y,i))return!1;let k=Z(y)?new re(y):new ne(y),R=new te(y,k,g);return R.attach(),M.set(y,R),!0}function x(d){let y=M.get(d);y&&(y.detach(),M.delete(d))}let C=d=>d.matches(t);function D(d){C(d)&&f(d),d.querySelectorAll(t).forEach(f)}function F(d){let y=C(d)&&H(d,i),k=M.has(d);y&&!k?f(d):!y&&k&&x(d)}function L(){for(let d of[...M.keys()])d.isConnected||x(d)}let p=d=>{let y=!1;for(let k of d)if(k.type==="childList")k.addedNodes.forEach(R=>{R.nodeType===1&&D(R)}),k.removedNodes.length&&(y=!0);else if(k.type==="attributes"&&k.target.nodeType===1){let R=k.target;F(R),R.querySelectorAll(t).forEach(F)}y&&L()},w=d=>{let y=d.target;if(!y||y.nodeType!==1)return;let k=null;for(let[R,ie]of M){if((Z(R)?R.form:null)!==y&&!y.contains(R))continue;let Ae=ie.run("final");Ae.action==="block"&&(k??(k=R),v("blocked",Ae,R))}k&&l&&(d.preventDefault(),d.stopImmediatePropagation(),k.focus())},I=d=>d.nodeType===1?d.ownerDocument:d,j=d=>d.nodeType===9||d.nodeType===11?d:d.ownerDocument??document,V={engine:O,get running(){return s},get elements(){return[...M.keys()]},start(){if(h)throw new Error("This SafeType instance was destroyed. Create a new one with createSafeType().");if(s)return;let d=r??(typeof document>"u"?null:document);if(!d)throw new Error("@safetype/dom needs a DOM. Pass `root` or call start() in a browser.");if(A=d,s=!0,u&&o&&Dr(j(A)),A.nodeType===1?D(A):A.querySelectorAll(t).forEach(f),I(A).addEventListener("submit",w,!0),a){let k=(A.nodeType===9?A:A.ownerDocument)?.defaultView?.MutationObserver??globalThis.MutationObserver;z=new k(p),z.observe(A,{childList:!0,subtree:!0,attributes:!0,attributeFilter:Mr})}},stop(){if(!(!s||!A)){s=!1,z?.disconnect(),z=null,I(A).removeEventListener("submit",w,!0);for(let d of[...M.keys()])x(d);u&&o&&Lr(j(A)),A=null}},destroy(){V.stop(),h=!0},attach:f,detach:x,getResult(d){return M.get(d)?.result},validate(){L();let d=[];for(let[y,k]of M)d.push({element:y,result:k.run("final")});return{valid:d.every(y=>y.result.allowed),results:d}}};return V}return nt(Ir);})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@safetype/dom",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0",
|
|
4
4
|
"description": "Attach SafeType.js moderation to inputs, textareas and contenteditable elements",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"contenteditable"
|
|
33
33
|
],
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@safetype/core": "1.
|
|
35
|
+
"@safetype/core": "1.10.0"
|
|
36
36
|
},
|
|
37
37
|
"repository": {
|
|
38
38
|
"type": "git",
|