UNPKG

extra-string

Version:

A collection of common string functions.

893 lines (886 loc) 31.6 kB
'use strict'; function getDefaultExportFromCjs (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } var _build$1 = {}; var extraFunction = {}; Object.defineProperty(extraFunction, '__esModule', { value: true }); var _build = {}; Object.defineProperty(_build, "__esModule", { value: true }); extraFunction.throttleEarly = _build.throttleEarly = extraFunction.throttle = _build.throttle = extraFunction.debounceEarly = _build.debounceEarly = extraFunction.debounce = _build.debounce = extraFunction.after = _build.after = extraFunction.restrictAfter = _build.restrictAfter = extraFunction.before = _build.before = extraFunction.restrictBefore = _build.restrictBefore = extraFunction.once = _build.once = extraFunction.restrictOnce = _build.restrictOnce = extraFunction.restrict = _build.restrict = extraFunction.delay = _build.delay = extraFunction.defer = _build.defer = extraFunction.curryRight = _build.curryRight = extraFunction.curry = _build.curry = extraFunction.composeRight = _build.composeRight = extraFunction.compose = _build.compose = extraFunction.partialRight = _build.partialRight = extraFunction.attachRight = _build.attachRight = extraFunction.partial = _build.partial = extraFunction.attach = _build.attach = extraFunction.unspread = _build.unspread = extraFunction.spread = _build.spread = extraFunction.flip = _build.flip = extraFunction.reverse = _build.reverse = extraFunction.memoize = _build.memoize = extraFunction.negate = _build.negate = extraFunction.decontextify = _build.decontextify = extraFunction.contextify = _build.contextify = extraFunction.isGenerator = _build.isGenerator = extraFunction.isAsync = _build.isAsync = extraFunction.is = _build.is = extraFunction.apply = _build.apply = extraFunction.call = _build.call = extraFunction.bind = _build.bind = extraFunction.arity = _build.arity = extraFunction.length = _build.length = extraFunction.name = _build.name = extraFunction.ARGUMENTS = _build.ARGUMENTS = extraFunction.COMPARE = _build.COMPARE = extraFunction.IDENTITY = _build.IDENTITY = extraFunction.TRUE = _build.TRUE = extraFunction.FALSE = _build.FALSE = extraFunction.NOOP = _build.NOOP = void 0; function NOOP(...args) { } extraFunction.NOOP = _build.NOOP = NOOP; function FALSE(...args) { return false; } extraFunction.FALSE = _build.FALSE = FALSE; function TRUE(...args) { return true; } extraFunction.TRUE = _build.TRUE = TRUE; function IDENTITY(v) { return v; } extraFunction.IDENTITY = _build.IDENTITY = IDENTITY; function COMPARE(a, b) { return a < b ? -1 : (a > b ? 1 : 0); } extraFunction.COMPARE = _build.COMPARE = COMPARE; function ARGUMENTS(...args) { return args; } extraFunction.ARGUMENTS = _build.ARGUMENTS = ARGUMENTS; function name(x) { return x.name; } extraFunction.name = _build.name = name; function length(x) { return x.length; } extraFunction.length = _build.length = length; extraFunction.arity = _build.arity = length; function bind(x, ths, ...prefix) { return x.bind(ths, ...prefix); } extraFunction.bind = _build.bind = bind; function call(x, ths = null, ...args) { return x.call(ths, ...args); } extraFunction.call = _build.call = call; function apply(x, ths = null, args) { return x.apply(ths, args); } extraFunction.apply = _build.apply = apply; function is(v) { return typeof v === "function"; } extraFunction.is = _build.is = is; function isAsync(v) { const AsyncFunction = (async function () { }).constructor; return v instanceof AsyncFunction; } extraFunction.isAsync = _build.isAsync = isAsync; function isGenerator(v) { const GeneratorFunction = (function* () { }).constructor; return v instanceof GeneratorFunction; } extraFunction.isGenerator = _build.isGenerator = isGenerator; function contextify(x) { return function (...args) { return x(this, ...args); }; } extraFunction.contextify = _build.contextify = contextify; function decontextify(x) { return (ths = null, ...args) => x.call(ths, ...args); } extraFunction.decontextify = _build.decontextify = decontextify; function negate(x) { return (...args) => !x(...args); } extraFunction.negate = _build.negate = negate; function memoize(x, fr = null, cache = null) { var fr = fr || IDENTITY; var cache = cache || new Map(); return (...args) => { var k = fr(...args); if (cache.has(k)) return cache.get(k); var v = x(...args); cache.set(k, v); return v; }; } extraFunction.memoize = _build.memoize = memoize; function reverse(x) { return (...args) => x(...args.reverse()); } extraFunction.reverse = _build.reverse = reverse; extraFunction.flip = _build.flip = reverse; function spread(x) { return (...args) => x(args); } extraFunction.spread = _build.spread = spread; function unspread(x) { return (args) => x(...args); } extraFunction.unspread = _build.unspread = unspread; function attach(x, ...prefix) { return (...args) => x(...prefix, ...args); } extraFunction.attach = _build.attach = attach; extraFunction.partial = _build.partial = attach; function attachRight(x, ...suffix) { return (...args) => x(...args, ...suffix); } extraFunction.attachRight = _build.attachRight = attachRight; extraFunction.partialRight = _build.partialRight = attachRight; function compose(...xs) { return composeRight(...xs.reverse()); } extraFunction.compose = _build.compose = compose; function composeRight(...xs) { return (...args) => { if (xs.length === 0) return; var a = xs[0](...args); for (var i = 1, I = xs.length; i < I; i++) a = xs[i](a); return a; }; } extraFunction.composeRight = _build.composeRight = composeRight; function curry(x, n = x.length) { return (...args) => { if (args.length >= n) return x(...args); else return curry((...rest) => x(...args, ...rest), n - args.length); }; } extraFunction.curry = _build.curry = curry; function curryRight(x, n = x.length) { return curry(reverse(x), n); } extraFunction.curryRight = _build.curryRight = curryRight; function defer(x) { return (...args) => { var h = setImmediate(flush); function clear() { clearImmediate(h); h = null; } function flush() { x(...args); clear(); } return { clear, flush }; }; } extraFunction.defer = _build.defer = defer; function delay(x, t) { return (...args) => { var h = setTimeout(flush, t); function clear() { clearTimeout(h); h = null; } function flush() { x(...args); clear(); } return { clear, flush }; }; } extraFunction.delay = _build.delay = delay; function restrict(x, start, end = -1) { var i = -1; return (...args) => { if ((++i < start) === (i < end || end < 0)) return; return x(...args); }; } extraFunction.restrict = _build.restrict = restrict; function restrictOnce(x) { return restrict(x, 0, 1); } extraFunction.restrictOnce = _build.restrictOnce = restrictOnce; extraFunction.once = _build.once = restrictOnce; function restrictBefore(x, n) { return restrict(x, 0, n); } extraFunction.restrictBefore = _build.restrictBefore = restrictBefore; extraFunction.before = _build.before = restrictBefore; function restrictAfter(x, n) { return restrict(x, n); } extraFunction.restrictAfter = _build.restrictAfter = restrictAfter; extraFunction.after = _build.after = restrictAfter; function debounce(x, t, T = -1) { var savedArgs; var h = null, H = null; function clear() { clearTimeout(h); clearTimeout(H); h = H = null; } function flush() { x(...savedArgs); clear(); } return (...args) => { savedArgs = args; if (T >= 0) H = H || setTimeout(flush, T); if (T < 0 || t < T) { clearTimeout(h); h = setTimeout(flush, t); } return { clear, flush }; }; } extraFunction.debounce = _build.debounce = debounce; function debounceEarly(x, t, T = -1) { var h = null, H = null; function clear() { h = H = null; } function flush() { clear(); } return (...args) => { if (!h && !H) x(...args); if (T >= 0) H = H || setTimeout(flush, T); if (T < 0 || t < T) { clearTimeout(h); h = setTimeout(flush, t); } return { clear, flush }; }; } extraFunction.debounceEarly = _build.debounceEarly = debounceEarly; function throttle(x, t) { var savedArgs; var h = null; function clear() { h = null; } function flush() { x(...savedArgs); clear(); } return (...args) => { savedArgs = args; h = h || setTimeout(flush, t); return { clear, flush }; }; } extraFunction.throttle = _build.throttle = throttle; function throttleEarly(x, t) { var h = null; function clear() { h = null; } function flush() { clear(); } return (...args) => { if (!h) x(...args); h = h || setTimeout(flush, t); return { clear, flush }; }; } extraFunction.throttleEarly = _build.throttleEarly = throttleEarly; extraFunction.default = _build; (function (exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.sort = exports.reverse = exports.splice = exports.from = exports.of = exports.normalize = exports.replace = exports.toLocaleLowerCase = exports.toLowerCase = exports.toLocaleUpperCase = exports.toUpperCase = exports.padEnd = exports.padStart = exports.trim = exports.trimEnd = exports.trimStart = exports.split = exports.substring = exports.slice = exports.toString = exports.matchAll = exports.match = exports.search = exports.lastIndexOf = exports.indexOf = exports.endsWith = exports.startsWith = exports.includes = exports.localeCompare = exports.codePointAt = exports.charCodeAt = exports.charAt = exports.size = exports.length = exports.valueOf = exports.repeat = exports.concat = exports.fromCodePoint = exports.fromCharCode = exports.MAX_CODE_POINT = exports.MIN_CODE_POINT = exports.PRINTABLE = exports.WHITESPACE = exports.PUNCTUATION = exports.LETTERS = exports.LOWERCASE = exports.UPPERCASE = exports.HEX_DIGITS = exports.OCT_DIGITS = exports.DIGITS = void 0; exports.jaccardDistance = exports.jaccardIndex = exports.hammingDistance = exports.euclideanDistance = exports.countUniqueMatchingNgrams = exports.countEachMatchingNgram = exports.countMatchingNgrams = exports.uniqueMatchingNgrams = exports.matchingNgrams = exports.countEachNgram = exports.countUniqueNgrams = exports.countNgrams = exports.uniqueNgrams = exports.ngrams = exports.toPascalCase = exports.toCamelCase = exports.toSnakeCase = exports.toKebabCase = exports.toSubscript = exports.toSuperscript = exports.toBaseline = exports.longestUncommonInfixes = exports.longestCommonSuffix = exports.longestCommonPrefix = exports.longestCommonInfix = exports.right = exports.suffix = exports.end = exports.infix = exports.middle = exports.left = exports.prefix = exports.begin = exports.set = exports.getAll = exports.at = exports.get = exports.isInfix = exports.isSuffix = exports.isPrefix = exports.isEqual = exports.compare = exports.codePointRange = exports.indexRange = exports.index = exports.isCharacter = exports.isEmpty = exports.is = exports.spaces = exports.filter = void 0; exports.damerauLevenshteinDistance = exports.levenshteinDistance = exports.jaroWinklerDistance = exports.jaroWinklerSimilarity = exports.jaroDistance = exports.jaroSimilarity = exports.tverskyDistance = exports.tverskyIndex = exports.sorensenDiceDistance = exports.sorensenDiceIndex = void 0; const extra_function_1 = extraFunction; exports.DIGITS = "0123456789"; exports.OCT_DIGITS = "01234567"; exports.HEX_DIGITS = "0123456789ABCDEFabcdef"; exports.UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; exports.LOWERCASE = "abcdefghijklmnopqrstuvwxyz"; exports.LETTERS = exports.UPPERCASE + exports.LOWERCASE; exports.PUNCTUATION = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; exports.WHITESPACE = "\t\n\x0b\x0c\r "; exports.PRINTABLE = exports.DIGITS + exports.LETTERS + exports.PUNCTUATION + exports.WHITESPACE; exports.MIN_CODE_POINT = 0x000000; exports.MAX_CODE_POINT = 0x10FFFF; function fromCharCode(...codes) { return String.fromCharCode(...codes); } exports.fromCharCode = fromCharCode; function fromCodePoint(...codes) { return String.fromCodePoint(...codes); } exports.fromCodePoint = fromCodePoint; function concat(...values) { return "".concat(...values); } exports.concat = concat; function repeat(x, times) { return x.repeat(times); } exports.repeat = repeat; function valueOf(x) { return x.valueOf(); } exports.valueOf = valueOf; function length(x) { return x.length; } exports.length = length; exports.size = length; function charAt(x, at) { return x.charAt(at); } exports.charAt = charAt; function charCodeAt(x, at) { return x.charCodeAt(at); } exports.charCodeAt = charCodeAt; function codePointAt(x, at) { return x.codePointAt(at); } exports.codePointAt = codePointAt; function localeCompare(x, y, locales, options) { return x.localeCompare(y, locales, options); } exports.localeCompare = localeCompare; function includes(x, infix, start) { return x.includes(infix, start); } exports.includes = includes; exports.isInfix = includes; function startsWith(x, prefix, start) { return x.startsWith(prefix, start); } exports.startsWith = startsWith; exports.isPrefix = startsWith; function endsWith(x, suffix, end) { return x.endsWith(suffix, end); } exports.endsWith = endsWith; exports.isSuffix = endsWith; function indexOf(x, infix, start) { return x.indexOf(infix, start); } exports.indexOf = indexOf; function lastIndexOf(x, infix, rstart) { return x.lastIndexOf(infix, rstart); } exports.lastIndexOf = lastIndexOf; function search(x, regexp) { return x.search(regexp); } exports.search = search; function match(x, regexp) { return x.match(regexp); } exports.match = match; function matchAll(x, regexp) { return x.matchAll(regexp); } exports.matchAll = matchAll; function toString(x) { return x.toString(); } exports.toString = toString; function slice(x, start, end) { return x.slice(start, end); } exports.slice = slice; function substring(x, start, end) { return x.substring(start, end); } exports.substring = substring; function split(x, separator, limit) { return x.split(separator, limit); } exports.split = split; function trimStart(x) { return x.trimStart(); } exports.trimStart = trimStart; function trimEnd(x) { return x.trimEnd(); } exports.trimEnd = trimEnd; function trim(x) { return x.trim(); } exports.trim = trim; function padStart(x, length, padding = " ") { return x.padStart(length, padding); } exports.padStart = padStart; function padEnd(x, length, padding = " ") { return x.padEnd(length, padding); } exports.padEnd = padEnd; function toUpperCase(x) { return x.toUpperCase(); } exports.toUpperCase = toUpperCase; function toLocaleUpperCase(x, locales) { return x.toLocaleUpperCase(locales); } exports.toLocaleUpperCase = toLocaleUpperCase; function toLowerCase(x) { return x.toLowerCase(); } exports.toLowerCase = toLowerCase; function toLocaleLowerCase(x, locales) { return x.toLocaleLowerCase(locales); } exports.toLocaleLowerCase = toLocaleLowerCase; function replace(x, pattern, replacement) { return x.replace(pattern, replacement); } exports.replace = replace; function normalize(x, form) { return x.normalize(form); } exports.normalize = normalize; function of(...args) { var a = ""; for (var i = 0, I = args.length; i < I; i++) a += args[i]; return a; } exports.of = of; function from(xs, fm, ths) { var a = "", i = 0; for (var x of xs) { a += fm ? fm.call(ths, x, i) : x; i++; } return a; } exports.from = from; function splice(x, start, remove = 0, add = "") { return x.slice(0, start) + add + x.slice(start + remove); } exports.splice = splice; function reverse(x) { return [...x].reverse().join(""); } exports.reverse = reverse; function sort(x, fc) { return [...x].sort(fc).join(""); } exports.sort = sort; function filter(x, ft, ths) { var a = "", i = 0; for (var c of x) if (ft.call(ths, c, i++)) a += c; return a; } exports.filter = filter; const SPACE_BUFFER = " ".repeat(1024); function spaces(n) { var S = SPACE_BUFFER.length; if (n < S) return SPACE_BUFFER.slice(0, n); return SPACE_BUFFER.repeat(n / S) + " ".repeat(n % S); } exports.spaces = spaces; function is(v) { return typeof v === "string"; } exports.is = is; function isEmpty(x) { return x.length === 0; } exports.isEmpty = isEmpty; function isCharacter(x) { return x.length === 1; } exports.isCharacter = isCharacter; function index(x, at) { if (at < 0) return Math.max(0, x.length + at); return Math.min(at, x.length); } exports.index = index; function indexRange(x, start, end) { start = index(x, start); end = index(x, end); return [Math.min(start, end), Math.max(start, end)]; } exports.indexRange = indexRange; function codePointRange(x) { var min = exports.MAX_CODE_POINT; var max = exports.MIN_CODE_POINT; for (var c of x) { var v = c.codePointAt(0); min = Math.min(min, v); max = Math.max(max, v); } return [min, max]; } exports.codePointRange = codePointRange; function compare(x, y) { return x < y ? -1 : (x > y ? 1 : 0); } exports.compare = compare; function isEqual(x, y) { return x === y; } exports.isEqual = isEqual; function get(x, at) { return x.charAt(at >= 0 ? at : x.length + at); } exports.get = get; exports.at = get; function getAll(x, ats) { var a = ""; for (var at of ats) a += get(x, at); return a; } exports.getAll = getAll; function set(x, at, write) { return x.slice(0, at) + write + x.slice(at + write.length); } exports.set = set; function begin(x, count = 1) { return x.slice(0, count); } exports.begin = begin; exports.prefix = begin; exports.left = begin; function middle(x, start, count = 1) { return x.slice(start, start + count); } exports.middle = middle; exports.infix = middle; function end(x, count = 1) { return x.slice(x.length - count); } exports.end = end; exports.suffix = end; exports.right = end; function longestCommonInfix(x, y) { var ai = 0, al = 0; for (var i = 0, I = x.length; i < I; i++) { for (var j = 0, J = y.length, l = 0; j < J; j++) { l = x[i + l] === y[j] ? l + 1 : 0; if (l > al) { ai = j - l + 1; al = l; } } } return y.substring(ai, ai + al); } exports.longestCommonInfix = longestCommonInfix; function longestCommonPrefix(x, y) { for (var i = 0, I = Math.min(x.length, y.length); i < I; i++) if (x[i] !== y[i]) break; return x.substring(0, i); } exports.longestCommonPrefix = longestCommonPrefix; function longestCommonSuffix(x, y) { for (var i = x.length - 1, j = y.length - 1; i >= 0 && j >= 0; i--, j--) if (x[i] !== y[j]) break; return x.substring(i + 1); } exports.longestCommonSuffix = longestCommonSuffix; function longestUncommonInfixes(x, y) { var X = x.length, Y = y.length; var i = longestCommonPrefix(x, y).length; var j = longestCommonSuffix(x, y).length; return [x.substring(i, X - j), y.substring(i, Y - j)]; } exports.longestUncommonInfixes = longestUncommonInfixes; const SUPERSCRIPT_SOURCE = "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ᵝᵞᵟᶿᶥᵠᵡᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁⱽᵂᶦᶫᶰᶸᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻ"; const SUPERSCRIPT_TARGET = "0123456789+-=()βγδθιφχABDEGHIJKLMNOPRTUVWILNUabcdefghijklmnoprstuvwxyz"; const SUBSCRIPT_SOURCE = "₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₔᵦᵧᵨᵩᵪₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓ"; const SUBSCRIPT_TARGET = "0123456789+-=()əβγρφχaehijklmnoprstuvx"; function toBaselineDirect(x) { var a = ""; for (var c of x) { var j = SUPERSCRIPT_SOURCE.indexOf(c); var k = SUBSCRIPT_SOURCE.indexOf(c); if (j >= 0) c = SUPERSCRIPT_TARGET[j]; if (k >= 0) c = SUPERSCRIPT_TARGET[k]; a += c; } return a; } function toBaselineIndirect(x, fsup, fsub) { var a = "", i = 0; var tmp = "", mode = 0; fsup = fsup || extra_function_1.IDENTITY; fsub = fsub || extra_function_1.IDENTITY; for (var c of x) { var t = tmp.length; var j = SUPERSCRIPT_SOURCE.indexOf(c); var k = SUBSCRIPT_SOURCE.indexOf(c); var m = (j >= 0 ? 1 : 0) + (k >= 0 ? 2 : 0); if (m !== mode && t) a += mode === 0 ? tmp : (mode === 1 ? fsup(tmp, i - t) : fsub(tmp, i - t)); tmp += m === 0 ? c : (m === 1 ? SUPERSCRIPT_TARGET[j] : SUBSCRIPT_TARGET[k]); mode = m; i++; } if (tmp) a += mode === 0 ? tmp : (mode === 1 ? fsup(tmp, i - t) : fsub(tmp, i - t)); return a; } function toBaseline(x, fsup = null, fsub = null) { if (!fsup && !fsub) return toBaselineDirect(x); return toBaselineIndirect(x, fsup || extra_function_1.IDENTITY, fsub || extra_function_1.IDENTITY); } exports.toBaseline = toBaseline; const SUPERSCRIPT_LOOKUP = " ⁽⁾ ⁺ ⁻ ⁰¹²³⁴⁵⁶⁷⁸⁹ ⁼ ᴬᴮ ᴰᴱ ᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾ ᴿ ᵀᵁ ᵂ ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖ ʳˢᵗᵘᵛʷˣʸᶻ "; function toSuperscript(x) { var a = ""; for (var c of x) { var d = SUPERSCRIPT_LOOKUP[c.charCodeAt(0) - 32] || " "; a += d === " " ? c : d; } return a; } exports.toSuperscript = toSuperscript; const SUBSCRIPT_LOOKUP = " ₍₎ ₊ ₋ ₀₁₂₃₄₅₆₇₈₉ ₌ ₐ ₑ ₕᵢⱼₖₗₘₙₒₚ ᵣₛₜᵤᵥ ₓ "; function toSubscript(x) { var a = ""; for (var c of x) { var d = SUBSCRIPT_LOOKUP[c.charCodeAt(0) - 32] || " "; a += d === " " ? c : d; } return a; } exports.toSubscript = toSubscript; function toBeginUpperAnyCase(x) { return x.slice(0, 1).toUpperCase() + x.slice(1); } function toBeginLowerAnyCase(x) { return x.slice(0, 1).toUpperCase() + x.slice(1); } function toBorderUpperCase(x) { if (x.length <= 2) return x.toUpperCase(); return x.slice(0, 1).toUpperCase() + x.slice(1, -1).toLowerCase() + x.slice(-1).toUpperCase(); } function toKebabCase(x, re = null, sep = "-") { var words = x.split(re || /[^0-9A-Za-z]+/g).filter(extra_function_1.IDENTITY); for (var i = 0, I = words.length; i < I; ++i) { words[i] = words[i].replace(/[A-Z]+/g, m => m.length === 1 ? sep + m : sep + m.slice(0, -1) + sep + m.slice(-1)); if (words[i].startsWith(sep)) words[i] = words[i].slice(sep.length); } return words.join(sep).toLowerCase(); } exports.toKebabCase = toKebabCase; function toSnakeCase(x, re = null) { return toKebabCase(x, re, "_"); } exports.toSnakeCase = toSnakeCase; function toCamelCase(x, re = null, upper = false) { var a = "", words = x.split(re || /[^0-9A-Za-z]+/g).filter(extra_function_1.IDENTITY); for (var w of words) a += toBeginUpperAnyCase(w.replace(/[A-Z]+/g, toBorderUpperCase)); return upper ? a : toBeginLowerAnyCase(a); } exports.toCamelCase = toCamelCase; function toPascalCase(x, re = null) { return toCamelCase(x, re, true); } exports.toPascalCase = toPascalCase; function ngrams(x, n) { var a = []; for (var i = 0, I = x.length - n + 1; i < I; i++) a[i] = x.substring(i, i + n); return a; } exports.ngrams = ngrams; function uniqueNgrams(x, n) { var a = new Set(); for (var i = 0, I = x.length - n + 1; i < I; i++) a.add(x.substring(i, i + n)); return a; } exports.uniqueNgrams = uniqueNgrams; function countNgrams(x, n) { return Math.max(0, x.length - n + 1); } exports.countNgrams = countNgrams; function countUniqueNgrams(x, n) { return uniqueNgrams(x, n).size; } exports.countUniqueNgrams = countUniqueNgrams; function countEachNgram(x, n) { var a = new Map(); for (var i = 0, I = x.length - n + 1; i < I; i++) { var g = x.substring(i, i + n); a.set(g, (a.get(g) || 0) + 1); } return a; } exports.countEachNgram = countEachNgram; function matchingNgrams(x, y, n) { var gs = countEachNgram(x, n), a = []; for (var i = 0, I = y.length - n + 1; i < I; i++) { var g = y.substring(i, i + n); var c = gs.get(g) || 0; if (c) { a.push(g); gs.set(g, c - 1); } } return a; } exports.matchingNgrams = matchingNgrams; function uniqueMatchingNgrams(x, y, n) { var a = new Set(); var gs = uniqueNgrams(x, n); for (var i = 0, I = y.length - n + 1; i < I; i++) { var g = y.substring(i, i + n); if (gs.has(g)) a.add(g); } return a; } exports.uniqueMatchingNgrams = uniqueMatchingNgrams; function countMatchingNgrams(x, y, n) { var gs = countEachNgram(x, n), a = 0; for (var i = 0, I = y.length - n + 1; i < I; i++) { var g = y.substring(i, i + n); var c = gs.get(g) || 0; if (c) { a++; gs.set(g, c - 1); } } return a; } exports.countMatchingNgrams = countMatchingNgrams; function countEachMatchingNgram(x, y, n) { var a = new Map(); var gs = countEachNgram(x, n); for (var i = 0, I = y.length - n + 1; i < I; i++) { var g = y.substring(i, i + n); var c = gs.get(g) || 0; if (c) { a.set(g, (a.get(g) || 0) + 1); gs.set(g, c - 1); } } return a; } exports.countEachMatchingNgram = countEachMatchingNgram; function countUniqueMatchingNgrams(x, y, n) { var gs = uniqueNgrams(x, n), a = 0; for (var i = 0, I = y.length - n + 1; i < I; i++) { var g = y.substring(i, i + n); if (gs.has(g)) { a++; gs.delete(g); } } return a; } exports.countUniqueMatchingNgrams = countUniqueMatchingNgrams; function euclideanDistance(x, y) { var a = 0; for (var i = 0, I = Math.max(x.length, y.length); i < I; i++) { var d = (x.codePointAt(i) || 0) - (y.codePointAt(i) || 0); a += d * d; } return Math.sqrt(a); } exports.euclideanDistance = euclideanDistance; function hammingDistance(x, y) { var a = 0; for (var i = 0, I = Math.max(x.length, y.length); i < I; i++) if (x.charAt(i) !== y.charAt(i)) a++; return a; } exports.hammingDistance = hammingDistance; function jaccardIndex(x, y, n) { var gx = countNgrams(x, n); var gy = countNgrams(y, n); var g = countMatchingNgrams(x, y, n); return gx + gy ? g / (gx + gy - g) : 1; } exports.jaccardIndex = jaccardIndex; function jaccardDistance(x, y, n) { return 1 - jaccardIndex(x, y, n); } exports.jaccardDistance = jaccardDistance; function sorensenDiceIndex(x, y, n) { var gx = countNgrams(x, n); var gy = countNgrams(y, n); var g = countMatchingNgrams(x, y, n); return gx + gy ? (2 * g) / (gx + gy) : 1; } exports.sorensenDiceIndex = sorensenDiceIndex; function sorensenDiceDistance(x, y, n) { return 1 - sorensenDiceIndex(x, y, n); } exports.sorensenDiceDistance = sorensenDiceDistance; function tverskyIndex(x, y, n, a = 1, b = 1) { var gx = countNgrams(x, n); var gy = countNgrams(y, n); var g = countMatchingNgrams(x, y, n); return gx + gy ? g / (g + a * (gx - g) + b * (gy - g)) : 1; } exports.tverskyIndex = tverskyIndex; function tverskyDistance(x, y, n, a = 1, b = 1) { return 1 - tverskyIndex(x, y, n, a, b); } exports.tverskyDistance = tverskyDistance; function rangedMatches(x, y, d) { var mx = "", my = ""; var by = Array.from(y); for (var i = 0, I = x.length; i < I; i++) { var j = by.lastIndexOf(x.charAt(i), i); if (j < 0 || i - j > d) j = by.indexOf(x.charAt(i), i + 1); if (j < 0 || j - i > d) continue; mx += x.charAt(i); by[j] = null; } for (var j = 0, J = y.length; j < J; j++) if (by[j] == null) my += y.charAt(j); return [mx, my]; } function jaroSimilarity(x, y) { var X = x.length, Y = y.length; var d = Math.floor(Math.max(X, Y) / 2) - 1; var [mx, my] = rangedMatches(x, y, d), m = mx.length; var t = hammingDistance(mx, my) / 2; return m ? (m / X + m / Y + (m - t) / m) / 3 : 0; } exports.jaroSimilarity = jaroSimilarity; function jaroDistance(x, y) { return 1 - jaroSimilarity(x, y); } exports.jaroDistance = jaroDistance; function jaroWinklerSimilarity(x, y, p = 0.1) { var s = jaroSimilarity(x, y); var l = longestCommonPrefix(x, y.substring(0, 4)).length; return s + l * p * (1 - s); } exports.jaroWinklerSimilarity = jaroWinklerSimilarity; function jaroWinklerDistance(x, y, p = 0.1) { return 1 - jaroWinklerSimilarity(x, y, p); } exports.jaroWinklerDistance = jaroWinklerDistance; function levenshteinDistance(x, y, ins = 1, del = 1, sub = 1) { var [x, y] = longestUncommonInfixes(x, y); var X = x.length, Y = y.length; var d0 = [], d1 = []; for (var j = 0, v = 0; j <= Y; v += ins) d0[j++] = v; for (var i = 1; i <= X; i++) { var di = i & 1 ? d1 : d0; var dh = i & 1 ? d0 : d1; di[0] = dh[0] + del; for (var j = 1; j <= Y; j++) { var cost = x[i - 1] === y[j - 1] ? 0 : sub; di[j] = Math.min(dh[j] + del, di[j - 1] + ins, dh[j - 1] + cost); } } return (X & 1 ? d1 : d0)[Y]; } exports.levenshteinDistance = levenshteinDistance; function damerauLevenshteinDistance(x, y, ins = 1, del = 1, sub = 1, tra = 1) { var [x, y] = longestUncommonInfixes(x, y); var X = x.length, Y = y.length; var I = X + 2, J = Y + 2, L = X + Y; var d0 = [L], d1 = [L]; var d = [d0, d1], da = new Map(); for (var j = 1, v = 0; j < J; j++, v += ins) { d0[j] = L; d1[j] = v; } for (var i = 2; i < I; i++) { var db = 0, dh = d[i - 1]; var di = [L, dh[1] + del]; d[i] = di; for (var j = 2; j < J; j++) { var k = da.get(y[j - 2]) || 0, l = db, cost = sub; if (x[i - 2] === y[j - 2]) { db = j - 1; cost = 0; } di[j] = Math.min(di[j - 1] + ins, dh[j] + del, dh[j - 1] + cost, d[k][l] + (i - k - 2) + tra + (j - l - 2)); } da.set(x[i - 2], i - 1); } return d[X + 1][Y + 1]; } exports.damerauLevenshteinDistance = damerauLevenshteinDistance; } (_build$1)); var index = getDefaultExportFromCjs(_build$1); module.exports = index;