devsite/node_modules/@sindresorhus/transliterate/index.js

36 lines
880 B
JavaScript
Raw Permalink Normal View History

2024-07-08 01:49:38 +00:00
'use strict';
const deburr = require('lodash.deburr');
const escapeStringRegexp = require('escape-string-regexp');
const builtinReplacements = require('./replacements');
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;
};
module.exports = (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 = deburr(string);
return string;
};