diff options
| author | Shipwreckt <me@shipwreckt.co.uk> | 2025-10-31 20:02:14 +0000 |
|---|---|---|
| committer | Shipwreckt <me@shipwreckt.co.uk> | 2025-10-31 20:02:14 +0000 |
| commit | 7a52ddeba2a68388b544f529d2d92104420f77b0 (patch) | |
| tree | 15ddd47457a2cb4a96060747437d36474e4f6b4e /node_modules/@sindresorhus/transliterate/index.js | |
| parent | 53d6ae2b5568437afa5e4995580a3fb679b7b91b (diff) | |
Changed from static to 11ty!
Diffstat (limited to 'node_modules/@sindresorhus/transliterate/index.js')
| -rw-r--r-- | node_modules/@sindresorhus/transliterate/index.js | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/node_modules/@sindresorhus/transliterate/index.js b/node_modules/@sindresorhus/transliterate/index.js new file mode 100644 index 0000000..739ebbe --- /dev/null +++ b/node_modules/@sindresorhus/transliterate/index.js @@ -0,0 +1,33 @@ +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; +} |
