Index: imaps-frontend/node_modules/fastest-levenshtein/.eslintrc.json
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/.eslintrc.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/.eslintrc.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,30 @@
+{
+  "parserOptions": {
+    "ecmaVersion": 2020
+  },
+  "extends": [
+    "eslint:all",
+    "prettier",
+    "plugin:node/recommended",
+    "plugin:@typescript-eslint/eslint-recommended",
+    "plugin:@typescript-eslint/recommended"
+  ],
+  "parser": "@typescript-eslint/parser",
+  "plugins": ["@typescript-eslint"],
+  "rules": {
+    "capitalized-comments": "off",
+    "camelcase": "off",
+    "curly": ["error", "all"],
+    "id-length": "off",
+    "max-lines-per-function": "off",
+    "max-statements": "off",
+    "multiline-comment-style": "off",
+    "no-bitwise": "off",
+    "no-magic-numbers": "off",
+    "no-param-reassign": "off",
+    "no-plusplus": "off",
+    "node/no-unsupported-features/es-syntax": "off",
+    "one-var": "off",
+    "padded-blocks": "off"
+  }
+}
Index: imaps-frontend/node_modules/fastest-levenshtein/.prettierrc
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/.prettierrc	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/.prettierrc	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,4 @@
+{
+  "tabWidth": 2,
+  "useTabs": false
+}
Index: imaps-frontend/node_modules/fastest-levenshtein/.travis.yml
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/.travis.yml	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/.travis.yml	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+sudo: false
+
+language: node_js
+
+os:
+  - linux
+  - osx
+  - windows
+
+arch: amd64
+
+node_js:
+  - 14
+  - 13
+  - 12
+  - 11
+  - 10
+
+script:
+  - npm test
+  - npm run test:coveralls
Index: imaps-frontend/node_modules/fastest-levenshtein/LICENSE.md
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/LICENSE.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/LICENSE.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Kasper Unn Weihe
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: imaps-frontend/node_modules/fastest-levenshtein/README.md
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/README.md	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,57 @@
+# fastest-levenshtein :rocket: 
+> Fastest JS/TS implemenation of [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance).<br>
+> Measure the difference between two strings.
+
+[![Build Status](https://travis-ci.org/ka-weihe/fastest-levenshtein.svg?branch=master)](https://travis-ci.org/ka-weihe/fastest-levenshtein)
+[![Coverage Status](https://coveralls.io/repos/github/ka-weihe/node-levenshtein/badge.svg?branch=master)](https://coveralls.io/github/ka-weihe/node-levenshtein?branch=master)
+[![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/ka-weihe/fastest-levenshtein.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/ka-weihe/fastest-levenshtein/context:javascript)
+![npm](https://img.shields.io/npm/dm/fastest-levenshtein)
+```bash
+$ npm i fastest-levenshtein
+```
+
+## Usage
+### Node
+```javascript
+const {distance, closest} = require('fastest-levenshtein')
+
+// Print levenshtein-distance between 'fast' and 'faster' 
+console.log(distance('fast', 'faster'))
+//=> 2
+
+// Print string from array with lowest edit-distance to 'fast'
+console.log(closest('fast', ['slow', 'faster', 'fastest']))
+//=> 'faster'
+```
+
+### Deno
+```javascript
+import {distance, closest} from 'https://deno.land/x/fastest_levenshtein/mod.ts'
+
+// Print levenshtein-distance between 'fast' and 'faster' 
+console.log(distance('fast', 'faster'))
+//=> 2
+
+// Print string from array with lowest edit-distance to 'fast'
+console.log(closest('fast', ['slow', 'faster', 'fastest']))
+//=> 'faster'
+```
+
+## Benchmark
+I generated 500 pairs of strings with length N. I measured the ops/sec each library achieves to process all the given pairs. Higher is better. 
+
+| Test Target               | N=4   | N=8   | N=16  | N=32 | N=64  | N=128 | N=256 | N=512 | N=1024 |
+|---------------------------|-------|-------|-------|------|-------|-------|-------|-------|--------|
+| fastest-levenshtein       | 44423 | 23702 | 10764 | 4595 | 1049  | 291.5 | 86.64 | 22.24 | 5.473  |
+| js-levenshtein            | 21261 | 10030 | 2939  | 824  | 223   | 57.62 | 14.77 | 3.717 | 0.934  |
+| leven                     | 19688 | 6884  | 1606  | 436  | 117   | 30.34 | 7.604 | 1.929 | 0.478  |
+| fast-levenshtein          | 18577 | 6112  | 1265  | 345  | 89.41 | 22.70 | 5.676 | 1.428 | 0.348  |
+| levenshtein-edit-distance | 22968 | 7445  | 1493  | 409  | 109   | 28.07 | 7.095 | 1.789 | 0.445  |
+
+### Relative Performance
+This image shows the relative performance between `fastest-levenshtein` and `js-levenshtein` (the 2nd fastest). `fastest-levenshtein` is always a lot faster. y-axis shows "times faster".
+
+![Benchmark](/images/relaperf.png)
+
+## License
+This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
Index: imaps-frontend/node_modules/fastest-levenshtein/bench.js
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/bench.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/bench.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,96 @@
+"use strict";
+exports.__esModule = true;
+/* eslint-disable @typescript-eslint/no-var-requires */
+/* eslint-disable no-console */
+var Benchmark = require("benchmark");
+var mod_js_1 = require("./mod.js");
+var fast_levenshtein_1 = require("fast-levenshtein");
+var fs = require("fs");
+var jslevenshtein = require("js-levenshtein");
+var leven = require("leven");
+var levenshteinEditDistance = require("levenshtein-edit-distance");
+var suite = new Benchmark.Suite();
+var randomstring = function (length) {
+    var result = "";
+    var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+    var charactersLength = characters.length;
+    for (var i = 0; i < length; i++) {
+        result += characters.charAt(Math.floor(Math.random() * charactersLength));
+    }
+    return result;
+};
+var randomstringArr = function (stringSize, arraySize) {
+    var i = 0;
+    var arr = [];
+    for (i = 0; i < arraySize; i++) {
+        arr.push(randomstring(stringSize));
+    }
+    return arr;
+};
+var arrSize = 1000;
+if (!fs.existsSync("data.json")) {
+    var data_1 = [
+        randomstringArr(4, arrSize),
+        randomstringArr(8, arrSize),
+        randomstringArr(16, arrSize),
+        randomstringArr(32, arrSize),
+        randomstringArr(64, arrSize),
+        randomstringArr(128, arrSize),
+        randomstringArr(256, arrSize),
+        randomstringArr(512, arrSize),
+        randomstringArr(1024, arrSize),
+    ];
+    fs.writeFileSync("data.json", JSON.stringify(data_1));
+}
+var data = JSON.parse(fs.readFileSync("data.json", "utf8"));
+var _loop_1 = function (i) {
+    var datapick = data[i];
+    if (process.argv[2] !== "no") {
+        suite
+            .add("".concat(i, " - js-levenshtein"), function () {
+            for (var j = 0; j < arrSize - 1; j += 2) {
+                jslevenshtein(datapick[j], datapick[j + 1]);
+            }
+        })
+            .add("".concat(i, " - leven"), function () {
+            for (var j = 0; j < arrSize - 1; j += 2) {
+                leven(datapick[j], datapick[j + 1]);
+            }
+        })
+            .add("".concat(i, " - fast-levenshtein"), function () {
+            for (var j = 0; j < arrSize - 1; j += 2) {
+                (0, fast_levenshtein_1.get)(datapick[j], datapick[j + 1]);
+            }
+        })
+            .add("".concat(i, " - levenshtein-edit-distance"), function () {
+            for (var j = 0; j < arrSize - 1; j += 2) {
+                levenshteinEditDistance(datapick[j], datapick[j + 1]);
+            }
+        });
+    }
+    suite.add("".concat(i, " - fastest-levenshtein"), function () {
+        for (var j = 0; j < arrSize - 1; j += 2) {
+            (0, mod_js_1.distance)(datapick[j], datapick[j + 1]);
+        }
+    });
+};
+// BENCHMARKS
+for (var i = 0; i < 9; i++) {
+    _loop_1(i);
+}
+var results = new Map();
+suite
+    .on("cycle", function (event) {
+    console.log(String(event.target));
+    if (results.has(event.target.name[0])) {
+        results.get(event.target.name[0]).push(event.target.hz);
+    }
+    else {
+        results.set(event.target.name[0], [event.target.hz]);
+    }
+})
+    .on("complete", function () {
+    console.log(results);
+})
+    // run async
+    .run({ async: true });
Index: imaps-frontend/node_modules/fastest-levenshtein/esm/mod.d.ts
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/esm/mod.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/esm/mod.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,4 @@
+declare const distance: (a: string, b: string) => number;
+declare const closest: (str: string, arr: readonly string[]) => string;
+export { closest, distance };
+//# sourceMappingURL=mod.d.ts.map
Index: imaps-frontend/node_modules/fastest-levenshtein/esm/mod.d.ts.map
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/esm/mod.d.ts.map	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/esm/mod.d.ts.map	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,1 @@
+{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAiHA,QAAA,MAAM,QAAQ,MAAO,MAAM,KAAK,MAAM,KAAG,MAaxC,CAAC;AAEF,QAAA,MAAM,OAAO,QAAS,MAAM,OAAO,SAAS,MAAM,EAAE,KAAG,MAWtD,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC"}
Index: imaps-frontend/node_modules/fastest-levenshtein/esm/mod.js
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/esm/mod.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/esm/mod.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,138 @@
+const peq = new Uint32Array(0x10000);
+const myers_32 = (a, b) => {
+    const n = a.length;
+    const m = b.length;
+    const lst = 1 << (n - 1);
+    let pv = -1;
+    let mv = 0;
+    let sc = n;
+    let i = n;
+    while (i--) {
+        peq[a.charCodeAt(i)] |= 1 << i;
+    }
+    for (i = 0; i < m; i++) {
+        let eq = peq[b.charCodeAt(i)];
+        const xv = eq | mv;
+        eq |= ((eq & pv) + pv) ^ pv;
+        mv |= ~(eq | pv);
+        pv &= eq;
+        if (mv & lst) {
+            sc++;
+        }
+        if (pv & lst) {
+            sc--;
+        }
+        mv = (mv << 1) | 1;
+        pv = (pv << 1) | ~(xv | mv);
+        mv &= xv;
+    }
+    i = n;
+    while (i--) {
+        peq[a.charCodeAt(i)] = 0;
+    }
+    return sc;
+};
+const myers_x = (b, a) => {
+    const n = a.length;
+    const m = b.length;
+    const mhc = [];
+    const phc = [];
+    const hsize = Math.ceil(n / 32);
+    const vsize = Math.ceil(m / 32);
+    for (let i = 0; i < hsize; i++) {
+        phc[i] = -1;
+        mhc[i] = 0;
+    }
+    let j = 0;
+    for (; j < vsize - 1; j++) {
+        let mv = 0;
+        let pv = -1;
+        const start = j * 32;
+        const vlen = Math.min(32, m) + start;
+        for (let k = start; k < vlen; k++) {
+            peq[b.charCodeAt(k)] |= 1 << k;
+        }
+        for (let i = 0; i < n; i++) {
+            const eq = peq[a.charCodeAt(i)];
+            const pb = (phc[(i / 32) | 0] >>> i) & 1;
+            const mb = (mhc[(i / 32) | 0] >>> i) & 1;
+            const xv = eq | mv;
+            const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
+            let ph = mv | ~(xh | pv);
+            let mh = pv & xh;
+            if ((ph >>> 31) ^ pb) {
+                phc[(i / 32) | 0] ^= 1 << i;
+            }
+            if ((mh >>> 31) ^ mb) {
+                mhc[(i / 32) | 0] ^= 1 << i;
+            }
+            ph = (ph << 1) | pb;
+            mh = (mh << 1) | mb;
+            pv = mh | ~(xv | ph);
+            mv = ph & xv;
+        }
+        for (let k = start; k < vlen; k++) {
+            peq[b.charCodeAt(k)] = 0;
+        }
+    }
+    let mv = 0;
+    let pv = -1;
+    const start = j * 32;
+    const vlen = Math.min(32, m - start) + start;
+    for (let k = start; k < vlen; k++) {
+        peq[b.charCodeAt(k)] |= 1 << k;
+    }
+    let score = m;
+    for (let i = 0; i < n; i++) {
+        const eq = peq[a.charCodeAt(i)];
+        const pb = (phc[(i / 32) | 0] >>> i) & 1;
+        const mb = (mhc[(i / 32) | 0] >>> i) & 1;
+        const xv = eq | mv;
+        const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
+        let ph = mv | ~(xh | pv);
+        let mh = pv & xh;
+        score += (ph >>> (m - 1)) & 1;
+        score -= (mh >>> (m - 1)) & 1;
+        if ((ph >>> 31) ^ pb) {
+            phc[(i / 32) | 0] ^= 1 << i;
+        }
+        if ((mh >>> 31) ^ mb) {
+            mhc[(i / 32) | 0] ^= 1 << i;
+        }
+        ph = (ph << 1) | pb;
+        mh = (mh << 1) | mb;
+        pv = mh | ~(xv | ph);
+        mv = ph & xv;
+    }
+    for (let k = start; k < vlen; k++) {
+        peq[b.charCodeAt(k)] = 0;
+    }
+    return score;
+};
+const distance = (a, b) => {
+    if (a.length < b.length) {
+        const tmp = b;
+        b = a;
+        a = tmp;
+    }
+    if (b.length === 0) {
+        return a.length;
+    }
+    if (a.length <= 32) {
+        return myers_32(a, b);
+    }
+    return myers_x(a, b);
+};
+const closest = (str, arr) => {
+    let min_distance = Infinity;
+    let min_index = 0;
+    for (let i = 0; i < arr.length; i++) {
+        const dist = distance(str, arr[i]);
+        if (dist < min_distance) {
+            min_distance = dist;
+            min_index = i;
+        }
+    }
+    return arr[min_index];
+};
+export { closest, distance };
Index: imaps-frontend/node_modules/fastest-levenshtein/mod.d.ts
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/mod.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/mod.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,3 @@
+declare const distance: (a: string, b: string) => number;
+declare const closest: (str: string, arr: readonly string[]) => string;
+export { closest, distance };
Index: imaps-frontend/node_modules/fastest-levenshtein/mod.js
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/mod.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/mod.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,142 @@
+"use strict";
+exports.__esModule = true;
+exports.distance = exports.closest = void 0;
+var peq = new Uint32Array(0x10000);
+var myers_32 = function (a, b) {
+    var n = a.length;
+    var m = b.length;
+    var lst = 1 << (n - 1);
+    var pv = -1;
+    var mv = 0;
+    var sc = n;
+    var i = n;
+    while (i--) {
+        peq[a.charCodeAt(i)] |= 1 << i;
+    }
+    for (i = 0; i < m; i++) {
+        var eq = peq[b.charCodeAt(i)];
+        var xv = eq | mv;
+        eq |= ((eq & pv) + pv) ^ pv;
+        mv |= ~(eq | pv);
+        pv &= eq;
+        if (mv & lst) {
+            sc++;
+        }
+        if (pv & lst) {
+            sc--;
+        }
+        mv = (mv << 1) | 1;
+        pv = (pv << 1) | ~(xv | mv);
+        mv &= xv;
+    }
+    i = n;
+    while (i--) {
+        peq[a.charCodeAt(i)] = 0;
+    }
+    return sc;
+};
+var myers_x = function (b, a) {
+    var n = a.length;
+    var m = b.length;
+    var mhc = [];
+    var phc = [];
+    var hsize = Math.ceil(n / 32);
+    var vsize = Math.ceil(m / 32);
+    for (var i = 0; i < hsize; i++) {
+        phc[i] = -1;
+        mhc[i] = 0;
+    }
+    var j = 0;
+    for (; j < vsize - 1; j++) {
+        var mv_1 = 0;
+        var pv_1 = -1;
+        var start_1 = j * 32;
+        var vlen_1 = Math.min(32, m) + start_1;
+        for (var k = start_1; k < vlen_1; k++) {
+            peq[b.charCodeAt(k)] |= 1 << k;
+        }
+        for (var i = 0; i < n; i++) {
+            var eq = peq[a.charCodeAt(i)];
+            var pb = (phc[(i / 32) | 0] >>> i) & 1;
+            var mb = (mhc[(i / 32) | 0] >>> i) & 1;
+            var xv = eq | mv_1;
+            var xh = ((((eq | mb) & pv_1) + pv_1) ^ pv_1) | eq | mb;
+            var ph = mv_1 | ~(xh | pv_1);
+            var mh = pv_1 & xh;
+            if ((ph >>> 31) ^ pb) {
+                phc[(i / 32) | 0] ^= 1 << i;
+            }
+            if ((mh >>> 31) ^ mb) {
+                mhc[(i / 32) | 0] ^= 1 << i;
+            }
+            ph = (ph << 1) | pb;
+            mh = (mh << 1) | mb;
+            pv_1 = mh | ~(xv | ph);
+            mv_1 = ph & xv;
+        }
+        for (var k = start_1; k < vlen_1; k++) {
+            peq[b.charCodeAt(k)] = 0;
+        }
+    }
+    var mv = 0;
+    var pv = -1;
+    var start = j * 32;
+    var vlen = Math.min(32, m - start) + start;
+    for (var k = start; k < vlen; k++) {
+        peq[b.charCodeAt(k)] |= 1 << k;
+    }
+    var score = m;
+    for (var i = 0; i < n; i++) {
+        var eq = peq[a.charCodeAt(i)];
+        var pb = (phc[(i / 32) | 0] >>> i) & 1;
+        var mb = (mhc[(i / 32) | 0] >>> i) & 1;
+        var xv = eq | mv;
+        var xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
+        var ph = mv | ~(xh | pv);
+        var mh = pv & xh;
+        score += (ph >>> (m - 1)) & 1;
+        score -= (mh >>> (m - 1)) & 1;
+        if ((ph >>> 31) ^ pb) {
+            phc[(i / 32) | 0] ^= 1 << i;
+        }
+        if ((mh >>> 31) ^ mb) {
+            mhc[(i / 32) | 0] ^= 1 << i;
+        }
+        ph = (ph << 1) | pb;
+        mh = (mh << 1) | mb;
+        pv = mh | ~(xv | ph);
+        mv = ph & xv;
+    }
+    for (var k = start; k < vlen; k++) {
+        peq[b.charCodeAt(k)] = 0;
+    }
+    return score;
+};
+var distance = function (a, b) {
+    if (a.length < b.length) {
+        var tmp = b;
+        b = a;
+        a = tmp;
+    }
+    if (b.length === 0) {
+        return a.length;
+    }
+    if (a.length <= 32) {
+        return myers_32(a, b);
+    }
+    return myers_x(a, b);
+};
+exports.distance = distance;
+var closest = function (str, arr) {
+    var min_distance = Infinity;
+    var min_index = 0;
+    for (var i = 0; i < arr.length; i++) {
+        var dist = distance(str, arr[i]);
+        if (dist < min_distance) {
+            min_distance = dist;
+            min_index = i;
+        }
+    }
+    return arr[min_index];
+};
+exports.closest = closest;
Index: imaps-frontend/node_modules/fastest-levenshtein/package.json
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,72 @@
+{
+  "name": "fastest-levenshtein",
+  "version": "1.0.16",
+  "description": "Fastest Levenshtein distance implementation in JS.",
+  "main": "mod.js",
+  "types": "mod.d.ts",
+  "module": "./esm/mod.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/ka-weihe/fastest-levenshtein.git"
+  },
+  "keywords": [
+    "levenshtein",
+    "distance",
+    "fast",
+    "fastest",
+    "edit",
+    "string",
+    "similarity",
+    "algorithm",
+    "match",
+    "comparison",
+    "fuzzy",
+    "search",
+    "string",
+    "matching",
+    "similar",
+    "node",
+    "difference"
+  ],
+  "author": "Kasper U. Weihe",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/ka-weihe/fastest-levenshtein/issues"
+  },
+  "homepage": "https://github.com/ka-weihe/fastest-levenshtein#README",
+  "scripts": {
+    "build": "tsc mod.ts --declaration",
+    "build:esm": "tsc --declaration -p tsconfig.esm.json",
+    "prepare": "npm run build && npm run build:esm",
+    "bench": "npm run build && tsc bench.ts && node bench.js",
+    "test": "npm run build && tsc test.ts && jest test.js",
+    "test:coverage": "npm run build && jest --coverage",
+    "test:coveralls": "npm run build && jest --coverage --coverageReporters=text-lcov | coveralls"
+  },
+  "devDependencies": {
+    "@types/benchmark": "^1.0.33",
+    "@types/jest": "^26.0.15",
+    "@typescript-eslint/eslint-plugin": "^4.7.0",
+    "@typescript-eslint/parser": "^4.7.0",
+    "benchmark": "^2.1.4",
+    "coveralls": "^3.1.0",
+    "eslint": "^7.13.0",
+    "eslint-config-node": "^4.1.0",
+    "eslint-config-prettier": "^6.15.0",
+    "eslint-plugin-import": "^2.22.1",
+    "eslint-plugin-node": "^11.1.0",
+    "eslint-plugin-prettier": "^3.1.4",
+    "fast-levenshtein": "^2.0.6",
+    "jest": "^26.6.3",
+    "js-levenshtein": "^1.1.6",
+    "leven": "^3.1.0",
+    "levenshtein-edit-distance": "^2.0.5",
+    "natural": "^2.1.5",
+    "prettier": "^2.1.2",
+    "talisman": "^1.1.3",
+    "typescript": "^4.0.5"
+  },
+  "engines": {
+    "node": ">= 4.9.1"
+  }
+}
Index: imaps-frontend/node_modules/fastest-levenshtein/test.js
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/test.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/test.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,55 @@
+var _a = require("./mod.js"), closest = _a.closest, distance = _a.distance;
+var levenshtein = function (a, b) {
+    if (a.length === 0) {
+        return b.length;
+    }
+    if (b.length === 0) {
+        return a.length;
+    }
+    if (a.length > b.length) {
+        var tmp = a;
+        a = b;
+        b = tmp;
+    }
+    var row = [];
+    for (var i = 0; i <= a.length; i++) {
+        row[i] = i;
+    }
+    for (var i = 1; i <= b.length; i++) {
+        var prev = i;
+        for (var j = 1; j <= a.length; j++) {
+            var val = 0;
+            if (b.charAt(i - 1) === a.charAt(j - 1)) {
+                val = row[j - 1];
+            }
+            else {
+                val = Math.min(row[j - 1] + 1, prev + 1, row[j] + 1);
+            }
+            row[j - 1] = prev;
+            prev = val;
+        }
+        row[a.length] = prev;
+    }
+    return row[a.length];
+};
+var makeid = function (length) {
+    var result = "";
+    var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+    var charactersLength = characters.length;
+    for (var i = 0; i < length; i++) {
+        result += characters.charAt(Math.floor(Math.random() * charactersLength));
+    }
+    return result;
+};
+for (var i = 0; i < 10000; i++) {
+    var rnd_num1 = (Math.random() * 1000) | 0;
+    var rnd_num2 = (Math.random() * 1000) | 0;
+    var rnd_string1 = makeid(rnd_num1);
+    var rnd_string2 = makeid(rnd_num2);
+    var actual = distance(rnd_string1, rnd_string2);
+    var expected = levenshtein(rnd_string1, rnd_string2);
+    console.log(i);
+    if (actual !== expected) {
+        console.log("fail");
+    }
+}
Index: imaps-frontend/node_modules/fastest-levenshtein/test.ts
===================================================================
--- imaps-frontend/node_modules/fastest-levenshtein/test.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/fastest-levenshtein/test.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,67 @@
+const { closest, distance } = require("./mod.js");
+
+const levenshtein = (a, b) => {
+  if (a.length === 0) {
+    return b.length;
+  }
+  if (b.length === 0) {
+    return a.length;
+  }
+
+  if (a.length > b.length) {
+    const tmp = a;
+    a = b;
+    b = tmp;
+  }
+
+  const row = [];
+  for (let i = 0; i <= a.length; i++) {
+    row[i] = i;
+  }
+
+  for (let i = 1; i <= b.length; i++) {
+    let prev = i;
+    for (let j = 1; j <= a.length; j++) {
+      let val = 0;
+      if (b.charAt(i - 1) === a.charAt(j - 1)) {
+        val = row[j - 1];
+      } else {
+        val = Math.min(row[j - 1] + 1, prev + 1, row[j] + 1);
+      }
+      row[j - 1] = prev;
+      prev = val;
+    }
+    row[a.length] = prev;
+  }
+
+  return row[a.length];
+};
+
+const makeid = (length) => {
+  let result = "";
+  const characters =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+  const charactersLength = characters.length;
+  for (let i = 0; i < length; i++) {
+    result += characters.charAt(Math.floor(Math.random() * charactersLength));
+  }
+  return result;
+};
+
+test("test compare", () => {
+  for (let i = 0; i < 1000; i++) {
+    const rnd_num1 = (Math.random() * 1000) | 0;
+    const rnd_num2 = (Math.random() * 1000) | 0;
+    const rnd_string1 = makeid(rnd_num1);
+    const rnd_string2 = makeid(rnd_num2);
+    const actual = distance(rnd_string1, rnd_string2);
+    const expected = levenshtein(rnd_string1, rnd_string2);
+    expect(actual).toBe(expected);
+  }
+});
+
+test("test find", () => {
+  const actual = closest("fast", ["slow", "faster", "fastest"]);
+  const expected = "faster";
+  expect(actual).toBe(expected);
+});
