123456789101112131415161718192021222324252627282930313233 |
- import escapeStringRegexp from 'escape-string-regexp';
- import builtinReplacements from './replacements.js';
- const doCustomReplacements = (string, replacements) => {
- for (const [key, value] of replacements) {
- // TODO: Use `String#replaceAll()` when targeting Node.js 16.
- string = string.replace(new RegExp(escapeStringRegexp(key), 'g'), value);
- }
- return string;
- };
- export default function transliterate(string, options) {
- if (typeof string !== 'string') {
- throw new TypeError(`Expected a string, got \`${typeof string}\``);
- }
- options = {
- customReplacements: [],
- ...options
- };
- const customReplacements = new Map([
- ...builtinReplacements,
- ...options.customReplacements
- ]);
- string = string.normalize();
- string = doCustomReplacements(string, customReplacements);
- string = string.normalize('NFD').replace(/\p{Diacritic}/gu, '').normalize();
- return string;
- }
|