extra-string
Version:
A collection of common string functions.
891 lines (885 loc) • 31.6 kB
JavaScript
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);
export { index as default };