From 5ce9398114e4a980f159f0e897f4cc0523d2d3a7 Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Wed, 7 Oct 2020 15:04:06 +0530 Subject: [PATCH 01/19] Bracket Balance --- src/BloomFilter.js | 1 + src/bracketBalance.js | 30 ++++++++++++++++++++++++++++++ src/index.js | 6 ++++-- test/search/test_kmp.js | 1 - test/search/test_rabin_karp.js | 1 - test/test_bracketBalance.js | 26 ++++++++++++++++++++++++++ test/test_dice_coeff.js | 1 - 7 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 src/BloomFilter.js create mode 100644 src/bracketBalance.js create mode 100644 test/test_bracketBalance.js diff --git a/src/BloomFilter.js b/src/BloomFilter.js new file mode 100644 index 0000000..9a390c3 --- /dev/null +++ b/src/BloomFilter.js @@ -0,0 +1 @@ +"use strict"; \ No newline at end of file diff --git a/src/bracketBalance.js b/src/bracketBalance.js new file mode 100644 index 0000000..00b0037 --- /dev/null +++ b/src/bracketBalance.js @@ -0,0 +1,30 @@ +/** + * + * @param {String} searchSpace text where balancing needs to be checked + * @returns {boolean} states whether text is balanced or not + */ +function isBalanced(searchSpace){ + if(searchSpace.length == 0) return false; + + bracketStack = [] + for(let i=0; i { + const searchSpace1 = "[[[]]]]",searchSpace2 = "I am (an) as{s}guardian",searchSpace3 = "the [code] {speaker} of nativity {nirvana] is (here",searchSpace4 = "( what if i get (comfortable" + + it("Returns false due to extra closing bracket", () => { + assert.strictEqual(bracketBalance(searchSpace1),false); + }); + + it("Returns true due to balance", () => { + assert.strictEqual(bracketBalance(searchSpace2),true); + }); + + it("Returns false due to misbalance", () => { + assert.strictEqual(bracketBalance(searchSpace3),false); + }); + + it("Returns false due to all opening brackets", () => { + assert.strictEqual(bracketBalance(searchSpace4),false); + }); + + it("Returns false due to no search space", () => { + assert.strictEqual(bracketBalance(""),false); + }); +}); \ No newline at end of file diff --git a/test/test_dice_coeff.js b/test/test_dice_coeff.js index 960a647..22d6135 100644 --- a/test/test_dice_coeff.js +++ b/test/test_dice_coeff.js @@ -1,4 +1,3 @@ -/* eslint-env mocha */ const diceCoeff = require('../src').diceCoeff const assert = require('assert'); From 050f089fce961e42384ac7a4ff2fb1590c5a83bc Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Wed, 7 Oct 2020 15:08:17 +0530 Subject: [PATCH 02/19] README update --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5ba716d..cc72a43 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ List of supported Data Structures and Algorithms are : - [Dice Coefficient](https://github.com/thsubaku9/string-dsa/blob/main/src/dice_coeff.js) - [Knuth Morris Pratt](https://github.com/thsubaku9/string-dsa/blob/main/src/search/kmp.js) - [Rabin Karp](https://github.com/thsubaku9/string-dsa/blob/main/src/search/rabin_karp.js) +- [Bracket Balance](https://github.com/thsubaku9/string-dsa/blob/main/src/bracketBalance.js) ## Utilization From 1801f4bdea7dd42ff6f09bb40be84a02ad6a025f Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Wed, 7 Oct 2020 15:09:58 +0530 Subject: [PATCH 03/19] README update --- README.md | 2 +- src/BloomFilter.js | 2 +- src/bracketBalance.js | 4 ++-- src/index.js | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cc72a43..77645d7 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,10 @@ $ npm install string-dsa List of supported Data Structures and Algorithms are : +- [Bracket Balance](https://github.com/thsubaku9/string-dsa/blob/main/src/bracketBalance.js) - [Dice Coefficient](https://github.com/thsubaku9/string-dsa/blob/main/src/dice_coeff.js) - [Knuth Morris Pratt](https://github.com/thsubaku9/string-dsa/blob/main/src/search/kmp.js) - [Rabin Karp](https://github.com/thsubaku9/string-dsa/blob/main/src/search/rabin_karp.js) -- [Bracket Balance](https://github.com/thsubaku9/string-dsa/blob/main/src/bracketBalance.js) ## Utilization diff --git a/src/BloomFilter.js b/src/BloomFilter.js index 9a390c3..3918c74 100644 --- a/src/BloomFilter.js +++ b/src/BloomFilter.js @@ -1 +1 @@ -"use strict"; \ No newline at end of file +"use strict"; diff --git a/src/bracketBalance.js b/src/bracketBalance.js index 00b0037..6f1f712 100644 --- a/src/bracketBalance.js +++ b/src/bracketBalance.js @@ -5,7 +5,7 @@ */ function isBalanced(searchSpace){ if(searchSpace.length == 0) return false; - + bracketStack = [] for(let i=0; i Date: Wed, 7 Oct 2020 15:11:29 +0530 Subject: [PATCH 04/19] README update --- test/test_bracketBalance.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_bracketBalance.js b/test/test_bracketBalance.js index fc58c7a..468252e 100644 --- a/test/test_bracketBalance.js +++ b/test/test_bracketBalance.js @@ -23,4 +23,4 @@ describe("Bracket Balanced",() => { it("Returns false due to no search space", () => { assert.strictEqual(bracketBalance(""),false); }); -}); \ No newline at end of file +}); From 0b0d1825e775942992047a5581a6bcaa4d11cdb2 Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Thu, 8 Oct 2020 16:05:42 +0530 Subject: [PATCH 05/19] Bloom Filter Update! --- README.md | 3 +- package.json | 4 +- src/BloomFilter.js | 107 +++++++++++++++++++++++++++++++++++++++ src/dice_coeff.js | 2 +- src/index.js | 13 +++-- test/test_BloomFilter.js | 25 +++++++++ test/test_dice_coeff.js | 2 +- 7 files changed, 146 insertions(+), 10 deletions(-) create mode 100644 test/test_BloomFilter.js diff --git a/README.md b/README.md index 77645d7..f1e3f53 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ $ npm install string-dsa List of supported Data Structures and Algorithms are : +- [Bloom Filter](https://github.com/thsubaku9/string-dsa/blob/main/src/BloomFilter.js) - [Bracket Balance](https://github.com/thsubaku9/string-dsa/blob/main/src/bracketBalance.js) - [Dice Coefficient](https://github.com/thsubaku9/string-dsa/blob/main/src/dice_coeff.js) - [Knuth Morris Pratt](https://github.com/thsubaku9/string-dsa/blob/main/src/search/kmp.js) @@ -37,7 +38,7 @@ $ npm install Testing: ```sh -$ npm run test +$ npm test ``` Coverage: diff --git a/package.json b/package.json index f9531b0..8ee11c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "string-dsa", - "version": "0.1.1", + "version": "0.2.0", "description": "String Data Structures and Algorithm Library in JavaScript", "main": "src/index.js", "files": [ @@ -17,7 +17,7 @@ "type": "git", "url": "git+https://github.com/thsubaku9/string-dsa.git" }, - "keywords": [], + "keywords": ["String Algorithms","String Data Structures"], "author": "Kaustubh J ", "license": "ISC", "bugs": { diff --git a/src/BloomFilter.js b/src/BloomFilter.js index 3918c74..0c6a9db 100644 --- a/src/BloomFilter.js +++ b/src/BloomFilter.js @@ -1 +1,108 @@ "use strict"; + +/**Class implementation of Bloom Filter */ +class BF{ + /** + * + * @param {Number} buckets The number of buckets for the hash function + * @param {Number} splits The number of splits you wish to have + * @param {Function[]} customHashFn custom hashing function + * + * @returns {BF} the demanded Bloom Filter + */ + constructor(buckets, splits,customHashFn = null){ + this._bucketSize = buckets; + this._splitSize = splits; + this.bucket = new Array(); + this._useInternalHashFn = true; + this._customHashFn = undefined; + this._insertionCount = 0; + + for (let x = 0; x < this._splitSize; x++){ + let internalArray = new Array(this._bucketSize); + for (let y = 0; y< this._bucketSize; y++) internalArray[y] = false; + this.bucket.push(internalArray); + } + + if (customHashFn != null && customHashFn.length == splits){ + this._useInternalHashFn = false; + this._customHashFn = customHashFn; + } else { + this._customHashFn = []; + for(let i=1; i { + return (x) => { + let hash_value = 0; + for (let j=0;j { + + const myBloomFilter = new BloomFilter(100,5); + const t1="Genshin Impact", t2="Dead Cells", t3="Katana Zero", t4="Paladins"; + + it("Insert a few values",() =>{ + assert.doesNotThrow(() => { + myBloomFilter.insert(t1); + myBloomFilter.insert(t2); + }); + }); + + it("check for existence of an inserted value", () => { + assert.strictEqual(myBloomFilter.exists(t1),1); + assert.strictEqual(myBloomFilter.exists(t2),1); + }); + + it("Uninserted value should not exist (AKA True Negative)", () => { + assert.strictEqual(myBloomFilter.exists(t3),0); + assert.strictEqual(myBloomFilter.exists(t4),0); + }); +}); diff --git a/test/test_dice_coeff.js b/test/test_dice_coeff.js index 22d6135..9280515 100644 --- a/test/test_dice_coeff.js +++ b/test/test_dice_coeff.js @@ -10,7 +10,7 @@ describe('Dice Coefficient', () => { it('should return 1 for the same string', () => { const result = diceCoeff(stringOne, stringOne, n); - assert.strictEqual(result,1); + assert.strictEqual(result,1); }); it('should return -1 if either of the strings is empty', () => { From c1f956db14e67f19ba1dc0c47ebd2f3773c0cbde Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Thu, 8 Oct 2020 16:14:58 +0530 Subject: [PATCH 06/19] readme changes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f1e3f53..8a779b3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# string-dsa +# string-dsa [![Build Status](https://travis-ci.com/thsubaku9/string-dsa.svg?branch=main)](https://travis-ci.com/thsubaku9/string-dsa) > String oriented Data Structures and Algorithms library for JavaScript ## Installation From 8549287c968a9bbbece20c733d025d87b18a25eb Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Thu, 8 Oct 2020 16:26:38 +0530 Subject: [PATCH 07/19] spacing --- src/dice_coeff.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dice_coeff.js b/src/dice_coeff.js index c8b186e..b12a38b 100644 --- a/src/dice_coeff.js +++ b/src/dice_coeff.js @@ -58,4 +58,4 @@ function computeDice(st1, st2, n) { //score = 2*sharedValueCount/ (st1ValueCount + st2ValueCount) } -module.exports = computeDice; \ No newline at end of file +module.exports = computeDice; From 2ada1ad0b0029636ca20520666c7dc9ebbb1fe04 Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Sat, 10 Oct 2020 16:23:30 +0530 Subject: [PATCH 08/19] Custom string sort supported --- README.md | 2 +- src/stringSort.js | 79 +++++++++++++++++++++++++++++++++++++++++++++++ test/test_sort.js | 38 +++++++++++++++++++++++ 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 src/stringSort.js create mode 100644 test/test_sort.js diff --git a/README.md b/README.md index 8a779b3..250eeae 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ List of supported Data Structures and Algorithms are : - [Dice Coefficient](https://github.com/thsubaku9/string-dsa/blob/main/src/dice_coeff.js) - [Knuth Morris Pratt](https://github.com/thsubaku9/string-dsa/blob/main/src/search/kmp.js) - [Rabin Karp](https://github.com/thsubaku9/string-dsa/blob/main/src/search/rabin_karp.js) - +- [Custom Sort](ttps://github.com/thsubaku9/string-dsa/blob/main/src/search/stringSort.js) ## Utilization To utilize in Node.Js: diff --git a/src/stringSort.js b/src/stringSort.js new file mode 100644 index 0000000..7dac2de --- /dev/null +++ b/src/stringSort.js @@ -0,0 +1,79 @@ +//This is the best performing comparitive sort using n*l*log(n) timing +//TODO: Burst Sort and Cantor Hashing for optimized sorting + +/** + * Returns index wise sorted array for a string array + * + * @param {object[]} stringArray an Array of Objects + * @param {boolean} byIndex set true if you want results returned by index + * @param {Function} compartorFn implement your custom comparatorFn here ! + * @returns {object[]} Array of index/object in sorted fashion + */ +function sort(stringArray, byIndex = false, compartorFn = null){ + if(stringArray.length <1) return []; + + internalComp = compartorFn === null ? (x,y) => { + let i=0; + while(i { + + const unsortedArr = ["its","the","its","the","rick","dance"]; + const reverseComparator = (y,x) =>{ + let i=0; + while(i { + const res = sort(unsortedArr,true); + assert.deepStrictEqual(res,[ 5, 0, 2, 4, 1, 3 ]); + }); + + it(`should return correct sorted order for the array ${unsortedArr}`,() => { + const res = sort(unsortedArr,false); + assert.deepStrictEqual(res,[ 'dance', 'its', 'its', 'rick', 'the', 'the' ]); + }) + + it(`should return correct descending sort for the array ${unsortedArr}`,() => { + const res = sort(unsortedArr,false,reverseComparator); + assert.deepStrictEqual(res,[ 'the', 'the', 'rick', 'its', 'its', 'dance' ]); + }) + + it(`should return [] for empty array`,() => { + const res = sort([],false); + assert.deepStrictEqual(res,[]); + }) +}); From 5453837c726773f3736acc93565dcf998e48c346 Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Sat, 10 Oct 2020 16:24:12 +0530 Subject: [PATCH 09/19] Custom string sort supported --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 250eeae..666554b 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,10 @@ List of supported Data Structures and Algorithms are : - [Bloom Filter](https://github.com/thsubaku9/string-dsa/blob/main/src/BloomFilter.js) - [Bracket Balance](https://github.com/thsubaku9/string-dsa/blob/main/src/bracketBalance.js) +- [Custom Sort](ttps://github.com/thsubaku9/string-dsa/blob/main/src/search/stringSort.js) - [Dice Coefficient](https://github.com/thsubaku9/string-dsa/blob/main/src/dice_coeff.js) - [Knuth Morris Pratt](https://github.com/thsubaku9/string-dsa/blob/main/src/search/kmp.js) - [Rabin Karp](https://github.com/thsubaku9/string-dsa/blob/main/src/search/rabin_karp.js) -- [Custom Sort](ttps://github.com/thsubaku9/string-dsa/blob/main/src/search/stringSort.js) ## Utilization To utilize in Node.Js: From b082d22671cbd99eac1314c2c243efcaf9de8094 Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Sat, 10 Oct 2020 16:28:16 +0530 Subject: [PATCH 10/19] Custom string sort supported --- package.json | 4 ++-- src/index.js | 4 +++- test/test_sort.js | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 8ee11c1..24f7eb3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "string-dsa", - "version": "0.2.0", + "version": "0.2.1", "description": "String Data Structures and Algorithm Library in JavaScript", "main": "src/index.js", "files": [ @@ -17,7 +17,7 @@ "type": "git", "url": "git+https://github.com/thsubaku9/string-dsa.git" }, - "keywords": ["String Algorithms","String Data Structures"], + "keywords": ["String Algorithms","String Data Structures","Bloom Filter","Custom Sort"], "author": "Kaustubh J ", "license": "ISC", "bugs": { diff --git a/src/index.js b/src/index.js index ba2ac8e..e192cfd 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,6 @@ const bracketBalance = require('./bracketBalance'); const BloomFilter = require('./BloomFilter'); +const customSort = require('./stringSort'); const diceCoeff = require('./dice_coeff'); const kmp = require('./search').kmp; const rabinKarp = require('./search').rabinKarp; @@ -7,7 +8,8 @@ const rabinKarp = require('./search').rabinKarp; module.exports = { BloomFilter, - bracketBalance, + bracketBalance, + customSort, diceCoeff, kmp, rabinKarp diff --git a/test/test_sort.js b/test/test_sort.js index 14432a5..9bd6736 100644 --- a/test/test_sort.js +++ b/test/test_sort.js @@ -1,4 +1,4 @@ -const sort = require('../src').sort; +const sort = require('../src').customSort; const assert = require('assert'); describe("",() => { From 5eccfad7fbd1d66222f3b7984425afccbd23b04b Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Sat, 10 Oct 2020 16:30:12 +0530 Subject: [PATCH 11/19] Custom string sort supported --- test/test_sort.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_sort.js b/test/test_sort.js index 9bd6736..e1b441d 100644 --- a/test/test_sort.js +++ b/test/test_sort.js @@ -1,7 +1,7 @@ const sort = require('../src').customSort; const assert = require('assert'); -describe("",() => { +describe("Custom String Sorting",() => { const unsortedArr = ["its","the","its","the","rick","dance"]; const reverseComparator = (y,x) =>{ From 10f4b66b9775326b3c48fc8b91e6e333c49041fd Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Fri, 16 Oct 2020 12:16:56 +0530 Subject: [PATCH 12/19] sorted implemented --- src/BloomFilter.js | 2 +- src/stringSort.js | 36 ++++++++++++++++++++++++++++++++++-- test/test_sort.js | 13 ++++++++++++- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/BloomFilter.js b/src/BloomFilter.js index 0c6a9db..f951f73 100644 --- a/src/BloomFilter.js +++ b/src/BloomFilter.js @@ -99,7 +99,7 @@ class BF{ let fpr = 1; for( internal_iter= 0; internal_iter { + const internalComp = compartorFn === null ? (x,y) => { let i=0; while(i { + let i=0; + while(i0) return false; + } + return true; +} + +module.exports = { + sort: sort, + sorted: sorted +}; diff --git a/test/test_sort.js b/test/test_sort.js index e1b441d..87d0a23 100644 --- a/test/test_sort.js +++ b/test/test_sort.js @@ -1,4 +1,5 @@ -const sort = require('../src').customSort; +const sort = require('../src').customSort.sort; +const sorted = require('../src').customSort.sorted; const assert = require('assert'); describe("Custom String Sorting",() => { @@ -35,4 +36,14 @@ describe("Custom String Sorting",() => { const res = sort([],false); assert.deepStrictEqual(res,[]); }) + + it(`should return false for unsorted array`, () =>{ + const res = sorted(unsortedArr); + assert.deepStrictEqual(res,false); + }); + + it(`should return true for sorted array`, () =>{ + const res = sorted(sort(unsortedArr,false)); + assert.deepStrictEqual(res,true); + }); }); From a6c301bad71e796834c42017870855b0c8349d18 Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Sat, 17 Oct 2020 14:12:46 +0530 Subject: [PATCH 13/19] webpack config --- .travis.yml | 7 +- package-lock.json | 368 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 15 +- src/stringSort.js | 2 +- webpack.config.js | 23 +++ 5 files changed, 409 insertions(+), 6 deletions(-) create mode 100644 webpack.config.js diff --git a/.travis.yml b/.travis.yml index c45caec..996bbe1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,5 @@ +sudo: false + language: node_js node_js: @@ -7,4 +9,7 @@ install: - npm install script: - - npm test \ No newline at end of file + - npm test + +notifications: + email: false \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0f5134c..580cb77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "string-dsa", - "version": "0.1.1", + "version": "0.2.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -353,6 +353,12 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -678,6 +684,15 @@ "is-string": "^1.0.4" } }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -725,6 +740,12 @@ } } }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -738,12 +759,56 @@ "dev": true, "optional": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", + "dev": true + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -811,6 +876,15 @@ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -1072,6 +1146,12 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, "chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", @@ -1216,6 +1296,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -1307,6 +1396,19 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "coveralls": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", + "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.5", + "request": "^2.88.2" + } + }, "create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", @@ -1401,6 +1503,15 @@ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -1480,6 +1591,12 @@ } } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -1539,6 +1656,16 @@ "stream-shift": "^1.0.0" } }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "elliptic": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", @@ -1843,6 +1970,12 @@ "homedir-polyfill": "^1.0.1" } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -1929,6 +2062,12 @@ } } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2058,6 +2197,23 @@ } } }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -2137,6 +2293,15 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -2233,6 +2398,22 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2386,6 +2567,17 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -2691,6 +2883,12 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, "istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", @@ -2888,6 +3086,12 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -2900,12 +3104,24 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -2915,12 +3131,30 @@ "minimist": "^1.2.0" } }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -2959,6 +3193,12 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, "log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", @@ -3152,6 +3392,21 @@ } } }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -3260,6 +3515,12 @@ "yargs-unparser": "1.6.1" } }, + "mocha-lcov-reporter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mocha-lcov-reporter/-/mocha-lcov-reporter-1.3.0.tgz", + "integrity": "sha1-Rpve9PivyaEWBW8HnfYYLQr7A4Q=", + "dev": true + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -3578,6 +3839,12 @@ } } }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3813,6 +4080,12 @@ "sha.js": "^2.4.8" } }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", @@ -3931,6 +4204,12 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -3992,6 +4271,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -4099,6 +4384,34 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4543,6 +4856,23 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "ssri": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", @@ -4826,6 +5156,16 @@ "is-number": "^7.0.0" } }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -4838,6 +5178,21 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -5016,6 +5371,17 @@ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", diff --git a/package.json b/package.json index cd90a46..2ec555e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "string-dsa", - "version": "0.2.2", + "version": "0.2.3", "description": "String Data Structures and Algorithm Library in JavaScript", "main": "src/index.js", "files": [ @@ -8,16 +8,22 @@ "src" ], "scripts": { - "coverage":"nyc mocha --recursive", + "coverage": "nyc mocha --recursive", "dev": "webpack -d", "test": "mocha --recursive", + "test:coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls", "prod": "webpack -p" }, "repository": { "type": "git", "url": "git+https://github.com/thsubaku9/string-dsa.git" }, - "keywords": ["String Algorithms","String Data Structures","Bloom Filter","Custom Sort"], + "keywords": [ + "String Algorithms", + "String Data Structures", + "Bloom Filter", + "Custom Sort" + ], "author": "Kaustubh J ", "license": "ISC", "bugs": { @@ -25,7 +31,10 @@ }, "homepage": "https://github.com/thsubaku9/string-dsa#readme", "devDependencies": { + "babel-loader": "^8.1.0", + "coveralls": "^3.1.0", "mocha": "^8.1.3", + "mocha-lcov-reporter": "^1.3.0", "nyc": "^15.1.0", "webpack": "^4.44.2", "webpack-cli": "^3.3.12" diff --git a/src/stringSort.js b/src/stringSort.js index 044071e..1df774b 100644 --- a/src/stringSort.js +++ b/src/stringSort.js @@ -70,7 +70,7 @@ function internalSort(indexArray,stringArray,internalComp){ grandMerge.push(sortedRight[0]); sortedRight = sortedRight.slice(1); } - delete leftAr; delete rightAr; + //delete leftAr; delete rightAr; return grandMerge; } diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..361ba8e --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,23 @@ +const path = require('path'); + +module.exports = { + entry : {'string-dsa': './src/index.js'}, + output : { + path: path.resolve(__dirname, 'dist'), + filename: "[name].js", + library: 'stringdsa', + libraryTarget: 'umd' + }, + module : { + rules: [{ + test : /\.js$/, + exclude : /(node_modules)/, + loader: "babel-loader" + }] + }, + devServer : { + contentBase : path.resolve(__dirname, 'dist'), + compress : true, + port : 3000 + } +}; From 11084bddfd973f688d5fd6179f31bcfb0939682d Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Mon, 19 Oct 2020 13:34:43 +0530 Subject: [PATCH 14/19] Edit Distance and 0.3.0 changes --- .travis.yml | 1 + README.md | 3 ++- package.json | 5 +++-- src/edit_distance.js | 37 +++++++++++++++++++++++++++++++++++++ src/index.js | 2 ++ src/stringSort.js | 2 +- test/test_edit_distance.js | 26 ++++++++++++++++++++++++++ 7 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 src/edit_distance.js create mode 100644 test/test_edit_distance.js diff --git a/.travis.yml b/.travis.yml index 996bbe1..0528add 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ install: script: - npm test + - npm run test:coveralls notifications: email: false \ No newline at end of file diff --git a/README.md b/README.md index be5f46c..a9fb686 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# string-dsa [![Build Status](https://travis-ci.com/thsubaku9/string-dsa.svg?branch=main)](https://travis-ci.com/thsubaku9/string-dsa) +# string-dsa [![Build Status](https://travis-ci.com/thsubaku9/string-dsa.svg?branch=main)](https://travis-ci.com/thsubaku9/string-dsa) [![Coverage Status](https://coveralls.io/repos/github/thsubaku9/string-dsa/badge.svg?branch=main)](https://coveralls.io/github/thsubaku9/string-dsa?branch=main) > String oriented Data Structures and Algorithms library for JavaScript ## Installation @@ -15,6 +15,7 @@ List of supported Data Structures and Algorithms are : - [Bracket Balance](https://github.com/thsubaku9/string-dsa/blob/main/src/bracketBalance.js) - [Custom Sort](https://github.com/thsubaku9/string-dsa/blob/main/src/stringSort.js) - [Dice Coefficient](https://github.com/thsubaku9/string-dsa/blob/main/src/dice_coeff.js) +- [Edit/Levenshtein Distance](https://github.com/thsubaku9/string-dsa/blob/main/src/edit_distance.js) - [Knuth Morris Pratt](https://github.com/thsubaku9/string-dsa/blob/main/src/search/kmp.js) - [Rabin Karp](https://github.com/thsubaku9/string-dsa/blob/main/src/search/rabin_karp.js) ## Utilization diff --git a/package.json b/package.json index 2ec555e..f446672 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "string-dsa", - "version": "0.2.3", + "version": "0.3.0", "description": "String Data Structures and Algorithm Library in JavaScript", "main": "src/index.js", "files": [ @@ -22,7 +22,8 @@ "String Algorithms", "String Data Structures", "Bloom Filter", - "Custom Sort" + "Custom Sort", + "Levenshtein Distance" ], "author": "Kaustubh J ", "license": "ISC", diff --git a/src/edit_distance.js b/src/edit_distance.js new file mode 100644 index 0000000..1450808 --- /dev/null +++ b/src/edit_distance.js @@ -0,0 +1,37 @@ +function min(a,b){ + return a < b ? a : b; +} +/** Finds the Edit distance between two strings + * + * @param {String} string1 the first string + * @param {String} string2 the second string + * + * @returns {Number} states the edit distance between two strings + */ +function editDistance(string1, string2) { + editDistanceMatrix = new Array(); + + for(let i = 0; i< string1.length + 1; i++) { + editDistanceMatrix.push(new Array(string2.length + 1)); + } + + for(let i = 0; i< string2.length + 1; i++){ + editDistanceMatrix[0][i] = i; + } + + for(let i = 0; i< string1.length + 1; i++){ + editDistanceMatrix[i][0] = i; + } + + for(let i = 1; i { + const st1 = "bike", st2 = "bichael", st3 = "chef", st4 = "chefery" + it(`should return ${st3.length} for comparision between "" and ${st3}`, () => { + const res = editDistance("",st3); + assert.strictEqual(res,st3.length); + }) + + it(`should return 3 for comparision between ${st3} and ${st4}`, () => { + const res = editDistance(st3,st4); + assert.strictEqual(res,3); + }) + + it(`should return 4 for comparision between ${st1} and ${st3}`, () => { + const res = editDistance(st1,st3); + assert.strictEqual(res,4); + }) + + it(`should return 4 for comparision between ${st1} and ${st2}`, () => { + const res = editDistance(st1,st2); + assert.strictEqual(res,4); + }) +}) \ No newline at end of file From c8be77fe58f64399d5144aa2a6f3f9891227d192 Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Thu, 29 Oct 2020 17:16:37 +0530 Subject: [PATCH 15/19] temp --- README.md | 1 + package.json | 5 +- src/Trie.js | 114 ++++++++++++++++++++++++++++++++++++++++++++++ test/test_Trie.js | 11 +++++ 4 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 src/Trie.js create mode 100644 test/test_Trie.js diff --git a/README.md b/README.md index a9fb686..d68e3c9 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ List of supported Data Structures and Algorithms are : - [Edit/Levenshtein Distance](https://github.com/thsubaku9/string-dsa/blob/main/src/edit_distance.js) - [Knuth Morris Pratt](https://github.com/thsubaku9/string-dsa/blob/main/src/search/kmp.js) - [Rabin Karp](https://github.com/thsubaku9/string-dsa/blob/main/src/search/rabin_karp.js) +- [Trie](https://github.com/thsubaku9/string-dsa/blob/main/src/Trie.js) ## Utilization To utilize in Node.Js: diff --git a/package.json b/package.json index 3988c89..6cb7490 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "string-dsa", - "version": "0.3.1", + "version": "1.0.0", "description": "String Data Structures and Algorithm Library in JavaScript", "main": "src/index.js", "files": [ @@ -23,7 +23,8 @@ "String Data Structures", "Bloom Filter", "Custom Sort", - "Levenshtein Distance" + "Levenshtein Distance", + "Trie" ], "author": "Kaustubh J ", "license": "ISC", diff --git a/src/Trie.js b/src/Trie.js new file mode 100644 index 0000000..d0d6759 --- /dev/null +++ b/src/Trie.js @@ -0,0 +1,114 @@ +"use strict"; + +/**Class implementation of Trie */ +class Trie{ + /** + * Instantiate your Trie class + */ + constructor(){ + this._rootNode = new Object(); + this._rootNode["$"] = false; + } + + /** + * + * @param {String} searchTerm search term to be inserted into the trie + */ + insertSingle(searchTerm){ + //use the root node, if current element isn't there add it; go down the node and iterate over the word + let currNode = this._rootNode; + for (let j=0; j canRemove: ${canRemove} and string value: ${searchTerm[currentIter]}`); + if(canRemove){ + currentNode[searchTerm[currentIter]] = undefined; + return this._hasChildren(currentNode) == 0; + } + } + } else if(currentIter == searchTerm.length) { + console.log("END") + currentNode["$"] = false + if( this._hasChildren(currentNode) == 0) { + return true; + } + } + return false; + } + + /** + * + * @param {Array} searchList pass a List of search terms to be removed from the Trie + */ + removeList(searchList){ + for( let i=0; i{ + + it("",() => { + + }); + + +}) \ No newline at end of file From ac3a4134755073bd623337163bf509cfe1065cb2 Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Thu, 29 Oct 2020 23:23:53 +0530 Subject: [PATCH 16/19] Trie almost done --- src/Trie.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/Trie.js b/src/Trie.js index d0d6759..dfa1b30 100644 --- a/src/Trie.js +++ b/src/Trie.js @@ -51,7 +51,8 @@ class Trie{ _hasChildren(currentNode){ let thisNodeChildren = 0; for (let x in currentNode){ - if(x != undefined && x !="$") thisNodeChildren +=1; + if (x == "$") thisNodeChildren += currentNode[x]; + else if(currentNode[x] != undefined) thisNodeChildren +=1; } return thisNodeChildren; @@ -61,15 +62,13 @@ class Trie{ //recursively dive deep; at reaching depth check if any more elements branch out from this node, if they do return false, else delete the node and return true. recursive step out if(currentIter canRemove: ${canRemove} and string value: ${searchTerm[currentIter]}`); - if(canRemove){ - currentNode[searchTerm[currentIter]] = undefined; + let canRemove = this._removeSingle(searchTerm,currentNode[searchTerm[currentIter]],currentIter +1) + if(canRemove){ + currentNode[searchTerm[currentIter]] = undefined; return this._hasChildren(currentNode) == 0; } } - } else if(currentIter == searchTerm.length) { - console.log("END") + } else if(currentIter == searchTerm.length) { currentNode["$"] = false if( this._hasChildren(currentNode) == 0) { return true; @@ -88,10 +87,20 @@ class Trie{ } } + /** + * + * @param {String} searchSpace the text to be searched over + * + * @returns {Object[]} where each index gives a start position and end position of the term + */ find(searchSpace){ //iterate over all elements and match according to the trie created + for(let i=0;i Date: Fri, 30 Oct 2020 00:15:43 +0530 Subject: [PATCH 17/19] README enhancement --- README.md | 13 ++++++++++++- src/index.js | 4 +++- test/test_Trie.js | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d68e3c9..7bda61b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# string-dsa [![Build Status](https://travis-ci.com/thsubaku9/string-dsa.svg?branch=main)](https://travis-ci.com/thsubaku9/string-dsa) [![Coverage Status](https://coveralls.io/repos/github/thsubaku9/string-dsa/badge.svg?branch=main)](https://coveralls.io/github/thsubaku9/string-dsa?branch=main) +# string-dsa [![Build Status](https://travis-ci.com/thsubaku9/string-dsa.svg?branch=main)](https://travis-ci.com/thsubaku9/string-dsa) [![Coverage Status](https://coveralls.io/repos/github/thsubaku9/string-dsa/badge.svg?branch=main)](https://coveralls.io/github/thsubaku9/string-dsa?branch=main) ![npm](https://img.shields.io/npm/dt/string-dsa?color=cyan&label=Downloads) ![npm](https://img.shields.io/badge/Niche-Yep%20!-ff69b4) > String oriented Data Structures and Algorithms library for JavaScript ## Installation @@ -27,6 +27,17 @@ To utilize in Node.Js: const stringDSA = require('string-dsa'); ``` +To utilize in Frontend: + +```sh +#follow cloning steps +$ npm run prod +$ cp ./dist/string-dsa.js /YOUR/DIRECTORY/FILENAME.js +``` + +```html + +``` ## Development Steps Cloning: diff --git a/src/index.js b/src/index.js index 3386a8e..b8072ce 100644 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,7 @@ const diceCoeff = require('./dice_coeff'); const editDist = require('./edit_distance'); const kmp = require('./search').kmp; const rabinKarp = require('./search').rabinKarp; +const Trie = require('./Trie'); module.exports = { @@ -14,5 +15,6 @@ module.exports = { diceCoeff, editDist, kmp, - rabinKarp + rabinKarp, + Trie }; diff --git a/test/test_Trie.js b/test/test_Trie.js index ce5d9ff..d47ae7a 100644 --- a/test/test_Trie.js +++ b/test/test_Trie.js @@ -1,5 +1,5 @@ const assert = require('assert'); - +const Trie = require('../src').Trie; describe("Trie based tests",() =>{ From 55fd0124c0e2860d6a93bcb6bde4cc2ddf0cfe12 Mon Sep 17 00:00:00 2001 From: Kukulkan Date: Fri, 30 Oct 2020 14:46:37 +0530 Subject: [PATCH 18/19] Trie done --- README.md | 6 +++--- src/Trie.js | 21 +++++++++++++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7bda61b..6ecc9b8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# string-dsa [![Build Status](https://travis-ci.com/thsubaku9/string-dsa.svg?branch=main)](https://travis-ci.com/thsubaku9/string-dsa) [![Coverage Status](https://coveralls.io/repos/github/thsubaku9/string-dsa/badge.svg?branch=main)](https://coveralls.io/github/thsubaku9/string-dsa?branch=main) ![npm](https://img.shields.io/npm/dt/string-dsa?color=cyan&label=Downloads) ![npm](https://img.shields.io/badge/Niche-Yep%20!-ff69b4) +# string-dsa [![Build Status](https://travis-ci.com/thsubaku9/string-dsa.svg?branch=main)](https://travis-ci.com/thsubaku9/string-dsa) [![Coverage Status](https://coveralls.io/repos/github/thsubaku9/string-dsa/badge.svg?branch=main)](https://coveralls.io/github/thsubaku9/string-dsa?branch=main) ![npm](https://img.shields.io/npm/dt/string-dsa?color=fddb3a) ![npm](https://img.shields.io/badge/Niche-Yep%20!-ff69b4) > String oriented Data Structures and Algorithms library for JavaScript ## Installation @@ -27,10 +27,10 @@ To utilize in Node.Js: const stringDSA = require('string-dsa'); ``` -To utilize in Frontend: +To utilize in Vanilla Js: ```sh -#follow cloning steps +# follow cloning steps $ npm run prod $ cp ./dist/string-dsa.js /YOUR/DIRECTORY/FILENAME.js ``` diff --git a/src/Trie.js b/src/Trie.js index dfa1b30..17e17e0 100644 --- a/src/Trie.js +++ b/src/Trie.js @@ -91,16 +91,33 @@ class Trie{ * * @param {String} searchSpace the text to be searched over * - * @returns {Object[]} where each index gives a start position and end position of the term + * @returns {Array[]} where each index gives a start position and end position of the term */ find(searchSpace){ //iterate over all elements and match according to the trie created + let returnArray = []; for(let i=0;i Date: Fri, 30 Oct 2020 16:00:24 +0530 Subject: [PATCH 19/19] tried and tested --- README.md | 2 +- package-lock.json | 2 +- package.json | 4 ++-- src/Trie.js | 4 ++-- test/test_Trie.js | 20 ++++++++++++++++++-- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6ecc9b8..3e4d36c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# string-dsa [![Build Status](https://travis-ci.com/thsubaku9/string-dsa.svg?branch=main)](https://travis-ci.com/thsubaku9/string-dsa) [![Coverage Status](https://coveralls.io/repos/github/thsubaku9/string-dsa/badge.svg?branch=main)](https://coveralls.io/github/thsubaku9/string-dsa?branch=main) ![npm](https://img.shields.io/npm/dt/string-dsa?color=fddb3a) ![npm](https://img.shields.io/badge/Niche-Yep%20!-ff69b4) +# string-dsa [![Build Status](https://travis-ci.com/thsubaku9/string-dsa.svg?branch=main)](https://travis-ci.com/thsubaku9/string-dsa) [![Coverage Status](https://coveralls.io/repos/github/thsubaku9/string-dsa/badge.svg?branch=main)](https://coveralls.io/github/thsubaku9/string-dsa?branch=main) ![npm](https://img.shields.io/npm/dt/string-dsa?color=fddb3a) ![npm](https://img.shields.io/badge/Niche-Yep!-ff69b4) > String oriented Data Structures and Algorithms library for JavaScript ## Installation diff --git a/package-lock.json b/package-lock.json index 580cb77..98d39aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "string-dsa", - "version": "0.2.3", + "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6cb7490..b5df213 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "string-dsa", "version": "1.0.0", - "description": "String Data Structures and Algorithm Library in JavaScript", + "description": "String Data Structures and Algorithms Library in JavaScript", "main": "src/index.js", "files": [ "dist", "src" ], "scripts": { - "coverage": "nyc mocha --recursive", + "coverage": "nyc mocha --recursive", "dev": "webpack -d", "test": "mocha --recursive", "test:coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls", diff --git a/src/Trie.js b/src/Trie.js index 17e17e0..bb46044 100644 --- a/src/Trie.js +++ b/src/Trie.js @@ -119,7 +119,7 @@ class Trie{ /** - * @returns {Array} returns the Array of all inserted elements + * @returns {String[]} returns the array of all inserted elements */ listAllElements(){ let elementList = [] @@ -132,7 +132,7 @@ class Trie{ elementList.push(stringSeq); } for (let x in node){ - if(x != "$") this._listFromNode(node[x],elementList,stringSeq + x); + if(x != "$" && (node[x] != undefined)) this._listFromNode(node[x],elementList,stringSeq + x); } } } diff --git a/test/test_Trie.js b/test/test_Trie.js index d47ae7a..76d65ba 100644 --- a/test/test_Trie.js +++ b/test/test_Trie.js @@ -3,9 +3,25 @@ const Trie = require('../src').Trie; describe("Trie based tests",() =>{ - it("",() => { + const myT = new Trie(); + const st1 = "can" + const st2 = "candy" + const st3 = "ban" + const searchSpace = "can the real candy ban?" + const resultPos = [ [ 0, 2 ], [ 13, 15 ], [ 13, 17 ], [ 19, 21 ] ] + it("should insert a bunch of keys",() => { + myT.insertList([st1,st2,st3]) + assert.deepStrictEqual(myT.listAllElements(),[st1,st2,st3]) + }); + it("should find correct locations of searchSpace",() => { + const res = myT.find(searchSpace) + assert.deepStrictEqual(res,resultPos) }); - + it("remove given keys", () => { + myT.removeList([st2,st3]) + assert.deepStrictEqual(myT.listAllElements(),[st1]); + myT.insertList([st2,st3]) + }) }) \ No newline at end of file