@marketto/diacritic-remover
Advanced tools
Comparing version 1.0.6 to 1.0.7
# *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 |
/** | ||
* @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
117909
1640