Socket
Socket
Sign inDemoInstall

@marketto/diacritic-remover

Package Overview
Dependencies
0
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.6 to 1.0.7

5

CHANGELOG.md
# *diacritic-remover* changelog
## 1.0.7
* Implemented Unicode Marker Regexp compatibility (List of markers for JSCRE engine)
* Tests are spread into multiple files
* Implemented Tests and simulator for environments unsupporting Unicode Marker RegExp
* Updated dependencies
## 1.0.6

@@ -4,0 +9,0 @@ * Improved dictionaries

43

dist/diacritic-remover.bundle.js
/**
* @marketto/diacritic-remover 1.0.6
* @marketto/diacritic-remover 1.0.7
* Copyright (c) 2019, Marco Ricupero <marco.ricupero@gmail.com>

@@ -19,9 +19,17 @@ * License: MIT

constructor() {
this.USE_VALIDATOR = false;
this.FALLBACK_MARKER_MATCHER = "̸̵̶̡̢̨̛͓̳̜̪̟̠̻̖̹̣̤̙͚̱͇̬͕̰͍̮͎̝͈̫͐̂̍̅̔͋͂͗̃̈̏̎̄̿͌̑̓̈́̇̆̕͘͜͝ͅ";
this.LOWERCASE_MARKER_MATCHER = "\\p{M}";
this.UPPERCASE_MARKER_MATCHER = "\\P{M}";
this.MARKER_REGEXP = new RegExp(`(${this.LOWERCASE_MARKER_MATCHER})`, "gui");
this.IS_MARKER_REPLACING_AVAILABLE = false;
try {
this.IS_MARKER_REPLACING_AVAILABLE = !!(new RegExp(`(${this.LOWERCASE_MARKER_MATCHER})`, "gui"));
}
catch (err) {
return;
}
}
get(target, prop, receiver) {
if (prop.length <= 1) {
return this.diacriticTrap(target, prop);
return this.USE_VALIDATOR ? this.diacriticValidatorTrap(target, prop) : this.diacriticTrap(target, prop);
}

@@ -31,4 +39,17 @@ return Reflect.get(target, prop, receiver);

diacriticTrap(target, char) {
return char.replace(this.MARKER_REGEXP, "");
return char.replace(this.diacriticValidatorTrap(target, char), "");
}
diacriticValidatorTrap(target, char) {
return this.INSENSITIVE_MARKER_REGEXP;
}
get INSENSITIVE_MARKER_REGEXP() {
return new RegExp(this.IS_MARKER_REPLACING_AVAILABLE ?
`(${this.LOWERCASE_MARKER_MATCHER})` :
`([${this.FALLBACK_MARKER_MATCHER}]*)`, "gui");
}
get INSENSITIVE_MARKER_MATCHER() {
return this.IS_MARKER_REPLACING_AVAILABLE ?
`[${this.LOWERCASE_MARKER_MATCHER}${this.UPPERCASE_MARKER_MATCHER}]*` :
`[${this.FALLBACK_MARKER_MATCHER}${this.FALLBACK_MARKER_MATCHER.toUpperCase()}]*`;
}
}

@@ -51,4 +72,8 @@

class DiacriticValidatorHandler extends DiacriticAbstractHandler {
diacriticTrap(target, char) {
const cleanChar = super.diacriticTrap(target, char);
constructor() {
super(...arguments);
this.USE_VALIDATOR = true;
}
diacriticValidatorTrap(target, char) {
const cleanChar = char.replace(super.diacriticValidatorTrap(target, char), "");
const diacritics = target.dictionary[char.toLowerCase()] || "";

@@ -59,3 +84,3 @@ let charMatcher = "";

charMatcher = `[${cleanChar}${diacritics}]`;
markerMatcher = `(?:[${this.LOWERCASE_MARKER_MATCHER}${this.UPPERCASE_MARKER_MATCHER}]*)`;
markerMatcher = this.INSENSITIVE_MARKER_MATCHER;
if (target.isUpperCase(cleanChar)) {

@@ -70,4 +95,4 @@ charMatcher = charMatcher.toUpperCase();

class DiacriticInsensitiveValidatorHandler extends DiacriticValidatorHandler {
diacriticTrap(target, char) {
const { source } = super.diacriticTrap(target, char);
diacriticValidatorTrap(target, char) {
const { source } = super.diacriticValidatorTrap(target, char);
return new RegExp(source, "ui");

@@ -74,0 +99,0 @@ }

/**
* @marketto/diacritic-remover 1.0.6
* @marketto/diacritic-remover 1.0.7
* Copyright (c) 2019, Marco Ricupero <marco.ricupero@gmail.com>

@@ -14,2 +14,2 @@ * License: MIT

*/
var DiacriticRemover=function(){"use strict";class e{constructor(){this.LOWERCASE_MARKER_MATCHER="\\p{M}",this.UPPERCASE_MARKER_MATCHER="\\P{M}",this.MARKER_REGEXP=new RegExp(`(${this.LOWERCASE_MARKER_MATCHER})`,"gui")}get(e,t,r){return t.length<=1?this.diacriticTrap(e,t):Reflect.get(e,t,r)}diacriticTrap(e,t){return t.replace(this.MARKER_REGEXP,"")}}class t extends e{diacriticTrap(e,t){const r=super.diacriticTrap(e,t).toLowerCase(),i=e.dictionary[r]||"";return[...new Set([r,r.toUpperCase(),...i,...i.toUpperCase()])].sort().join("")}}class r extends e{diacriticTrap(e,t){const r=super.diacriticTrap(e,t),i=e.dictionary[t.toLowerCase()]||"";let s="",n="";return(r||i)&&(s=`[${r}${i}]`,n=`(?:[${this.LOWERCASE_MARKER_MATCHER}${this.UPPERCASE_MARKER_MATCHER}]*)`,e.isUpperCase(r)&&(s=s.toUpperCase())),new RegExp(`^${s}${n}$`,"u")}}class i extends r{diacriticTrap(e,t){const{source:r}=super.diacriticTrap(e,t);return new RegExp(r,"ui")}}class s extends e{diacriticTrap(e,t){let r=super.diacriticTrap(e,t);const i=e.dictionary[t.toLowerCase()];return i&&(r+=e.isUpperCase(r)?i.toUpperCase():i),r}}class n{constructor(e={}){this.dictionary=e,this.matcher=new Proxy(this,new s),this.insensitiveMatcher=new Proxy(this,new t),this.validator=new Proxy(this,new r),this.insensitiveValidator=new Proxy(this,new i)}matcherBy(e){return[...Object.entries(this.dictionary).filter(([t,r])=>r&&e.test(t)).map(([e,t])=>e+t),...Object.entries(this.dictionary).filter(([t,r])=>r&&e.test(t.toUpperCase())).map(([e,t])=>(e+t).toUpperCase())].join("")}replace(e){return e.replace(/./g,e=>this[e])}isUpperCase(e=""){return e.toLowerCase()!==e}isLowerCase(e=""){return e.toUpperCase()!==e}}class c extends e{diacriticTrap(e,t){const r=super.diacriticTrap(e,t);if(!r.trim()||1!==r.length)return r;const i=r.toLowerCase(),[s]=Object.entries(e.dictionary).find(([e,t])=>(function(e){return"string"==typeof e})(t)&&[e,...t].includes(i))||[r];return e.isUpperCase(r)?s.toUpperCase():s}}var a={"":"ʰ'ʼ·׳"},o={a:"àáâãäåāăąǎǟǡǻȁȃȧɐɑɒᴀᶏḁạảấầẩẫậắằẳẵặⱥa",ae:"æǣǽᴁᴂᴭᵆ",b:"ƀƃɓʙᵬᶀḃḅḇb",c:"cçćĉċčƈȼɕ̄ᴄḉc",d:"dðþďđƌȡɖɗ̦ᴅᵭᶁᶑḋḍḏḑḓd",db:"ȸ",dz:"dždz",e:"èéêëēĕėęěǝȅȇȩɇəɛᴇᶒḕḗḙḛḝẹẻẽếềểễệⱸe",eo:"ᴔ",f:"fƒᵮᶂḟꜰfff",g:"ĝğġģǥǧǵȝɠɢᶃḡg",h:"hĥħȟɦʜʰ̱ḣḥḧḩḫẖⱨh",i:"iìíîïĩīĭįıǐȉȋɨɩɪ̇ᵻᶖḭḯỉịi",ij:"ij",j:"jĵǰȷɉɟʄʝ̌ᴊj",k:"ķƙǩᴋᶄḱḳḵⱪꝁk",l:"lĺļľŀłƚȴɫɬɭʟᶅḷḹḻḽⱡl",lj:"lj",m:"ɱᴍᵯᶆḿṁṃm",n:"nñńņňƞǹȵɲɳɴᵰᶇṅṇṉṋn",nj:"ŋnj̈",o:"òóôõöøōŏőơǒǫǭǿȍȏȫȭȯȱɔɵᴏṍṏṑṓọỏốồổỗộớờởỡợⱺo",oe:"œ",p:"pƥƿ̃ᴘᵱᵽᶈṕṗp",q:"ƣɋʠq",qp:"ȹ",r:"ŕŗřȑȓɍɼɽɾʀᵲᵳᶉṙṛṝṟꝛr",s:"sśŝşšſșȿʂʃ̩ᵴᶊṡṣṥṧṩẛꜱs",ss:"ß",t:"tţťŧƫƭțȶʈᴛᵵṫṭṯṱẗⱦt",u:"ùúûüũūŭůűųưǔǖǘǚǜȕȗʉʊᴜᵾṳṵṷṹṻụủứừửữựu",ue:"ᵫ",uo:"ȣ",ut:"ᶙ",v:"ʋʌᴠᶌṽṿⱱⱴv",w:"ŵᴡẁẃẅẇẉẘⱳw",x:"ᶍẋẍx",y:"ýÿŷƴȳɏʏẏẙỳỵỷỹy",z:"zźżžƶƹȥɀʐʑʒᴢᵶᶎẑẓẕⱬz"};return class extends n{constructor(...e){super();const t=Object.freeze((e.length?e:[o,a]).reduce((e,t)=>[...e,...Object.entries(t)],[]).reduce((e,[t,r])=>{let i=e.find(([e])=>e===t);return i||(i=[t,[]],e.push(i)),i[1]=[...i[1],...r],e},[]).reduce((e,[t,r])=>Object.assign(Object.assign({},e),{[t]:[...new Set(r)].sort().join("")}),{}));return Object.defineProperty(this,"dictionary",{configurable:!1,enumerable:!1,value:t}),new Proxy(this,new c)}}}();
var DiacriticRemover=function(){"use strict";class e{constructor(){this.USE_VALIDATOR=!1,this.FALLBACK_MARKER_MATCHER="̸̵̶̡̢̨̛͓̳̜̪̟̠̻̖̹̣̤̙͚̱͇̬͕̰͍̮͎̝͈̫͐̂̍̅̔͋͂͗̃̈̏̎̄̿͌̑̓̈́̇̆̕͘͜͝ͅ",this.LOWERCASE_MARKER_MATCHER="\\p{M}",this.UPPERCASE_MARKER_MATCHER="\\P{M}",this.IS_MARKER_REPLACING_AVAILABLE=!1;try{this.IS_MARKER_REPLACING_AVAILABLE=!!new RegExp(`(${this.LOWERCASE_MARKER_MATCHER})`,"gui")}catch(e){return}}get(e,t,r){return t.length<=1?this.USE_VALIDATOR?this.diacriticValidatorTrap(e,t):this.diacriticTrap(e,t):Reflect.get(e,t,r)}diacriticTrap(e,t){return t.replace(this.diacriticValidatorTrap(e,t),"")}diacriticValidatorTrap(e,t){return this.INSENSITIVE_MARKER_REGEXP}get INSENSITIVE_MARKER_REGEXP(){return new RegExp(this.IS_MARKER_REPLACING_AVAILABLE?`(${this.LOWERCASE_MARKER_MATCHER})`:`([${this.FALLBACK_MARKER_MATCHER}]*)`,"gui")}get INSENSITIVE_MARKER_MATCHER(){return this.IS_MARKER_REPLACING_AVAILABLE?`[${this.LOWERCASE_MARKER_MATCHER}${this.UPPERCASE_MARKER_MATCHER}]*`:`[${this.FALLBACK_MARKER_MATCHER}${this.FALLBACK_MARKER_MATCHER.toUpperCase()}]*`}}class t extends e{diacriticTrap(e,t){const r=super.diacriticTrap(e,t).toLowerCase(),i=e.dictionary[r]||"";return[...new Set([r,r.toUpperCase(),...i,...i.toUpperCase()])].sort().join("")}}class r extends e{constructor(){super(...arguments),this.USE_VALIDATOR=!0}diacriticValidatorTrap(e,t){const r=t.replace(super.diacriticValidatorTrap(e,t),""),i=e.dictionary[t.toLowerCase()]||"";let s="",a="";return(r||i)&&(s=`[${r}${i}]`,a=this.INSENSITIVE_MARKER_MATCHER,e.isUpperCase(r)&&(s=s.toUpperCase())),new RegExp(`^${s}${a}$`,"u")}}class i extends r{diacriticValidatorTrap(e,t){const{source:r}=super.diacriticValidatorTrap(e,t);return new RegExp(r,"ui")}}class s extends e{diacriticTrap(e,t){let r=super.diacriticTrap(e,t);const i=e.dictionary[t.toLowerCase()];return i&&(r+=e.isUpperCase(r)?i.toUpperCase():i),r}}class a extends e{diacriticTrap(e,t){const r=super.diacriticTrap(e,t);if(!r.trim()||1!==r.length)return r;const i=r.toLowerCase(),[s]=Object.entries(e.dictionary).find(([e,t])=>"string"==typeof t&&[e,...t].includes(i))||[r];return e.isUpperCase(r)?s.toUpperCase():s}}var c={"":"ʰ'ʼ·׳"},n={a:"àáâãäåāăąǎǟǡǻȁȃȧɐɑɒᴀᶏḁạảấầẩẫậắằẳẵặⱥa",ae:"æǣǽᴁᴂᴭᵆ",b:"ƀƃɓʙᵬᶀḃḅḇb",c:"cçćĉċčƈȼɕ̄ᴄḉc",d:"dðþďđƌȡɖɗ̦ᴅᵭᶁᶑḋḍḏḑḓd",db:"ȸ",dz:"dždz",e:"èéêëēĕėęěǝȅȇȩɇəɛᴇᶒḕḗḙḛḝẹẻẽếềểễệⱸe",eo:"ᴔ",f:"fƒᵮᶂḟꜰfff",g:"ĝğġģǥǧǵȝɠɢᶃḡg",h:"hĥħȟɦʜʰ̱ḣḥḧḩḫẖⱨh",i:"iìíîïĩīĭįıǐȉȋɨɩɪ̇ᵻᶖḭḯỉịi",ij:"ij",j:"jĵǰȷɉɟʄʝ̌ᴊj",k:"ķƙǩᴋᶄḱḳḵⱪꝁk",l:"lĺļľŀłƚȴɫɬɭʟᶅḷḹḻḽⱡl",lj:"lj",m:"ɱᴍᵯᶆḿṁṃm",n:"nñńņňƞǹȵɲɳɴᵰᶇṅṇṉṋn",nj:"ŋnj̈",o:"òóôõöøōŏőơǒǫǭǿȍȏȫȭȯȱɔɵᴏṍṏṑṓọỏốồổỗộớờởỡợⱺo",oe:"œ",p:"pƥƿ̃ᴘᵱᵽᶈṕṗp",q:"ƣɋʠq",qp:"ȹ",r:"ŕŗřȑȓɍɼɽɾʀᵲᵳᶉṙṛṝṟꝛr",s:"sśŝşšſșȿʂʃ̩ᵴᶊṡṣṥṧṩẛꜱs",ss:"ß",t:"tţťŧƫƭțȶʈᴛᵵṫṭṯṱẗⱦt",u:"ùúûüũūŭůűųưǔǖǘǚǜȕȗʉʊᴜᵾṳṵṷṹṻụủứừửữựu",ue:"ᵫ",uo:"ȣ",ut:"ᶙ",v:"ʋʌᴠᶌṽṿⱱⱴv",w:"ŵᴡẁẃẅẇẉẘⱳw",x:"ᶍẋẍx",y:"ýÿŷƴȳɏʏẏẙỳỵỷỹy",z:"zźżžƶƹȥɀʐʑʒᴢᵶᶎẑẓẕⱬz"};return class extends class{constructor(e={}){this.dictionary=e,this.matcher=new Proxy(this,new s),this.insensitiveMatcher=new Proxy(this,new t),this.validator=new Proxy(this,new r),this.insensitiveValidator=new Proxy(this,new i)}matcherBy(e){return[...Object.entries(this.dictionary).filter(([t,r])=>r&&e.test(t)).map(([e,t])=>e+t),...Object.entries(this.dictionary).filter(([t,r])=>r&&e.test(t.toUpperCase())).map(([e,t])=>(e+t).toUpperCase())].join("")}replace(e){return e.replace(/./g,e=>this[e])}isUpperCase(e=""){return e.toLowerCase()!==e}isLowerCase(e=""){return e.toUpperCase()!==e}}{constructor(...e){super();const t=Object.freeze((e.length?e:[n,c]).reduce((e,t)=>[...e,...Object.entries(t)],[]).reduce((e,[t,r])=>{let i=e.find(([e])=>e===t);return i||(i=[t,[]],e.push(i)),i[1]=[...i[1],...r],e},[]).reduce((e,[t,r])=>Object.assign(Object.assign({},e),{[t]:[...new Set(r)].sort().join("")}),{}));return Object.defineProperty(this,"dictionary",{configurable:!1,enumerable:!1,value:t}),new Proxy(this,new a)}}}();
/**
* @marketto/diacritic-remover 1.0.6
* @marketto/diacritic-remover 1.0.7
* Copyright (c) 2019, Marco Ricupero <marco.ricupero@gmail.com>

@@ -18,9 +18,17 @@ * License: MIT

constructor() {
this.USE_VALIDATOR = false;
this.FALLBACK_MARKER_MATCHER = "̸̵̶̡̢̨̛͓̳̜̪̟̠̻̖̹̣̤̙͚̱͇̬͕̰͍̮͎̝͈̫͐̂̍̅̔͋͂͗̃̈̏̎̄̿͌̑̓̈́̇̆̕͘͜͝ͅ";
this.LOWERCASE_MARKER_MATCHER = "\\p{M}";
this.UPPERCASE_MARKER_MATCHER = "\\P{M}";
this.MARKER_REGEXP = new RegExp(`(${this.LOWERCASE_MARKER_MATCHER})`, "gui");
this.IS_MARKER_REPLACING_AVAILABLE = false;
try {
this.IS_MARKER_REPLACING_AVAILABLE = !!(new RegExp(`(${this.LOWERCASE_MARKER_MATCHER})`, "gui"));
}
catch (err) {
return;
}
}
get(target, prop, receiver) {
if (prop.length <= 1) {
return this.diacriticTrap(target, prop);
return this.USE_VALIDATOR ? this.diacriticValidatorTrap(target, prop) : this.diacriticTrap(target, prop);
}

@@ -30,4 +38,17 @@ return Reflect.get(target, prop, receiver);

diacriticTrap(target, char) {
return char.replace(this.MARKER_REGEXP, "");
return char.replace(this.diacriticValidatorTrap(target, char), "");
}
diacriticValidatorTrap(target, char) {
return this.INSENSITIVE_MARKER_REGEXP;
}
get INSENSITIVE_MARKER_REGEXP() {
return new RegExp(this.IS_MARKER_REPLACING_AVAILABLE ?
`(${this.LOWERCASE_MARKER_MATCHER})` :
`([${this.FALLBACK_MARKER_MATCHER}]*)`, "gui");
}
get INSENSITIVE_MARKER_MATCHER() {
return this.IS_MARKER_REPLACING_AVAILABLE ?
`[${this.LOWERCASE_MARKER_MATCHER}${this.UPPERCASE_MARKER_MATCHER}]*` :
`[${this.FALLBACK_MARKER_MATCHER}${this.FALLBACK_MARKER_MATCHER.toUpperCase()}]*`;
}
}

@@ -50,4 +71,8 @@

class DiacriticValidatorHandler extends DiacriticAbstractHandler {
diacriticTrap(target, char) {
const cleanChar = super.diacriticTrap(target, char);
constructor() {
super(...arguments);
this.USE_VALIDATOR = true;
}
diacriticValidatorTrap(target, char) {
const cleanChar = char.replace(super.diacriticValidatorTrap(target, char), "");
const diacritics = target.dictionary[char.toLowerCase()] || "";

@@ -58,3 +83,3 @@ let charMatcher = "";

charMatcher = `[${cleanChar}${diacritics}]`;
markerMatcher = `(?:[${this.LOWERCASE_MARKER_MATCHER}${this.UPPERCASE_MARKER_MATCHER}]*)`;
markerMatcher = this.INSENSITIVE_MARKER_MATCHER;
if (target.isUpperCase(cleanChar)) {

@@ -69,4 +94,4 @@ charMatcher = charMatcher.toUpperCase();

class DiacriticInsensitiveValidatorHandler extends DiacriticValidatorHandler {
diacriticTrap(target, char) {
const { source } = super.diacriticTrap(target, char);
diacriticValidatorTrap(target, char) {
const { source } = super.diacriticValidatorTrap(target, char);
return new RegExp(source, "ui");

@@ -73,0 +98,0 @@ }

{
"name": "@marketto/diacritic-remover",
"version": "1.0.6",
"version": "1.0.7",
"description": "Tool to replace diacritics in strings",

@@ -25,25 +25,25 @@ "main": "dist/diacritic-remover.js",

"@istanbuljs/nyc-config-typescript": "^0.1.3",
"@rollup/plugin-json": "^4.0.0",
"@types/chai": "^4.2.5",
"@rollup/plugin-json": "^4.0.3",
"@types/chai": "^4.2.11",
"@types/mocha": "^5.2.7",
"@types/node": "^12.12.7",
"@wessberg/rollup-plugin-ts": "^1.1.83",
"@types/node": "^12.12.37",
"@wessberg/rollup-plugin-ts": "^1.2.24",
"chai": "^4.2.0",
"cross-env": "^6.0.3",
"mocha": "^6.2.2",
"mocha": "^7.1.2",
"nyc": "^14.1.1",
"relcov": "^1.0.6",
"rimraf": "^3.0.0",
"rollup": "^1.26.3",
"rimraf": "^3.0.2",
"rollup": "^1.32.1",
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-license": "^0.12.1",
"rollup-plugin-license": "^2.0.0",
"rollup-plugin-node-builtins": "^2.1.2",
"rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-terser": "^5.1.3",
"ts-node": "^8.4.1",
"rollup-plugin-terser": "^5.3.0",
"ts-node": "^8.9.1",
"tslint": "^5.20.1",
"typescript": "^3.7.2"
"typescript": "^3.8.3"
},
"scripts": {
"release": "npm audit fix && npm audit fix && npm run-script lint-fix && npm run-script coverage && npm run-script build",
"release": "npm audit fix && npm run lint-fix && npm run coverage && npm run build",
"build": "npx rimraf ./dist & npx rollup -c",

@@ -53,3 +53,3 @@ "lint": "npx tslint -c tslint.json \"src/**/*.ts\"",

"test": "npx nyc npx mocha",
"coverage": "mkdir coverage \n npm run-script test && npx nyc report --reporter=text-lcov | npx relcov > coverage/lcov.info"
"coverage": "mkdir coverage & npm run test && npx nyc report --reporter=text-lcov | npx relcov > coverage/lcov.info"
},

@@ -56,0 +56,0 @@ "author": "Marco Ricupero <marco.ricupero@gmail.com>",

@@ -52,7 +52,4 @@ import rollupPluginTs from "@wessberg/rollup-plugin-ts";

declaration: false,
module: "iife",
module: "es2015",
target: "ES2015",
namedExports: {
}
},

@@ -59,0 +56,0 @@ });

import IDiacriticMapper from "../interfaces/diacritic-mapper.interface";
abstract class DiacriticAbstractHandler implements ProxyHandler<IDiacriticMapper> {
protected LOWERCASE_MARKER_MATCHER: string = "\\p{M}";
protected UPPERCASE_MARKER_MATCHER: string = "\\P{M}";
protected MARKER_REGEXP: RegExp = new RegExp(`(${this.LOWERCASE_MARKER_MATCHER})`, "gui");
protected USE_VALIDATOR: boolean = false;
private FALLBACK_MARKER_MATCHER: string = "̸̵̶̡̢̨̛͓̳̜̪̟̠̻̖̹̣̤̙͚̱͇̬͕̰͍̮͎̝͈̫͐̂̍̅̔͋͂͗̃̈̏̎̄̿͌̑̓̈́̇̆̕͘͜͝ͅ";
private LOWERCASE_MARKER_MATCHER: string = "\\p{M}";
private UPPERCASE_MARKER_MATCHER: string = "\\P{M}";
private IS_MARKER_REPLACING_AVAILABLE = false;
constructor() {
try {
this.IS_MARKER_REPLACING_AVAILABLE = !!(new RegExp(`(${this.LOWERCASE_MARKER_MATCHER})`, "gui"));
} catch (err) {
return;
}
}
public get(target: IDiacriticMapper, prop: string, receiver: any): any {
if (prop.length <= 1) {
return this.diacriticTrap(target, prop);
}
return Reflect.get(target, prop, receiver);
if (prop.length <= 1) {
return this.USE_VALIDATOR ? this.diacriticValidatorTrap(target, prop) : this.diacriticTrap(target, prop);
}
return Reflect.get(target, prop, receiver);
}
protected diacriticTrap(target: IDiacriticMapper, char: string): any {
return char.replace(this.MARKER_REGEXP, "");
protected diacriticTrap(target: IDiacriticMapper, char: string): string {
return char.replace(this.diacriticValidatorTrap(target, char), "");
}
protected diacriticValidatorTrap(target: IDiacriticMapper, char: string): RegExp {
return this.INSENSITIVE_MARKER_REGEXP;
}
protected get INSENSITIVE_MARKER_REGEXP(): RegExp {
return new RegExp(this.IS_MARKER_REPLACING_AVAILABLE ?
`(${this.LOWERCASE_MARKER_MATCHER})` :
`([${this.FALLBACK_MARKER_MATCHER}]*)`, "gui");
}
protected get INSENSITIVE_MARKER_MATCHER(): string {
return this.IS_MARKER_REPLACING_AVAILABLE ?
`[${this.LOWERCASE_MARKER_MATCHER}${this.UPPERCASE_MARKER_MATCHER}]*` :
`[${this.FALLBACK_MARKER_MATCHER}${this.FALLBACK_MARKER_MATCHER.toUpperCase()}]*`;
}
}
export default DiacriticAbstractHandler;

@@ -5,4 +5,4 @@ import IDiacriticMapper from "../interfaces/diacritic-mapper.interface";

class DiacriticInsensitiveValidatorHandler extends DiacriticValidatorHandler {
protected diacriticTrap(target: IDiacriticMapper, char: string): RegExp {
const { source } = super.diacriticTrap(target, char);
protected diacriticValidatorTrap(target: IDiacriticMapper, char: string): RegExp {
const { source } = super.diacriticValidatorTrap(target, char);
return new RegExp(source, "ui");

@@ -9,0 +9,0 @@ }

@@ -5,4 +5,5 @@ import IDiacriticMapper from "../interfaces/diacritic-mapper.interface";

class DiacriticValidatorHandler extends DiacriticAbstractHandler {
protected diacriticTrap(target: IDiacriticMapper, char: string): RegExp {
const cleanChar = super.diacriticTrap(target, char);
protected USE_VALIDATOR: boolean = true;
protected diacriticValidatorTrap(target: IDiacriticMapper, char: string): RegExp {
const cleanChar = char.replace(super.diacriticValidatorTrap(target, char), "");
const diacritics = target.dictionary[char.toLowerCase()] || "";

@@ -13,3 +14,3 @@ let charMatcher = "";

charMatcher = `[${cleanChar}${diacritics}]`;
markerMatcher = `(?:[${this.LOWERCASE_MARKER_MATCHER}${this.UPPERCASE_MARKER_MATCHER}]*)`;
markerMatcher = this.INSENSITIVE_MARKER_MATCHER;
if (target.isUpperCase(cleanChar)) {

@@ -16,0 +17,0 @@ charMatcher = charMatcher.toUpperCase();

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc