aboutsummaryrefslogtreecommitdiff
path: root/node_modules/leven/index.js
diff options
context:
space:
mode:
authorJoel Kronqvist <work.joelkronqvist@pm.me>2022-03-11 20:46:06 +0200
committerJoel Kronqvist <work.joelkronqvist@pm.me>2022-03-11 20:46:06 +0200
commit080c5819d87b933816d724a83f3bf4f1686770a7 (patch)
tree4a2ccc68b27edf7d4cbc586c932cc7542b655e19 /node_modules/leven/index.js
parent5ac7049a9d30733165cc212dee308163c2a14644 (diff)
parentd003b82235a9329f912522a2f70aa950dfce4998 (diff)
downloadLYLLRuoka-080c5819d87b933816d724a83f3bf4f1686770a7.tar.gz
LYLLRuoka-080c5819d87b933816d724a83f3bf4f1686770a7.zip
Merge branch 'master' of https://github.com/JoelHMikael/FoodJS
Updating remote changes
Diffstat (limited to 'node_modules/leven/index.js')
-rw-r--r--node_modules/leven/index.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/node_modules/leven/index.js b/node_modules/leven/index.js
new file mode 100644
index 0000000..25f5a3d
--- /dev/null
+++ b/node_modules/leven/index.js
@@ -0,0 +1,77 @@
+'use strict';
+const array = [];
+const charCodeCache = [];
+
+const leven = (left, right) => {
+ if (left === right) {
+ return 0;
+ }
+
+ const swap = left;
+
+ // Swapping the strings if `a` is longer than `b` so we know which one is the
+ // shortest & which one is the longest
+ if (left.length > right.length) {
+ left = right;
+ right = swap;
+ }
+
+ let leftLength = left.length;
+ let rightLength = right.length;
+
+ // Performing suffix trimming:
+ // We can linearly drop suffix common to both strings since they
+ // don't increase distance at all
+ // Note: `~-` is the bitwise way to perform a `- 1` operation
+ while (leftLength > 0 && (left.charCodeAt(~-leftLength) === right.charCodeAt(~-rightLength))) {
+ leftLength--;
+ rightLength--;
+ }
+
+ // Performing prefix trimming
+ // We can linearly drop prefix common to both strings since they
+ // don't increase distance at all
+ let start = 0;
+
+ while (start < leftLength && (left.charCodeAt(start) === right.charCodeAt(start))) {
+ start++;
+ }
+
+ leftLength -= start;
+ rightLength -= start;
+
+ if (leftLength === 0) {
+ return rightLength;
+ }
+
+ let bCharCode;
+ let result;
+ let temp;
+ let temp2;
+ let i = 0;
+ let j = 0;
+
+ while (i < leftLength) {
+ charCodeCache[i] = left.charCodeAt(start + i);
+ array[i] = ++i;
+ }
+
+ while (j < rightLength) {
+ bCharCode = right.charCodeAt(start + j);
+ temp = j++;
+ result = j;
+
+ for (i = 0; i < leftLength; i++) {
+ temp2 = bCharCode === charCodeCache[i] ? temp : temp + 1;
+ temp = array[i];
+ // eslint-disable-next-line no-multi-assign
+ result = array[i] = temp > result ? temp2 > result ? result + 1 : temp2 : temp2 > temp ? temp + 1 : temp2;
+ }
+ }
+
+ return result;
+};
+
+module.exports = leven;
+// TODO: Remove this for the next major release
+module.exports.default = leven;