From d12ebc24e373f246666cc9fe409e45de0adf2e1b Mon Sep 17 00:00:00 2001 From: Loiane Groner Date: Sat, 27 Feb 2016 15:57:46 -0300 Subject: [PATCH 001/188] Update 03-AVLTree.js --- chapter08/03-AVLTree.js | 149 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/chapter08/03-AVLTree.js b/chapter08/03-AVLTree.js index e69de29b..277a22b6 100644 --- a/chapter08/03-AVLTree.js +++ b/chapter08/03-AVLTree.js @@ -0,0 +1,149 @@ +function AVLTree() { + + var Node = function(key){ + this.key = key; + this.left = null; + this.right = null; + }; + + var root = null; + + this.getRoot = function(){ + return root; + }; + + var heightNode = function(node) { + if (node === null) { + return -1; + } else { + return Math.max(heightNode(node.left), heightNode(node.right)) + 1; + } + }; + + var rotationLL = function(node) { + var tmp = node.left; + node.left = tmp.right; + tmp.right = node; + + return tmp; + }; + + var rotationRR = function(node) { + var tmp = node.right; + node.right = tmp.left; + tmp.left = node; + + return tmp; + }; + + var rotationLR = function(node) { + node.left = rotationRR(node.left); + return rotationLL(node); + }; + + var rotationRL = function(node) { + node.right = rotationLL(node.right); + return rotationRR(node); + }; + + var insertNode = function(node, element) { + + if (node === null) { + node = new Node(element); + + } else if (element < node.key) { + + node.left = insertNode(node.left, element); + + if (node.left !== null) { + + if ((heightNode(node.left) - heightNode(node.right)) > 1){ + if (element < node.left.key){ + node = rotationLL(node); + } else { + node = rotationLR(node); + } + } + } + } else if (element > node.key) { + + node.right = insertNode(node.right, element); + + if (node.right !== null) { + + if ((heightNode(node.right) - heightNode(node.left)) > 1){ + + if (element > node.right.key){ + node = rotationRR(node); + } else { + node = rotationRL(node); + } + } + } + } + + return node; + }; + + this.insert = function(element) { + root = insertNode(root, element); + }; + + var parentNode; + var nodeToBeDeleted; + + var removeNode = function(node, element) { + if (node === null) { + return null; + } + parentNode = node; + + if (element < node.key) { + node.left = removeNode(node.left, element); + } else { + nodeToBeDeleted = node; + node.right = removeNode(node.right, element); + } + + if (node === parentNode) { //remove node + if (nodeToBeDeleted !== null && element === nodeToBeDeleted.key) { + if (nodeToBeDeleted === parentNode) { + node = node.left; + } else { + var tmp = nodeToBeDeleted.key; + nodeToBeDeleted.key = parentNode.key; + parentNode.key = tmp; + node = node.right; + } + } + } else { //do balancing + + if (node.left === undefined) node.left = null; + if (node.right === undefined) node.right = null; + + if ((heightNode(node.left) - heightNode(node.right)) === 2) { + if (element < node.left.key) { + node = rotationLR(node); + } else { + node = rotationLL(node); + } + } + + if ((heightNode(node.right) - heightNode(node.left)) === 2) { + if (element > node.right.key) { + node = rotationRL(node); + } else { + node = rotationRR(node); + } + } + } + + return node; + }; + + this.remove = function(element) { + parentNode = null; + nodeToBeDeleted = null; + root = removeNode(root, element); + }; +} From 2ac724e0b4017458738e808b772fcb49ea7e7949 Mon Sep 17 00:00:00 2001 From: Loiane Groner Date: Sat, 27 Feb 2016 15:58:06 -0300 Subject: [PATCH 002/188] Update 04-UsingAVLTree.js --- chapter08/04-UsingAVLTree.js | 61 ++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/chapter08/04-UsingAVLTree.js b/chapter08/04-UsingAVLTree.js index e69de29b..1f70c66c 100644 --- a/chapter08/04-UsingAVLTree.js +++ b/chapter08/04-UsingAVLTree.js @@ -0,0 +1,61 @@ +var avlTree = new AVLTree(); + +avlTree.insert(1); +avlTree.insert(2); +avlTree.insert(3); +avlTree.insert(4); +avlTree.insert(5); +avlTree.insert(6); +avlTree.insert(7); +avlTree.insert(14); +avlTree.insert(15); +avlTree.insert(13); +avlTree.insert(12); +avlTree.insert(11); + +//RR rotation +/*avlTree.insert(50); +avlTree.insert(30); +avlTree.insert(70); +avlTree.insert(60); +avlTree.insert(80); +avlTree.insert(90);*/ + +//LL rotation +/*avlTree.insert(50); +avlTree.insert(30); +avlTree.insert(70); +avlTree.insert(10); +avlTree.insert(40); +avlTree.insert(5);*/ + +//LR rotation +/*avlTree.insert(50); +avlTree.insert(30); +avlTree.insert(70); +avlTree.insert(40); +avlTree.insert(10); +avlTree.insert(35);*/ + +//RL rotation +/*avlTree.insert(70); +avlTree.insert(50); +avlTree.insert(80); +avlTree.insert(72); +avlTree.insert(90); +avlTree.insert(75);*/ + +console.log('********* raw data structure ***********'); +console.log(avlTree.getRoot()); + +/*avlTree.remove(12); +avlTree.remove(15); +avlTree.remove(11); +avlTree.remove(14); +avlTree.remove(13); +avlTree.remove(7); +avlTree.remove(6); +avlTree.remove(2); +avlTree.remove(4); + +console.log(avlTree.getRoot());*/ From 9945233c4fd172a28a26aa8d1a8b555cd19991af Mon Sep 17 00:00:00 2001 From: loiane Date: Thu, 7 Sep 2017 09:16:04 -0300 Subject: [PATCH 003/188] gitignore --- .gitignore | 4 +- npm-debug.log | 180 -------------------------------------------------- 2 files changed, 3 insertions(+), 181 deletions(-) delete mode 100644 npm-debug.log diff --git a/.gitignore b/.gitignore index 6fee6d3a..2458e8b0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .idea/* -*.log \ No newline at end of file +*.log +node_modules +coverage diff --git a/npm-debug.log b/npm-debug.log deleted file mode 100644 index 324f5d2d..00000000 --- a/npm-debug.log +++ /dev/null @@ -1,180 +0,0 @@ -0 info it worked if it ends with ok -1 verbose cli [ 'node', '/usr/local/bin/npm', 'install', 'http-server', '-g' ] -2 info using npm@1.4.23 -3 info using node@v0.10.31 -4 verbose cache add [ 'http-server', null ] -5 verbose cache add name=undefined spec="http-server" args=["http-server",null] -6 verbose parsed url { protocol: null, -6 verbose parsed url slashes: null, -6 verbose parsed url auth: null, -6 verbose parsed url host: null, -6 verbose parsed url port: null, -6 verbose parsed url hostname: null, -6 verbose parsed url hash: null, -6 verbose parsed url search: null, -6 verbose parsed url query: null, -6 verbose parsed url pathname: 'http-server', -6 verbose parsed url path: 'http-server', -6 verbose parsed url href: 'http-server' } -7 silly lockFile ed608307-http-server http-server -8 verbose lock http-server /Users/loiane/.npm/ed608307-http-server.lock -9 silly lockFile ed608307-http-server http-server -10 silly lockFile ed608307-http-server http-server -11 verbose addNamed [ 'http-server', '' ] -12 verbose addNamed [ null, '*' ] -13 silly lockFile 550353c6-http-server http-server@ -14 verbose lock http-server@ /Users/loiane/.npm/550353c6-http-server.lock -15 silly addNameRange { name: 'http-server', range: '*', hasData: false } -16 verbose request where is /http-server -17 verbose request registry https://registry.npmjs.org/ -18 verbose request id 5de596c601e747df -19 verbose url raw /http-server -20 verbose url resolving [ 'https://registry.npmjs.org/', './http-server' ] -21 verbose url resolved https://registry.npmjs.org/http-server -22 verbose request where is https://registry.npmjs.org/http-server -23 info trying registry request attempt 1 at 16:26:40 -24 http GET https://registry.npmjs.org/http-server -25 http 200 https://registry.npmjs.org/http-server -26 silly registry.get cb [ 200, -26 silly registry.get { date: 'Mon, 01 Sep 2014 19:26:41 GMT', -26 silly registry.get server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)', -26 silly registry.get etag: '"GRUZZAK9N6WU29IC3EFS78GW"', -26 silly registry.get 'content-type': 'application/json', -26 silly registry.get 'cache-control': 'max-age=60', -26 silly registry.get 'content-length': '42618', -26 silly registry.get 'accept-ranges': 'bytes', -26 silly registry.get via: '1.1 varnish', -26 silly registry.get age: '942', -26 silly registry.get 'x-served-by': 'cache-iad2134-IAD', -26 silly registry.get 'x-cache': 'HIT', -26 silly registry.get 'x-cache-hits': '1', -26 silly registry.get 'x-timer': 'S1409599601.088721,VS0,VE16', -26 silly registry.get vary: 'Accept', -26 silly registry.get 'keep-alive': 'timeout=10, max=50', -26 silly registry.get connection: 'Keep-Alive' } ] -27 silly addNameRange number 2 { name: 'http-server', range: '*', hasData: true } -28 silly addNameRange versions [ 'http-server', -28 silly addNameRange [ '0.1.0', -28 silly addNameRange '0.1.1', -28 silly addNameRange '0.1.3', -28 silly addNameRange '0.2.1', -28 silly addNameRange '0.2.2', -28 silly addNameRange '0.2.3', -28 silly addNameRange '0.2.4', -28 silly addNameRange '0.2.5', -28 silly addNameRange '0.2.6', -28 silly addNameRange '0.2.9', -28 silly addNameRange '0.3.0', -28 silly addNameRange '0.4.0', -28 silly addNameRange '0.4.1', -28 silly addNameRange '0.5.0', -28 silly addNameRange '0.5.1', -28 silly addNameRange '0.5.2', -28 silly addNameRange '0.5.3', -28 silly addNameRange '0.5.5', -28 silly addNameRange '0.6.0', -28 silly addNameRange '0.6.1' ] ] -29 verbose addNamed [ 'http-server', '0.6.1' ] -30 verbose addNamed [ '0.6.1', '0.6.1' ] -31 silly lockFile 1e2b2518-http-server-0-6-1 http-server@0.6.1 -32 verbose lock http-server@0.6.1 /Users/loiane/.npm/1e2b2518-http-server-0-6-1.lock -33 silly lockFile c3f4b4b6-ttp-server-http-server-0-6-1-tgz https://registry.npmjs.org/http-server/-/http-server-0.6.1.tgz -34 verbose lock https://registry.npmjs.org/http-server/-/http-server-0.6.1.tgz /Users/loiane/.npm/c3f4b4b6-ttp-server-http-server-0-6-1-tgz.lock -35 verbose addRemoteTarball [ 'https://registry.npmjs.org/http-server/-/http-server-0.6.1.tgz', -35 verbose addRemoteTarball '06fce65cf2bd4132a578bdac62ffacb97d613981' ] -36 info retry fetch attempt 1 at 16:26:42 -37 verbose fetch to= /var/folders/p6/h5zxx5c5153gfhgsvg1_s6n80000gn/T/npm-4783-wjg257Iq/registry.npmjs.org/http-server/-/http-server-0.6.1.tgz -38 http GET https://registry.npmjs.org/http-server/-/http-server-0.6.1.tgz -39 http 200 https://registry.npmjs.org/http-server/-/http-server-0.6.1.tgz -40 silly lockFile c3f4b4b6-ttp-server-http-server-0-6-1-tgz https://registry.npmjs.org/http-server/-/http-server-0.6.1.tgz -41 silly lockFile c3f4b4b6-ttp-server-http-server-0-6-1-tgz https://registry.npmjs.org/http-server/-/http-server-0.6.1.tgz -42 silly lockFile 1e2b2518-http-server-0-6-1 http-server@0.6.1 -43 silly lockFile 1e2b2518-http-server-0-6-1 http-server@0.6.1 -44 silly lockFile 550353c6-http-server http-server@ -45 silly lockFile 550353c6-http-server http-server@ -46 silly resolved [ { name: 'http-server', -46 silly resolved version: '0.6.1', -46 silly resolved author: { name: 'Nodejitsu', email: 'support@nodejitsu.com' }, -46 silly resolved description: 'a simple zero-configuration command-line http server', -46 silly resolved main: './lib/http-server', -46 silly resolved repository: -46 silly resolved { type: 'git', -46 silly resolved url: 'git://github.com/nodeapps/http-server.git' }, -46 silly resolved keywords: [ 'cli', 'command' ], -46 silly resolved scripts: -46 silly resolved { start: 'node ./bin/http-server', -46 silly resolved test: 'vows --spec --isolate' }, -46 silly resolved contributors: -46 silly resolved [ [Object], -46 silly resolved [Object], -46 silly resolved [Object], -46 silly resolved [Object], -46 silly resolved [Object], -46 silly resolved [Object], -46 silly resolved [Object], -46 silly resolved [Object] ], -46 silly resolved dependencies: -46 silly resolved { colors: '0.6.x', -46 silly resolved optimist: '0.5.x', -46 silly resolved union: '0.3.x', -46 silly resolved ecstatic: '0.4.x', -46 silly resolved portfinder: '0.2.x', -46 silly resolved opener: '~1.3.0' }, -46 silly resolved devDependencies: { vows: '0.7.x', request: '2.21.x' }, -46 silly resolved bugs: { url: 'https://github.com/nodeapps/http-server/issues' }, -46 silly resolved licenses: [ [Object] ], -46 silly resolved analyze: false, -46 silly resolved preferGlobal: 'true', -46 silly resolved bin: { 'http-server': './bin/http-server' }, -46 silly resolved readme: '# http-server: a command-line http server\n\n`http-server` is a simple, zero-configuration command-line http server. It is powerful enough for production usage, but it\'s simple and hackable enough to be used for testing, local development, and learning.\n\n![](https://github.com/nodeapps/http-server/raw/master/screenshots/public.png)\n\n# Installing globally:\n\nInstallation via `npm`. If you don\'t have `npm` yet:\n\n curl https://npmjs.org/install.sh | sh\n \nOnce you have `npm`:\n\n npm install http-server -g\n \nThis will install `http-server` globally so that it may be run from the command line.\n\n## Usage:\n\n http-server [path] [options]\n\n`[path]` defaults to `./public` if the folder exists, and `./` otherwise.\n\n# Installing as a node app\n\n mkdir myapp\n cd myapp/\n jitsu install http-server\n\n*If you do not have `jitsu` installed you can install it via `npm install jitsu -g`*\n\n## Usage\n\n### Starting http-server locally\n\n node bin/http-server\n\n*Now you can visit http://localhost:8080 to view your server*\n\n### Deploy http-server to nodejitsu\n\n jitsu deploy\n\n*You will now be prompted for a `subdomain` to deploy your application on*\n\n## Available Options:\n\n`-p` Port to listen for connections on (defaults to 8080)\n\n`-a` Address to bind to (defaults to \'0.0.0.0\')\n\n`-d` Show directory listings (defaults to \'True\')\n\n`-i` Display autoIndex (defaults to \'True\')\n\n`-e` or `--ext` Default file extension (defaults to \'html\')\n\n`-s` or `--silent` In silent mode, log messages aren\'t logged to the console.\n\n`-h` or `--help` Displays a list of commands and exits.\n\n`-c` Set cache time (in seconds) for cache-control max-age header, e.g. -c10 for 10 seconds. To disable caching, use -c-1.\n', -46 silly resolved readmeFilename: 'README.md', -46 silly resolved homepage: 'https://github.com/nodeapps/http-server', -46 silly resolved _id: 'http-server@0.6.1', -46 silly resolved dist: -46 silly resolved { shasum: '06fce65cf2bd4132a578bdac62ffacb97d613981', -46 silly resolved tarball: 'http://registry.npmjs.org/http-server/-/http-server-0.6.1.tgz' }, -46 silly resolved _from: 'http-server@', -46 silly resolved _npmVersion: '1.3.14', -46 silly resolved _npmUser: { name: 'indexzero', email: 'charlie.robbins@gmail.com' }, -46 silly resolved maintainers: [ [Object], [Object], [Object] ], -46 silly resolved directories: {}, -46 silly resolved _shasum: '06fce65cf2bd4132a578bdac62ffacb97d613981', -46 silly resolved _resolved: 'https://registry.npmjs.org/http-server/-/http-server-0.6.1.tgz' } ] -47 info install http-server@0.6.1 into /usr/local/lib -48 info installOne http-server@0.6.1 -49 verbose lib/node_modules/http-server unbuild -50 verbose tar unpack /Users/loiane/.npm/http-server/0.6.1/package.tgz -51 silly lockFile c2cc12bc-cal-lib-node-modules-http-server tar:///usr/local/lib/node_modules/http-server -52 verbose lock tar:///usr/local/lib/node_modules/http-server /Users/loiane/.npm/c2cc12bc-cal-lib-node-modules-http-server.lock -53 silly lockFile 57f8618f-pm-http-server-0-6-1-package-tgz tar:///Users/loiane/.npm/http-server/0.6.1/package.tgz -54 verbose lock tar:///Users/loiane/.npm/http-server/0.6.1/package.tgz /Users/loiane/.npm/57f8618f-pm-http-server-0-6-1-package-tgz.lock -55 silly gunzTarPerm modes [ '755', '644' ] -56 error Error: EACCES, mkdir '/usr/local/lib/node_modules/http-server' -56 error { [Error: EACCES, mkdir '/usr/local/lib/node_modules/http-server'] -56 error errno: 3, -56 error code: 'EACCES', -56 error path: '/usr/local/lib/node_modules/http-server', -56 error fstream_type: 'Directory', -56 error fstream_path: '/usr/local/lib/node_modules/http-server', -56 error fstream_class: 'DirWriter', -56 error fstream_stack: -56 error [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23', -56 error '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:46:53', -56 error 'Object.oncomplete (fs.js:107:15)' ] } -57 error Please try running this command again as root/Administrator. -58 error System Darwin 13.3.0 -59 error command "node" "/usr/local/bin/npm" "install" "http-server" "-g" -60 error cwd /Applications/XAMPP/xamppfiles/htdocs/javascript-datastructures-algorithms -61 error node -v v0.10.31 -62 error npm -v 1.4.23 -63 error path /usr/local/lib/node_modules/http-server -64 error fstream_path /usr/local/lib/node_modules/http-server -65 error fstream_type Directory -66 error fstream_class DirWriter -67 error code EACCES -68 error errno 3 -69 error stack Error: EACCES, mkdir '/usr/local/lib/node_modules/http-server' -70 error fstream_stack /usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23 -70 error fstream_stack /usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:46:53 -70 error fstream_stack Object.oncomplete (fs.js:107:15) -71 verbose exit [ 3, true ] From 10b24fd4a3ec01aa8db5a5bffb29e55559647dae Mon Sep 17 00:00:00 2001 From: loiane Date: Thu, 7 Sep 2017 09:18:28 -0300 Subject: [PATCH 004/188] gitignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6fee6d3a..2458e8b0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .idea/* -*.log \ No newline at end of file +*.log +node_modules +coverage From 51eec82d466aa234f0feab8b5638603599b91976 Mon Sep 17 00:00:00 2001 From: loiane Date: Thu, 7 Sep 2017 18:30:13 -0300 Subject: [PATCH 005/188] removed first edition content --- README.md | 28 -- chapter01/01-HelloWorld.html | 14 - chapter01/01-HelloWorld.js | 8 - chapter01/02-Variables.html | 10 - chapter01/02-Variables.js | 37 --- chapter01/03-Operators.html | 10 - chapter01/03-Operators.js | 68 ----- chapter01/04-TruthyFalsy.html | 10 - chapter01/04-TruthyFalsy.js | 23 -- chapter01/05-EqualsOperators.html | 10 - chapter01/05-EqualsOperators.js | 36 --- chapter01/06-ConditionalStatements.html | 10 - chapter01/06-ConditionalStatements.js | 51 ---- chapter01/07-Loops.html | 10 - chapter01/07-Loops.js | 23 -- chapter01/08-Functions.html | 10 - chapter01/08-Functions.js | 28 -- chapter01/09-ObjectOrientedJS.html | 10 - chapter01/09-ObjectOrientedJS.js | 42 --- chapter02/01-Introduction.html | 10 - chapter02/01-Introduction.js | 12 - chapter02/02-CreatingAndInitialingArrays.html | 10 - chapter02/02-CreatingAndInitialingArrays.js | 34 --- chapter02/03-AddingRemovingElements.html | 10 - chapter02/03-AddingRemovingElements.js | 73 ----- .../04-TwoDimensionalMultiDimensional.html | 10 - .../04-TwoDimensionalMultiDimensional.js | 62 ----- chapter02/05-ArrayMethods.html | 10 - chapter02/05-ArrayMethods.js | 113 -------- chapter03/01-Stack.html | 10 - chapter03/01-Stack.js | 36 --- chapter03/02-UsingStacks.html | 11 - chapter03/02-UsingStacks.js | 13 - chapter03/03-BalancedSymbols.html | 11 - chapter03/03-BalancedSymbols.js | 37 --- chapter03/04-DecimalToBinary.html | 11 - chapter03/04-DecimalToBinary.js | 52 ---- chapter03/05-TowerOfHanoi.html | 11 - chapter03/05-TowerOfHanoi.js | 26 -- chapter04/01-Queue.html | 10 - chapter04/01-Queue.js | 32 --- chapter04/02-UsingQueues.html | 11 - chapter04/02-UsingQueues.js | 12 - chapter04/03-PriorityQueue.html | 10 - chapter04/03-PriorityQueue.js | 60 ----- chapter04/04-HotPotato.html | 11 - chapter04/04-HotPotato.js | 23 -- chapter05/01-Linked-List.js | 151 ----------- chapter05/02-UsingLinkedLists.html | 11 - chapter05/02-UsingLinkedLists.js | 32 --- chapter05/03-Doubly-Linked-List.js | 217 --------------- chapter05/04-UsingDoublyLinkedLists.html | 11 - chapter05/04-UsingDoublyLinkedLists.js | 49 ---- chapter05/05-CircularLinkedList.js | 187 ------------- chapter05/06-UsingCircularLinkedList.html | 11 - chapter05/06-UsingCircularLinkedList.js | 28 -- chapter06/01-Set.js | 136 ---------- chapter06/02-UsingSets.html | 11 - chapter06/02-UsingSets.js | 18 -- chapter06/03-Operations.html | 11 - chapter06/03-Operations.js | 65 ----- chapter07/01-Dictionaries.js | 59 ---- chapter07/02-UsingDictionaries.html | 11 - chapter07/02-UsingDictionaries.js | 19 -- chapter07/03-HashTable.js | 46 ---- chapter07/04-UsingHash.html | 11 - chapter07/04-UsingHash.js | 29 -- chapter07/05-HashCollisionSeparateChaining.js | 99 ------- ...06-UsingHashCollisionSeparateChaining.html | 12 - .../06-UsingHashCollisionSeparateChaining.js | 40 --- chapter07/07-HashCollisionLinearProbing.js | 85 ------ .../08-UsingHashCollisionLinearProbing.html | 11 - .../08-UsingHashCollisionLinearProbing.js | 29 -- chapter08/01-BinarySearchTree.js | 187 ------------- chapter08/02-UsingBinarySearchTree.html | 11 - chapter08/02-UsingBinarySearchTree.js | 52 ---- chapter08/03-AVLTree.js | 149 ----------- chapter08/04-UsingAVLTree.html | 11 - chapter08/04-UsingAVLTree.js | 61 ----- chapter09/01-Graph.js | 172 ------------ chapter09/02-UsingGraphs.html | 14 - chapter09/02-UsingGraphs.js | 97 ------- chapter10/01-SortingSearchingAlgorithms.js | 251 ------------------ chapter10/02-UsingSortingAlgorithms.html | 11 - chapter10/02-UsingSortingAlgorithms.js | 90 ------- chapter10/03-UsingSearchingAlgorithms.html | 11 - chapter10/03-UsingSearchingAlgorithms.js | 33 --- chapter11/01-Recursion.html | 10 - chapter11/01-Recursion.js | 25 -- chapter11/02-InfiniteRecursion.html | 10 - chapter11/02-InfiniteRecursion.js | 15 -- chapter11/03-MinCoinChangeDP.html | 10 - chapter11/03-MinCoinChangeDP.js | 40 --- chapter11/04-MinCoinChangeGreedy.html | 10 - chapter11/04-MinCoinChangeGreedy.js | 26 -- chapter11/05-BigONotation.html | 10 - chapter11/05-BigONotation.js | 65 ----- chapter11/bigOChart/chart.js | 37 --- chapter11/bigOChart/index.html | 14 - 99 files changed, 3980 deletions(-) delete mode 100644 README.md delete mode 100644 chapter01/01-HelloWorld.html delete mode 100644 chapter01/01-HelloWorld.js delete mode 100644 chapter01/02-Variables.html delete mode 100644 chapter01/02-Variables.js delete mode 100644 chapter01/03-Operators.html delete mode 100644 chapter01/03-Operators.js delete mode 100644 chapter01/04-TruthyFalsy.html delete mode 100644 chapter01/04-TruthyFalsy.js delete mode 100644 chapter01/05-EqualsOperators.html delete mode 100644 chapter01/05-EqualsOperators.js delete mode 100644 chapter01/06-ConditionalStatements.html delete mode 100644 chapter01/06-ConditionalStatements.js delete mode 100644 chapter01/07-Loops.html delete mode 100644 chapter01/07-Loops.js delete mode 100644 chapter01/08-Functions.html delete mode 100644 chapter01/08-Functions.js delete mode 100644 chapter01/09-ObjectOrientedJS.html delete mode 100644 chapter01/09-ObjectOrientedJS.js delete mode 100644 chapter02/01-Introduction.html delete mode 100644 chapter02/01-Introduction.js delete mode 100644 chapter02/02-CreatingAndInitialingArrays.html delete mode 100644 chapter02/02-CreatingAndInitialingArrays.js delete mode 100644 chapter02/03-AddingRemovingElements.html delete mode 100644 chapter02/03-AddingRemovingElements.js delete mode 100644 chapter02/04-TwoDimensionalMultiDimensional.html delete mode 100644 chapter02/04-TwoDimensionalMultiDimensional.js delete mode 100644 chapter02/05-ArrayMethods.html delete mode 100644 chapter02/05-ArrayMethods.js delete mode 100644 chapter03/01-Stack.html delete mode 100644 chapter03/01-Stack.js delete mode 100644 chapter03/02-UsingStacks.html delete mode 100644 chapter03/02-UsingStacks.js delete mode 100644 chapter03/03-BalancedSymbols.html delete mode 100644 chapter03/03-BalancedSymbols.js delete mode 100644 chapter03/04-DecimalToBinary.html delete mode 100644 chapter03/04-DecimalToBinary.js delete mode 100644 chapter03/05-TowerOfHanoi.html delete mode 100644 chapter03/05-TowerOfHanoi.js delete mode 100644 chapter04/01-Queue.html delete mode 100644 chapter04/01-Queue.js delete mode 100644 chapter04/02-UsingQueues.html delete mode 100644 chapter04/02-UsingQueues.js delete mode 100644 chapter04/03-PriorityQueue.html delete mode 100644 chapter04/03-PriorityQueue.js delete mode 100644 chapter04/04-HotPotato.html delete mode 100644 chapter04/04-HotPotato.js delete mode 100644 chapter05/01-Linked-List.js delete mode 100644 chapter05/02-UsingLinkedLists.html delete mode 100644 chapter05/02-UsingLinkedLists.js delete mode 100644 chapter05/03-Doubly-Linked-List.js delete mode 100644 chapter05/04-UsingDoublyLinkedLists.html delete mode 100644 chapter05/04-UsingDoublyLinkedLists.js delete mode 100644 chapter05/05-CircularLinkedList.js delete mode 100644 chapter05/06-UsingCircularLinkedList.html delete mode 100644 chapter05/06-UsingCircularLinkedList.js delete mode 100644 chapter06/01-Set.js delete mode 100644 chapter06/02-UsingSets.html delete mode 100644 chapter06/02-UsingSets.js delete mode 100644 chapter06/03-Operations.html delete mode 100644 chapter06/03-Operations.js delete mode 100644 chapter07/01-Dictionaries.js delete mode 100644 chapter07/02-UsingDictionaries.html delete mode 100644 chapter07/02-UsingDictionaries.js delete mode 100644 chapter07/03-HashTable.js delete mode 100644 chapter07/04-UsingHash.html delete mode 100644 chapter07/04-UsingHash.js delete mode 100644 chapter07/05-HashCollisionSeparateChaining.js delete mode 100644 chapter07/06-UsingHashCollisionSeparateChaining.html delete mode 100644 chapter07/06-UsingHashCollisionSeparateChaining.js delete mode 100644 chapter07/07-HashCollisionLinearProbing.js delete mode 100644 chapter07/08-UsingHashCollisionLinearProbing.html delete mode 100644 chapter07/08-UsingHashCollisionLinearProbing.js delete mode 100644 chapter08/01-BinarySearchTree.js delete mode 100644 chapter08/02-UsingBinarySearchTree.html delete mode 100644 chapter08/02-UsingBinarySearchTree.js delete mode 100644 chapter08/03-AVLTree.js delete mode 100644 chapter08/04-UsingAVLTree.html delete mode 100644 chapter08/04-UsingAVLTree.js delete mode 100644 chapter09/01-Graph.js delete mode 100644 chapter09/02-UsingGraphs.html delete mode 100644 chapter09/02-UsingGraphs.js delete mode 100755 chapter10/01-SortingSearchingAlgorithms.js delete mode 100755 chapter10/02-UsingSortingAlgorithms.html delete mode 100755 chapter10/02-UsingSortingAlgorithms.js delete mode 100755 chapter10/03-UsingSearchingAlgorithms.html delete mode 100755 chapter10/03-UsingSearchingAlgorithms.js delete mode 100644 chapter11/01-Recursion.html delete mode 100644 chapter11/01-Recursion.js delete mode 100644 chapter11/02-InfiniteRecursion.html delete mode 100644 chapter11/02-InfiniteRecursion.js delete mode 100644 chapter11/03-MinCoinChangeDP.html delete mode 100644 chapter11/03-MinCoinChangeDP.js delete mode 100644 chapter11/04-MinCoinChangeGreedy.html delete mode 100644 chapter11/04-MinCoinChangeGreedy.js delete mode 100644 chapter11/05-BigONotation.html delete mode 100644 chapter11/05-BigONotation.js delete mode 100644 chapter11/bigOChart/chart.js delete mode 100644 chapter11/bigOChart/index.html diff --git a/README.md b/README.md deleted file mode 100644 index 9712708a..00000000 --- a/README.md +++ /dev/null @@ -1,28 +0,0 @@ -Learning JavaScript Data Structures and Algorithms -==================================== - -Source code of **Learning JavaScript Data Structures and Algorithms** book. - -Book link: - - [Packt](https://www.packtpub.com/application-development/learning-javascript-data-structures-and-algorithms) - - [Amazon](http://www.amazon.com/gp/product/1783554878/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1783554878&linkCode=as2&tag=loiagron-20&linkId=7VBQ7OMJ47XY7MUV) - - -###List of Chapters: - -* 1: JAVASCRIPT – A QUICK OVERVIEW -* 2: ARRAYS -* 3: STACKS -* 4: QUEUES -* 5: LINKED LISTS -* 6: SETS -* 7: DICTIONARIES AND HASHES -* 8: TREES -* 9: GRAPHS -* 10: SORTING AND SEARCHING ALGORITHMS -* 11: More about Algorithms (Recursion, Dynamic Programing, Greedy Algorithms and Big-O Notation) - Extra chapter that can be donwloaded from [Packt](https://www.packtpub.com/application-development/learning-javascript-data-structures-and-algorithms) website -* Apendix A: Big-O Cheat Sheet - Extra chapter that can be donwloaded from [Packt](https://www.packtpub.com/application-development/learning-javascript-data-structures-and-algorithms) website - -###Found an issue or have a question? - -Please create an [Issue](https://github.com/loiane/javascript-datastructures-algorithms/issues) or [Pull Request](https://github.com/loiane/javascript-datastructures-algorithms/pulls) diff --git a/chapter01/01-HelloWorld.html b/chapter01/01-HelloWorld.html deleted file mode 100644 index f7eca1bf..00000000 --- a/chapter01/01-HelloWorld.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter01/01-HelloWorld.js b/chapter01/01-HelloWorld.js deleted file mode 100644 index 89833849..00000000 --- a/chapter01/01-HelloWorld.js +++ /dev/null @@ -1,8 +0,0 @@ -function output(t) { - document.write('

' + t + '

'); - return; -} - -alert('Hello, World!'); -console.log('Hello, World!'); -output('Hello, World!'); \ No newline at end of file diff --git a/chapter01/02-Variables.html b/chapter01/02-Variables.html deleted file mode 100644 index f093a684..00000000 --- a/chapter01/02-Variables.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter01/02-Variables.js b/chapter01/02-Variables.js deleted file mode 100644 index e75cf459..00000000 --- a/chapter01/02-Variables.js +++ /dev/null @@ -1,37 +0,0 @@ -var num = 1; //{1} -num = 3; //{2} - -var price = 1.5; //{3} -var name = 'Packt'; //{4} -var trueValue = true; //{5} -var nullVar = null; //{6} -var und; //7 - -console.log("num: "+ num); -console.log("name: "+ name); -console.log("trueValue: "+ trueValue); -console.log("price: "+ price); -console.log("nullVar: "+ nullVar); -console.log("und: "+ und); - -//******* Variable Scope - -var myVariable = 'global'; -myOtherVariable = 'global'; - -function myFunction(){ - var myVariable = 'local'; - return myVariable; -} - -function myOtherFunction(){ - myOtherVariable = 'local'; - return myOtherVariable; -} - -console.log(myVariable); //{1} -console.log(myFunction()); //{2} - -console.log(myOtherVariable); //{3} -console.log(myOtherFunction()); //{4} -console.log(myOtherVariable); //{5} diff --git a/chapter01/03-Operators.html b/chapter01/03-Operators.html deleted file mode 100644 index 2502aa78..00000000 --- a/chapter01/03-Operators.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter01/03-Operators.js b/chapter01/03-Operators.js deleted file mode 100644 index d1044b92..00000000 --- a/chapter01/03-Operators.js +++ /dev/null @@ -1,68 +0,0 @@ -/* Arithmetic operators */ -var num = 0; - -console.log('num value is ' + num); - -num = num + 2; - -console.log('New num value is ' + num); - -num = num * 3; - -console.log('New num value is ' + num); - -num = num / 2; - -console.log('New num value is ' + num); - -num++; - -num--; - -console.log('New num value is ' + num); - -console.log('num mod 2 value is ' + (num % 2)); - - -/* Assignment operators */ -num += 1; -num -= 2; -num *= 3; -num /= 2; -num %= 3; - -console.log('New num value is ' + num); - -/* Assignment operators */ -console.log('num == 1 : ' + (num == 1)); -console.log('num === 1 : ' + (num === 1)); -console.log('num != 1 : ' + (num != 1)); -console.log('num > 1 : ' + (num > 1)); -console.log('num < 1 : ' + (num < 1)); -console.log('num >= 1 : ' + (num >= 1)); -console.log('num <= 1 : ' + (num <= 1)); - -/* Logical operators */ -console.log('true && false : ' + (true && false)); -console.log('true || false : ' + (true || false)); -console.log('!true : ' + (!true)); - -/* Bitwise operators */ -console.log('5 & 1:', (5 & 1)); //same as 0101 & 0001 (result 0001 / 1) -console.log('5 | 1:', (5 | 1)); //same as 0101 | 0001 (result 0101 / 5) -console.log('~ 5:', (~5)); //same as ~0101 (result 1010 / 10) -console.log('5 ^ 1:', (5 ^ 1)); //same as 0101 ^ 0001 (result 0100 / 4) -console.log('5 << 1:', (5 << 1)); //same as 0101 << 1 (result 1010 / 10) -console.log('5 >> 1:', (5 >> 1)); //same as 0101 >> 1 (result 0010 / 2) - -/* typeOf */ -console.log('typeof num:', typeof num); -console.log('typeof Packt:', typeof 'Packt'); -console.log('typeof true:', typeof true); -console.log('typeof [1,2,3]:', typeof [1,2,3]); -console.log('typeof {name:John}:', typeof {name:'John'}); - -/* delete */ -var myObj = {name: 'John', age: 21}; -delete myObj.age; -console.log(myObj); //Object {name: "John"} \ No newline at end of file diff --git a/chapter01/04-TruthyFalsy.html b/chapter01/04-TruthyFalsy.html deleted file mode 100644 index 9b20f161..00000000 --- a/chapter01/04-TruthyFalsy.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter01/04-TruthyFalsy.js b/chapter01/04-TruthyFalsy.js deleted file mode 100644 index d700cd2c..00000000 --- a/chapter01/04-TruthyFalsy.js +++ /dev/null @@ -1,23 +0,0 @@ -function testTruthy(val){ - return val ? console.log('truthy') : console.log('falsy'); -} - -testTruthy(true); //true -testTruthy(false); //false -testTruthy(new Boolean(false)); //true (object is always true) - -testTruthy(''); //false -testTruthy('Packt'); //true -testTruthy(new String('')); //true (object is always true) - -testTruthy(1); //true -testTruthy(-1); //true -testTruthy(NaN); //false -testTruthy(new Number(NaN)); //true (object is always true) - -testTruthy({}); //true (object is always true) - -var obj = {name:'John'}; -testTruthy(obj); //true -testTruthy(obj.name); //true -testTruthy(obj.age); //age (prop does not exist) \ No newline at end of file diff --git a/chapter01/05-EqualsOperators.html b/chapter01/05-EqualsOperators.html deleted file mode 100644 index bf26fbf3..00000000 --- a/chapter01/05-EqualsOperators.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter01/05-EqualsOperators.js b/chapter01/05-EqualsOperators.js deleted file mode 100644 index 253c21b9..00000000 --- a/chapter01/05-EqualsOperators.js +++ /dev/null @@ -1,36 +0,0 @@ -//Packt == true - -console.log('packt' ? true : false); -//outputs true - -console.log('packt' == true); -//1 - converts Boolean using toNumber -//'packt' == 1 -//2 - converts String using toNumber -//NaN == 1 -//outputs false - -console.log('packt' == false); -//1 - converts Boolean using toNumber -//'packt' == 0 -//2 - converts String using toNumber -//NaN == 0 -//outputs false - -console.log([0] == true); -//1 - converts Boolean using toNumber -//[0] == 1 -//2 - converts Object using toPrimitive -//2.1 - [0].valueOf() is not primitive -//2.2 - [0].toString is 0 -//0 == 1 -//outputs false - -//******************************* === -console.log('packt' === true); //false - -console.log('packt' === 'packt'); //true - -var person1 = {name:'John'}; -var person2 = {name:'John'}; -console.log(person1 === person2); //false, different objects \ No newline at end of file diff --git a/chapter01/06-ConditionalStatements.html b/chapter01/06-ConditionalStatements.html deleted file mode 100644 index 885a409b..00000000 --- a/chapter01/06-ConditionalStatements.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter01/06-ConditionalStatements.js b/chapter01/06-ConditionalStatements.js deleted file mode 100644 index c7256c80..00000000 --- a/chapter01/06-ConditionalStatements.js +++ /dev/null @@ -1,51 +0,0 @@ -/* Example 01 - if */ -var num = 1; -if (num === 1) { - console.log("num is equal to 1"); -} - -/* Example 02 - if-else */ -var num = 0; -if (num === 1) { - console.log("num is equal to 1"); -} else { - console.log("num is not equal to 1, the value of num is " + num); -} - -/* Example 03 - if-else-if-else... */ -var month = 5; -if (month === 1) { - console.log("January"); -} else if (month === 2){ - console.log("February"); -} else if (month === 3){ - console.log("March"); -} else { - console.log("Month is not January, February or March"); -} - -/* Example 04 - switch */ -var month = 5; -switch(month) { - case 1: - console.log("January"); - break; - case 2: - console.log("February"); - break; - case 3: - console.log("March"); - break; - default: - console.log("Month is not January, February or March"); -} - -/* Example 05 - ternary operator - if..else */ -if (num === 1){ - num--; -} else { - num++; -} - -//is the same as -(num === 1) ? num-- : num++; \ No newline at end of file diff --git a/chapter01/07-Loops.html b/chapter01/07-Loops.html deleted file mode 100644 index e87a478f..00000000 --- a/chapter01/07-Loops.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter01/07-Loops.js b/chapter01/07-Loops.js deleted file mode 100644 index 61cf20cb..00000000 --- a/chapter01/07-Loops.js +++ /dev/null @@ -1,23 +0,0 @@ -console.log('**** for example ****'); - -/* for - example */ -for (var i=0; i<10; i++) { - console.log(i); -} - -console.log('**** while example ****'); -/* while - example */ -var i = 0; -while(i<10) -{ - console.log(i); - i++; -} - -console.log('**** do-while example ****'); -/* do-while - example */ -var i = 0; -do { - console.log(i); - i++; -} while (i<10) \ No newline at end of file diff --git a/chapter01/08-Functions.html b/chapter01/08-Functions.html deleted file mode 100644 index cde89bcf..00000000 --- a/chapter01/08-Functions.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter01/08-Functions.js b/chapter01/08-Functions.js deleted file mode 100644 index c307c6d0..00000000 --- a/chapter01/08-Functions.js +++ /dev/null @@ -1,28 +0,0 @@ -function sayHello() { - console.log('Hello!'); -} - -sayHello(); - -/* function with parameter */ -function output(text) { - console.log(text); -} - -output('Hello!'); - -output('Hello!', 'Other text'); - -output(); - -/* function using the return statement */ -function sum(num1, num2) { - return num1 + num2; -} - -var result = sum(1,2); -output(result); - - - - diff --git a/chapter01/09-ObjectOrientedJS.html b/chapter01/09-ObjectOrientedJS.html deleted file mode 100644 index 9fef9dab..00000000 --- a/chapter01/09-ObjectOrientedJS.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter01/09-ObjectOrientedJS.js b/chapter01/09-ObjectOrientedJS.js deleted file mode 100644 index c67a6c78..00000000 --- a/chapter01/09-ObjectOrientedJS.js +++ /dev/null @@ -1,42 +0,0 @@ -/* Object example 1 */ - -var obj = new Object(); - -/* Object example 2 */ - -var obj = {}; - -obj = { - name: { - first: 'Gandalf', - last: 'the Grey' - }, - address: 'Middle Earth' -}; - -/* Object example 3 */ - -function Book(title, pages, isbn){ - this.title = title; - this.pages = pages; - this.isbn = isbn; - this.printIsbn = function(){ - console.log(this.isbn); - } -} - -var book = new Book('title', 'pag', 'isbn'); - -console.log(book.title); //outputs the book title - -book.title = 'new title'; //update the value of the book title - -console.log(book.title); //outputs the updated value - -Book.prototype.printTitle = function(){ - console.log(this.title); -}; - -book.printTitle(); - -book.printIsbn(); \ No newline at end of file diff --git a/chapter02/01-Introduction.html b/chapter02/01-Introduction.html deleted file mode 100644 index 86731b13..00000000 --- a/chapter02/01-Introduction.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter02/01-Introduction.js b/chapter02/01-Introduction.js deleted file mode 100644 index 93d80a8d..00000000 --- a/chapter02/01-Introduction.js +++ /dev/null @@ -1,12 +0,0 @@ -var averageTempJan = 31.9; -var averageTempFeb = 35.3; -var averageTempMar = 42.4; -var averageTempApr = 52; -var averageTempMay = 60.8; - -var averageTemp = []; -averageTemp[0] = 31.9; -averageTemp[1] = 35.3; -averageTemp[2] = 42.4; -averageTemp[3] = 52; -averageTemp[4] = 60.8; diff --git a/chapter02/02-CreatingAndInitialingArrays.html b/chapter02/02-CreatingAndInitialingArrays.html deleted file mode 100644 index 7a51f1c9..00000000 --- a/chapter02/02-CreatingAndInitialingArrays.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter02/02-CreatingAndInitialingArrays.js b/chapter02/02-CreatingAndInitialingArrays.js deleted file mode 100644 index 1b20431e..00000000 --- a/chapter02/02-CreatingAndInitialingArrays.js +++ /dev/null @@ -1,34 +0,0 @@ -var daysOfWeek = []; - -var daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; - -var daysOfWeek = new Array(); //{1} - -var daysOfWeek = new Array(7); //{2} - -console.log(daysOfWeek.length); - -var daysOfWeek = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); //{3} - -for (var i=0; i - - - - - - - - - \ No newline at end of file diff --git a/chapter02/03-AddingRemovingElements.js b/chapter02/03-AddingRemovingElements.js deleted file mode 100644 index d19aa555..00000000 --- a/chapter02/03-AddingRemovingElements.js +++ /dev/null @@ -1,73 +0,0 @@ -function printArray(myArray) { - for (var i=0; i=0; i--){ - numbers[i] = numbers[i-1]; -} - -numbers[0] = -1; - -//printArray(numbers); - -//using method unshift -numbers.unshift(-2); - -//printArray(numbers); - -numbers.unshift(-4, -3); - -//printArray(numbers); - -//**** Removing elements - -numbers.pop(); - -//remove first position manually -/*for (var i=0; i - - - - - - - - - \ No newline at end of file diff --git a/chapter02/04-TwoDimensionalMultiDimensional.js b/chapter02/04-TwoDimensionalMultiDimensional.js deleted file mode 100644 index 7830e4d1..00000000 --- a/chapter02/04-TwoDimensionalMultiDimensional.js +++ /dev/null @@ -1,62 +0,0 @@ -var averageTempDay1 = [72,75,79,79,81,81]; -var averageTempDay2 = [81,79,75,75,73,72]; - -var averageTemp = []; - -//same as -averageTemp[0] = [72,75,79,79,81,81]; -averageTemp[1] = [81,79,75,75,73,72]; - -function printMatrix(myMatrix) { - for (var i=0; i - - - - - - - - - \ No newline at end of file diff --git a/chapter02/05-ArrayMethods.js b/chapter02/05-ArrayMethods.js deleted file mode 100644 index 7b59b8c0..00000000 --- a/chapter02/05-ArrayMethods.js +++ /dev/null @@ -1,113 +0,0 @@ -//*** contact -var zero = 0; -var positiveNumbers = [1,2,3]; -var negativeNumbers = [-3,-2,-1]; -var numbers = negativeNumbers.concat(zero, positiveNumbers); - -console.log(numbers); - -//console.log(numbers); - -//*** every and some -var isEven = function (x) { - // returns true if x is a multiple of 2. - console.log(x); - return (x % 2 == 0) ? true : false; -}; -var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; - -numbers.every(isEven); //is going to execute the function only once - -console.log('---'); - -numbers.some(isEven); //is going to execute the function twice - -numbers.forEach(function(x){ - console.log((x % 2 == 0)); -}); - -console.log(numbers.reverse()); - -//console.log('*** filter ***'); - -var evenNumbers = numbers.filter(isEven); - -//console.log(evenNumbers); - -console.log('*** map ***'); - -//console.log(numbers.map(isEven)); - -console.log(numbers.reduce(function(previous, current, index){ - return previous + current; -})); - -console.log(numbers.sort()); - -console.log(numbers.sort(function(a,b){ - return a-b; -})); - -function compare(a, b) { - if (a < b) { - return -1; - } - if (a > b) { - return 1; - } - // a must be equal to b - return 0; -} - -console.log(numbers.sort(compare)); - -//Sorting objects - -var friends = [ - {name: 'John', age: 30}, - {name: 'Ana', age: 20}, - {name: 'Chris', age: 25} -]; - -function comparePerson(a, b){ - if (a.age < b.age){ - return -1 - } - if (a.age > b.age){ - return 1 - } - return 0; -} - -console.log(friends.sort(comparePerson)); - -var names =['Ana', 'ana', 'john', 'John']; -console.log(names.sort()); - -console.log(names.sort(function(a, b){ - if (a.toLowerCase() < b.toLowerCase()){ - return -1 - } - if (a.toLowerCase() > b.toLowerCase()){ - return 1 - } - return 0; -})); - -var names2 = ['Maève', 'Maeve']; -console.log(names2.sort(function(a, b){ - return a.localeCompare(b); -})); - -//*** toString -console.log(numbers.toString()); - -console.log(numbers.indexOf(10)); -console.log(numbers.indexOf(100)); - -numbers.push(10); -console.log(numbers.lastIndexOf(10)); -console.log(numbers.lastIndexOf(100)); - -var numbersString = numbers.join('-'); -console.log(numbersString); \ No newline at end of file diff --git a/chapter03/01-Stack.html b/chapter03/01-Stack.html deleted file mode 100644 index e936b4e1..00000000 --- a/chapter03/01-Stack.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter03/01-Stack.js b/chapter03/01-Stack.js deleted file mode 100644 index 0cb3960a..00000000 --- a/chapter03/01-Stack.js +++ /dev/null @@ -1,36 +0,0 @@ -function Stack() { - - var items = []; - - this.push = function(element){ - items.push(element); - }; - - this.pop = function(){ - return items.pop(); - }; - - this.peek = function(){ - return items[items.length-1]; - }; - - this.isEmpty = function(){ - return items.length == 0; - }; - - this.size = function(){ - return items.length; - }; - - this.clear = function(){ - items = []; - }; - - this.print = function(){ - console.log(items.toString()); - }; - - this.toString = function(){ - return items.toString(); - }; -} \ No newline at end of file diff --git a/chapter03/02-UsingStacks.html b/chapter03/02-UsingStacks.html deleted file mode 100644 index 1772e441..00000000 --- a/chapter03/02-UsingStacks.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter03/02-UsingStacks.js b/chapter03/02-UsingStacks.js deleted file mode 100644 index 8e5f5b19..00000000 --- a/chapter03/02-UsingStacks.js +++ /dev/null @@ -1,13 +0,0 @@ -var stack = new Stack(); - console.log(stack.isEmpty()); //outputs true - stack.push(5); - stack.push(8); - console.log(stack.peek()); // outputs 8 - stack.push(11); - console.log(stack.size()); // outputs 3 - console.log(stack.isEmpty()); //outputs false - stack.push(15); - stack.pop(); - stack.pop(); - console.log(stack.size()); // outputs 2 - stack.print(); // outputs [5, 8] \ No newline at end of file diff --git a/chapter03/03-BalancedSymbols.html b/chapter03/03-BalancedSymbols.html deleted file mode 100644 index d347fe2e..00000000 --- a/chapter03/03-BalancedSymbols.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter03/03-BalancedSymbols.js b/chapter03/03-BalancedSymbols.js deleted file mode 100644 index 6a49ee6b..00000000 --- a/chapter03/03-BalancedSymbols.js +++ /dev/null @@ -1,37 +0,0 @@ -function matches(open, close){ - var opens = "([{", - closers = ")]}"; - return opens.indexOf(open) == closers.indexOf(close); -} - -function parenthesesChecker(symbols){ - - var stack = new Stack(), - balanced = true, - index = 0, - symbol, top; - - while (index < symbols.length && balanced){ - symbol = symbols.charAt(index); - if (symbol == '('|| symbol == '[' || symbol == '{'){ - stack.push(symbol); - } else { - if (stack.isEmpty()){ - balanced = false; - } else { - top = stack.pop(); - if (!matches(top, symbol)){ - balanced = false; - } - } - } - index++; - } - if (balanced && stack.isEmpty()){ - return true; - } - return false; -} - -console.log(parenthesesChecker('{{([][])}()}')); -console.log(parenthesesChecker('[{()]')); \ No newline at end of file diff --git a/chapter03/04-DecimalToBinary.html b/chapter03/04-DecimalToBinary.html deleted file mode 100644 index a178b773..00000000 --- a/chapter03/04-DecimalToBinary.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter03/04-DecimalToBinary.js b/chapter03/04-DecimalToBinary.js deleted file mode 100644 index d4695b51..00000000 --- a/chapter03/04-DecimalToBinary.js +++ /dev/null @@ -1,52 +0,0 @@ -//233 == 11101001 -//2x(10x10) + 3x(10) + 3x(1) - -function divideBy2(decNumber){ - - var remStack = new Stack(), - rem, - binaryString = ''; - - while (decNumber > 0){ - rem = Math.floor(decNumber % 2); - remStack.push(rem); - decNumber = Math.floor(decNumber / 2); - } - - while (!remStack.isEmpty()){ - binaryString += remStack.pop().toString(); - } - - return binaryString; -} - -console.log(divideBy2(233)); -console.log(divideBy2(10)); -console.log(divideBy2(1000)); - -/* - The folow algorithm converts from base 10 to any base - */ -function baseConverter(decNumber, base){ - - var remStack = new Stack(), - rem, - baseString = '', - digits = '0123456789ABCDEF'; - - while (decNumber > 0){ - rem = Math.floor(decNumber % base); - remStack.push(rem); - decNumber = Math.floor(decNumber / base); - } - - while (!remStack.isEmpty()){ - baseString += digits[remStack.pop()]; - } - - return baseString; -} - -console.log(baseConverter(100345, 2)); -console.log(baseConverter(100345, 8)); -console.log(baseConverter(100345, 16)); \ No newline at end of file diff --git a/chapter03/05-TowerOfHanoi.html b/chapter03/05-TowerOfHanoi.html deleted file mode 100644 index 8e11f147..00000000 --- a/chapter03/05-TowerOfHanoi.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter03/05-TowerOfHanoi.js b/chapter03/05-TowerOfHanoi.js deleted file mode 100644 index 255e02fb..00000000 --- a/chapter03/05-TowerOfHanoi.js +++ /dev/null @@ -1,26 +0,0 @@ -function towerOfHanoi(n, from, to, helper){ - - if (n > 0){ - towerOfHanoi(n-1, from, helper, to); - to.push(from.pop()); - console.log('-----') - console.log('Source: ' + from.toString()); - console.log('Dest: ' + to.toString()); - console.log('Helper: ' + helper.toString()); - towerOfHanoi(n-1, helper, to, from); - } -} - -var source = new Stack(); -source.push(3); -source.push(2); -source.push(1); - -var dest = new Stack(); -var helper = new Stack(); - -towerOfHanoi(3, source, dest, helper); - -source.print(); -helper.print(); -dest.print(); \ No newline at end of file diff --git a/chapter04/01-Queue.html b/chapter04/01-Queue.html deleted file mode 100644 index 4220c419..00000000 --- a/chapter04/01-Queue.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter04/01-Queue.js b/chapter04/01-Queue.js deleted file mode 100644 index 8656893a..00000000 --- a/chapter04/01-Queue.js +++ /dev/null @@ -1,32 +0,0 @@ -function Queue() { - - var items = []; - - this.enqueue = function(element){ - items.push(element); - }; - - this.dequeue = function(){ - return items.shift(); - }; - - this.front = function(){ - return items[0]; - }; - - this.isEmpty = function(){ - return items.length == 0; - }; - - this.clear = function(){ - items = []; - }; - - this.size = function(){ - return items.length; - }; - - this.print = function(){ - console.log(items.toString()); - }; -} diff --git a/chapter04/02-UsingQueues.html b/chapter04/02-UsingQueues.html deleted file mode 100644 index c39e78b4..00000000 --- a/chapter04/02-UsingQueues.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter04/02-UsingQueues.js b/chapter04/02-UsingQueues.js deleted file mode 100644 index fcef6c91..00000000 --- a/chapter04/02-UsingQueues.js +++ /dev/null @@ -1,12 +0,0 @@ -var queue = new Queue(); -console.log(queue.isEmpty()); //outputs true -queue.enqueue("John"); -queue.enqueue("Jack"); -queue.print(); -queue.enqueue("Camila"); -queue.print(); -console.log(queue.size()); //outputs 3 -console.log(queue.isEmpty()); //outputs false -queue.dequeue(); -queue.dequeue(); -queue.print(); \ No newline at end of file diff --git a/chapter04/03-PriorityQueue.html b/chapter04/03-PriorityQueue.html deleted file mode 100644 index 924bf7c4..00000000 --- a/chapter04/03-PriorityQueue.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter04/03-PriorityQueue.js b/chapter04/03-PriorityQueue.js deleted file mode 100644 index 5b6442bb..00000000 --- a/chapter04/03-PriorityQueue.js +++ /dev/null @@ -1,60 +0,0 @@ -function PriorityQueue() { - - var items = []; - - function QueueElement (element, priority){ - this.element = element; - this.priority = priority; - } - - this.enqueue = function(element, priority){ - var queueElement = new QueueElement(element, priority); - - if (this.isEmpty()){ - items.push(queueElement); - } else { - var added = false; - for (var i=0; i - - - - - - - - - - \ No newline at end of file diff --git a/chapter04/04-HotPotato.js b/chapter04/04-HotPotato.js deleted file mode 100644 index 83554a1c..00000000 --- a/chapter04/04-HotPotato.js +++ /dev/null @@ -1,23 +0,0 @@ -function hotPotato (nameList, num){ - - var queue = new Queue(); - - for (var i=0; i 1){ - for (var i=0; i= 0 && position <= length){ - - var node = new Node(element), - current = head, - previous, - index = 0; - - if (position === 0){ //add on first position - - node.next = current; - head = node; - - } else { - while (index++ < position){ - previous = current; - current = current.next; - } - node.next = current; - previous.next = node; - } - - length++; //update size of list - - return true; - - } else { - return false; - } - }; - - this.removeAt = function(position){ - - //check for out-of-bounds values - if (position > -1 && position < length){ - - var current = head, - previous, - index = 0; - - //removing first item - if (position === 0){ - head = current.next; - } else { - - while (index++ < position){ - - previous = current; - current = current.next; - } - - //link previous with current's next - skip it to remove - previous.next = current.next; - } - - length--; - - return current.element; - - } else { - return null; - } - }; - - this.remove = function(element){ - - var index = this.indexOf(element); - return this.removeAt(index); - }; - - this.indexOf = function(element){ - - var current = head, - index = 0; - - while (current) { - if (element === current.element) { - return index; - } - index++; - current = current.next; - } - - return -1; - }; - - this.isEmpty = function() { - return length === 0; - }; - - this.size = function() { - return length; - }; - - this.getHead = function(){ - return head; - }; - - this.toString = function(){ - - var current = head, - string = ''; - - while (current) { - string += current.element + (current.next ? '\n' : ''); - current = current.next; - } - return string; - - }; - - this.print = function(){ - console.log(this.toString()); - }; -} diff --git a/chapter05/02-UsingLinkedLists.html b/chapter05/02-UsingLinkedLists.html deleted file mode 100644 index da977b75..00000000 --- a/chapter05/02-UsingLinkedLists.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter05/02-UsingLinkedLists.js b/chapter05/02-UsingLinkedLists.js deleted file mode 100644 index 9c92c483..00000000 --- a/chapter05/02-UsingLinkedLists.js +++ /dev/null @@ -1,32 +0,0 @@ -var list = new LinkedList(); -list.append(15); -list.print(); -console.log(list.indexOf(15)); -list.append(10); -list.print(); -console.log(list.indexOf(10)); -list.append(13); -list.print(); -console.log(list.indexOf(13)); -console.log(list.indexOf(10)); -list.append(11); -list.append(12); -list.print(); -console.log(list.removeAt(1)); -list.print() -console.log(list.removeAt(3)); -list.print(); -list.append(14); -list.print(); -list.insert(0,16); -list.print(); -list.insert(1,17); -list.print(); -list.insert(list.size(),18); -list.print(); -list.remove(16); -list.print(); -list.remove(11); -list.print(); -list.remove(18); -list.print(); \ No newline at end of file diff --git a/chapter05/03-Doubly-Linked-List.js b/chapter05/03-Doubly-Linked-List.js deleted file mode 100644 index 1ca53298..00000000 --- a/chapter05/03-Doubly-Linked-List.js +++ /dev/null @@ -1,217 +0,0 @@ -function DoublyLinkedList() { - - var Node = function(element){ - - this.element = element; - this.next = null; - this.prev = null; //NEW - }; - - var length = 0; - var head = null; - var tail = null; //NEW - - this.append = function(element){ - - var node = new Node(element), - current; - - if (head === null){ //first node on list - head = node; - tail = node; //NEW - } else { - - //attach to the tail node //NEW - tail.next = node; - node.prev = tail; - tail = node; - } - - length++; //update size of list - }; - - this.insert = function(position, element){ - - //check for out-of-bounds values - if (position >= 0 && position <= length){ - - var node = new Node(element), - current = head, - previous, - index = 0; - - if (position === 0){ //add on first position - - if (!head){ //NEW - head = node; - tail = node; - } else { - node.next = current; - current.prev = node; //NEW {1} - head = node; - } - - } else if (position === length) { //last item //NEW - - current = tail; // {2} - current.next = node; - node.prev = current; - tail = node; - - } else { - while (index++ < position){ //{3} - previous = current; - current = current.next; - } - node.next = current; - previous.next = node; - - current.prev = node; //NEW - node.prev = previous; //NEW - } - - length++; //update size of list - - return true; - - } else { - return false; - } - }; - - this.removeAt = function(position){ - - //check for out-of-bounds values - if (position > -1 && position < length){ - - var current = head, - previous, - index = 0; - - //removing first item - if (position === 0){ - - head = current.next; // {1} - - //if there is only one item, then we update tail as well //NEW - if (length === 1){ // {2} - tail = null; - } else { - head.prev = null; // {3} - } - - } else if (position === length-1){ //last item //NEW - - current = tail; // {4} - tail = current.prev; - tail.next = null; - - } else { - - while (index++ < position){ // {5} - - previous = current; - current = current.next; - } - - //link previous with current's next - skip it to remove - previous.next = current.next; // {6} - current.next.prev = previous; //NEW - } - - length--; - - return current.element; - - } else { - return null; - } - }; - - this.remove = function(element){ - - var index = this.indexOf(element); - return this.removeAt(index); - }; - - this.indexOf = function(element){ - - var current = head, - index = -1; - - //check first item - if (element == current.element){ - return 0; - } - - index++; - - //check in the middle of the list - while(current.next){ - - if (element == current.element){ - return index; - } - - current = current.next; - index++; - } - - //check last item - if (element == current.element){ - return index; - } - - return -1; - }; - - this.isEmpty = function() { - return length === 0; - }; - - this. size = function() { - return length; - }; - - this.toString = function(){ - - var current = head, - s = current ? current.element : ''; - - while(current && current.next){ - current = current.next; - s += ', ' + current.element; - } - - return s; - }; - - this.inverseToString = function() { - - var current = tail, - s = current ? current.element : ''; - - while(current && current.prev){ - current = current.prev; - s += ', ' + current.element; - } - - return s; - }; - - this.print = function(){ - console.log(this.toString()); - }; - - this.printInverse = function(){ - console.log(this.inverseToString()); - }; - - this.getHead = function(){ - return head; - }; - - this.getTail = function(){ - return tail; - } -} \ No newline at end of file diff --git a/chapter05/04-UsingDoublyLinkedLists.html b/chapter05/04-UsingDoublyLinkedLists.html deleted file mode 100644 index d4b60521..00000000 --- a/chapter05/04-UsingDoublyLinkedLists.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter05/04-UsingDoublyLinkedLists.js b/chapter05/04-UsingDoublyLinkedLists.js deleted file mode 100644 index 00534d49..00000000 --- a/chapter05/04-UsingDoublyLinkedLists.js +++ /dev/null @@ -1,49 +0,0 @@ -var list = new DoublyLinkedList(); - -list.append(15); -list.print(); -list.printInverse(); - -list.append(16); -list.print(); -list.printInverse(); - -list.append(17); -list.print(); -list.printInverse(); - -list.insert(0,13); -list.print(); -list.printInverse(); - -list.insert(4,18); -list.print(); -list.printInverse(); - -list.insert(1,14); -list.print(); -list.printInverse(); - -list.removeAt(0); -list.print(); -list.printInverse(); - -list.removeAt(list.size()-1); -list.print(); -list.printInverse(); - -list.removeAt(1); -list.print(); -list.printInverse(); - -list.remove(16); -list.print(); -list.printInverse(); - -list.remove(14); -list.print(); -list.printInverse(); - -list.remove(17); -list.print(); -list.printInverse(); \ No newline at end of file diff --git a/chapter05/05-CircularLinkedList.js b/chapter05/05-CircularLinkedList.js deleted file mode 100644 index 590c08f4..00000000 --- a/chapter05/05-CircularLinkedList.js +++ /dev/null @@ -1,187 +0,0 @@ -function CircularLinkedList() { - - var Node = function(element){ - - this.element = element; - this.next = null; - }; - - var length = 0; - var head = null; - - this.append = function(element){ - - var node = new Node(element), - current; - - if (head === null){ //first node on list - head = node; - } else { - - current = head; - - //loop the list until find last item - while(current.next !== head){ //last element will be head instead of NULL - current = current.next; - } - - //get last item and assign next to added item to make the link - current.next = node; - } - - //set node.next to head - to have circular list - node.next = head; - - length++; //update size of list - }; - - this.insert = function(position, element){ - - //check for out-of-bounds values - if (position >= 0 && position <= length){ - - var node = new Node(element), - current = head, - previous, - index = 0; - - if (position === 0){ //add on first position - - node.next = current; - - //update last element - while(current.next !== head){ //last element will be head instead of NULL - current = current.next; - } - - head = node; - current.next = head; - - } else { - while (index++ < position){ - previous = current; - current = current.next; - } - node.next = current; - previous.next = node; - - if (node.next === null){ //update in case last element - node.next = head; - } - } - - length++; //update size of list - - return true; - - } else { - return false; - } - }; - - this.removeAt = function(position){ - - //check for out-of-bounds values - if (position > -1 && position < length){ - - var current = head, - previous, - index = 0; - - //removing first item - if (position === 0){ - - while(current.next !== head){ //needs to update last element first - current = current.next; - } - - head = head.next; - current.next = head; - - } else { //no need to update last element for circular list - - while (index++ < position){ - - previous = current; - current = current.next; - } - - //link previous with current's next - skip it to remove - previous.next = current.next; - } - - length--; - - return current.element; - - } else { - return null; - } - }; - - this.remove = function(element){ - - var index = this.indexOf(element); - return this.removeAt(index); - }; - - this.indexOf = function(element){ - - var current = head, - index = -1; - - //check first item - if (element == current.element){ - return 0; - } - - index++; - - //check in the middle of the list - while(current.next !== head){ - - if (element == current.element){ - return index; - } - - current = current.next; - index++; - } - - //check last item - if (element == current.element){ - return index; - } - - return -1; - }; - - this.isEmpty = function() { - return length === 0; - }; - - this.size = function() { - return length; - }; - - this.getHead = function(){ - return head; - }; - - this.toString = function(){ - - var current = head, - s = current.element; - - while(current.next !== head){ - current = current.next; - s += ', ' + current.element; - } - - return s.toString(); - }; - - this.print = function(){ - console.log(this.toString()); - }; -} \ No newline at end of file diff --git a/chapter05/06-UsingCircularLinkedList.html b/chapter05/06-UsingCircularLinkedList.html deleted file mode 100644 index 5a2fbb5d..00000000 --- a/chapter05/06-UsingCircularLinkedList.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter05/06-UsingCircularLinkedList.js b/chapter05/06-UsingCircularLinkedList.js deleted file mode 100644 index 33d9f8c9..00000000 --- a/chapter05/06-UsingCircularLinkedList.js +++ /dev/null @@ -1,28 +0,0 @@ -var circularLinkedList = new CircularLinkedList(); - -circularLinkedList.append(15); -circularLinkedList.print(); - -circularLinkedList.append(16); -circularLinkedList.print(); - -circularLinkedList.insert(0,14); -circularLinkedList.print(); - -circularLinkedList.insert(1,14.5); -circularLinkedList.print(); - -circularLinkedList.insert(4,17); -circularLinkedList.print(); - -circularLinkedList.removeAt(0); -circularLinkedList.print(); - -circularLinkedList.removeAt(1); -circularLinkedList.print(); - -circularLinkedList.removeAt(2); -circularLinkedList.print(); - -console.log(circularLinkedList.indexOf(14.5)); -console.log(circularLinkedList.indexOf(16)); \ No newline at end of file diff --git a/chapter06/01-Set.js b/chapter06/01-Set.js deleted file mode 100644 index aff644a1..00000000 --- a/chapter06/01-Set.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * ECMSCRIPT 6 already have a Set class implementation: - * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set - * We will try to copy the same functionalities - * @constructor - */ -function Set() { - - var items = {}; - - this.add = function(value){ - if (!this.has(value)){ - items[value] = value; - return true; - } - return false; - }; - - this.remove = function(value){ - if (this.has(value)){ - delete items[value]; - return true; - } - return false; - }; - - this.has = function(value){ - return items.hasOwnProperty(value); - //return value in items; - }; - - this.clear = function(){ - items = {}; - }; - - /** - * Modern browsers function - * IE9+, FF4+, Chrome5+, Opera12+, Safari5+ - * @returns {Number} - */ - this.size = function(){ - return Object.keys(items).length; - }; - - /** - * cross browser compatibility - legacy browsers - * for modern browsers use size function - * @returns {number} - */ - this.sizeLegacy = function(){ - var count = 0; - for(var prop in items) { - if(items.hasOwnProperty(prop)) - ++count; - } - return count; - }; - - /** - * Modern browsers function - * IE9+, FF4+, Chrome5+, Opera12+, Safari5+ - * @returns {Array} - */ - this.values = function(){ - return Object.keys(items); - }; - - this.valuesLegacy = function(){ - var keys = []; - for(var key in items){ - keys.push(key); - } - return keys; - }; - - this.getItems = function(){ - return items; - }; - - this.union = function(otherSet){ - var unionSet = new Set(); //{1} - - var values = this.values(); //{2} - for (var i=0; i otherSet.size()){ //{1} - return false; - } else { - var values = this.values(); - for (var i=0; i - - - - - - - - - - \ No newline at end of file diff --git a/chapter06/02-UsingSets.js b/chapter06/02-UsingSets.js deleted file mode 100644 index 2eb0a487..00000000 --- a/chapter06/02-UsingSets.js +++ /dev/null @@ -1,18 +0,0 @@ -var set = new Set(); - -set.add(1); -console.log(set.values()); //outputs ["1"] -console.log(set.has(1)); //outputs true -console.log(set.size()); //outputs 1 - -set.add(2); -console.log(set.values()); //outputs ["1", "2"] -console.log(set.has(2)); //true -console.log(set.size()); //2 -console.log(set.sizeLegacy()); //3 - -set.remove(1); -console.log(set.values()); //outputs ["2"] - -set.remove(2); -console.log(set.values()); //outputs [] \ No newline at end of file diff --git a/chapter06/03-Operations.html b/chapter06/03-Operations.html deleted file mode 100644 index ff01c7ae..00000000 --- a/chapter06/03-Operations.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter06/03-Operations.js b/chapter06/03-Operations.js deleted file mode 100644 index fc866c0c..00000000 --- a/chapter06/03-Operations.js +++ /dev/null @@ -1,65 +0,0 @@ -//--------- Union ---------- - -var setA = new Set(); -setA.add(1); -setA.add(2); -setA.add(3); - -var setB = new Set(); -setB.add(3); -setB.add(4); -setB.add(5); -setB.add(6); - -var unionAB = setA.union(setB); -console.log(unionAB.values()); - - -//--------- Intersection ---------- - -var setA = new Set(); -setA.add(1); -setA.add(2); -setA.add(3); - -var setB = new Set(); -setB.add(2); -setB.add(3); -setB.add(4); - -var intersectionAB = setA.intersection(setB); -console.log(intersectionAB.values()); - -//--------- Difference ---------- - -var setA = new Set(); -setA.add(1); -setA.add(2); -setA.add(3); - -var setB = new Set(); -setB.add(2); -setB.add(3); -setB.add(4); - -var differenceAB = setA.difference(setB); -console.log(differenceAB.values()); - -//--------- Subset ---------- - -var setA = new Set(); -setA.add(1); -setA.add(2); - -var setB = new Set(); -setB.add(1); -setB.add(2); -setB.add(3); - -var setC = new Set(); -setC.add(2); -setC.add(3); -setC.add(4); - -console.log(setA.subset(setB)); -console.log(setA.subset(setC)); diff --git a/chapter07/01-Dictionaries.js b/chapter07/01-Dictionaries.js deleted file mode 100644 index ea26cd05..00000000 --- a/chapter07/01-Dictionaries.js +++ /dev/null @@ -1,59 +0,0 @@ -function Dictionary(){ - - var items = {}; - - this.set = function(key, value){ - items[key] = value; //{1} - }; - - this.remove = function(key){ - if (this.has(key)){ - delete items[key]; - return true; - } - return false; - }; - - this.has = function(key){ - return items.hasOwnProperty(key); - //return value in items; - }; - - this.get = function(key) { - return this.has(key) ? items[key] : undefined; - }; - - this.clear = function(){ - items = {}; - }; - - this.size = function(){ - return Object.keys(items).length; - }; - - this.keys = function(){ - return Object.keys(items); - }; - - this.values = function(){ - var values = []; - for (var k in items) { - if (this.has(k)) { - values.push(items[k]); - } - } - return values; - }; - - this.each = function(fn) { - for (var k in items) { - if (this.has(k)) { - fn(k, items[k]); - } - } - }; - - this.getItems = function(){ - return items; - } -} \ No newline at end of file diff --git a/chapter07/02-UsingDictionaries.html b/chapter07/02-UsingDictionaries.html deleted file mode 100644 index f0f8e0eb..00000000 --- a/chapter07/02-UsingDictionaries.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter07/02-UsingDictionaries.js b/chapter07/02-UsingDictionaries.js deleted file mode 100644 index 3fc4db6f..00000000 --- a/chapter07/02-UsingDictionaries.js +++ /dev/null @@ -1,19 +0,0 @@ -var dictionary = new Dictionary(); - -dictionary.set('Gandalf', 'gandalf@email.com'); -dictionary.set('John', 'johnsnow@email.com'); -dictionary.set('Tyrion', 'tyrion@email.com'); - -console.log(dictionary.has('Gandalf')); //outputs true -console.log(dictionary.size()); //outputs 3 - -console.log(dictionary.keys()); //outputs ["Gandalf", "John", "Tyrion"] -console.log(dictionary.values()); //outputs ["gandalf@email.com", "johnsnow@email.com", "tyrion@email.com"] -console.log(dictionary.get('Tyrion')); //outputs tyrion@email.com - -dictionary.remove('John'); - -console.log(dictionary.keys()); //outputs ["Gandalf", "Tyrion"] -console.log(dictionary.values()); //outputs ["gandalf@email.com", "tyrion@email.com"] - -console.log(dictionary.getItems()); //Object {Gandalf: "gandalf@email.com", Tyrion: "tyrion@email.com"} \ No newline at end of file diff --git a/chapter07/03-HashTable.js b/chapter07/03-HashTable.js deleted file mode 100644 index c72783aa..00000000 --- a/chapter07/03-HashTable.js +++ /dev/null @@ -1,46 +0,0 @@ -function HashTable() { - - var table = []; - - var loseloseHashCode = function (key) { - var hash = 0; - for (var i = 0; i < key.length; i++) { - hash += key.charCodeAt(i); - } - return hash % 37; - }; - - var djb2HashCode = function (key) { - var hash = 5381; - for (var i = 0; i < key.length; i++) { - hash = hash * 33 + key.charCodeAt(i); - } - return hash % 1013; - }; - - var hashCode = function (key) { - return loseloseHashCode(key); - }; - - this.put = function (key, value) { - var position = hashCode(key); - console.log(position + ' - ' + key); - table[position] = value; - }; - - this.get = function (key) { - return table[hashCode(key)]; - }; - - this.remove = function(key){ - table[hashCode(key)] = undefined; - }; - - this.print = function () { - for (var i = 0; i < table.length; ++i) { - if (table[i] !== undefined) { - console.log(i + ": " + table[i]); - } - } - }; -} \ No newline at end of file diff --git a/chapter07/04-UsingHash.html b/chapter07/04-UsingHash.html deleted file mode 100644 index 104be603..00000000 --- a/chapter07/04-UsingHash.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter07/04-UsingHash.js b/chapter07/04-UsingHash.js deleted file mode 100644 index d0735eeb..00000000 --- a/chapter07/04-UsingHash.js +++ /dev/null @@ -1,29 +0,0 @@ -var hash = new HashTable(); - -hash.put('Gandalf', 'gandalf@email.com'); -hash.put('John', 'johnsnow@email.com'); -hash.put('Tyrion', 'tyrion@email.com'); -hash.put('Aaron', 'aaron@email.com'); -hash.put('Donnie', 'donnie@email.com'); -hash.put('Ana', 'ana@email.com'); -hash.put('Jonathan', 'jonathan@email.com'); -hash.put('Jamie', 'jamie@email.com'); -hash.put('Sue', 'sue@email.com'); -hash.put('Mindy', 'mindy@email.com'); -hash.put('Paul', 'paul@email.com'); -hash.put('Nathan', 'nathan@email.com'); - -console.log('**** Printing Hash **** '); - -hash.print(); - -console.log('**** Get **** '); - -console.log(hash.get('Gandalf')); -console.log(hash.get('Loiane')); - -console.log('**** Remove **** '); - -hash.remove('Gandalf'); -console.log(hash.get('Gandalf')); -hash.print(); \ No newline at end of file diff --git a/chapter07/05-HashCollisionSeparateChaining.js b/chapter07/05-HashCollisionSeparateChaining.js deleted file mode 100644 index f32833cf..00000000 --- a/chapter07/05-HashCollisionSeparateChaining.js +++ /dev/null @@ -1,99 +0,0 @@ -function HashTableSeparateChaining(){ - - var table = []; - - var ValuePair = function(key, value){ - this.key = key; - this.value = value; - - this.toString = function() { - return '[' + this.key + ' - ' + this.value + ']'; - } - }; - - var loseloseHashCode = function (key) { - var hash = 0; - for (var i = 0; i < key.length; i++) { - hash += key.charCodeAt(i); - } - return hash % 37; - }; - - var hashCode = function(key){ - return loseloseHashCode(key); - }; - - this.put = function(key, value){ - var position = hashCode(key); - console.log(position + ' - ' + key); - - if (table[position] == undefined) { - table[position] = new LinkedList(); - } - table[position].append(new ValuePair(key, value)); - }; - - this.get = function(key) { - var position = hashCode(key); - - if (table[position] !== undefined && !table[position].isEmpty()){ - - //iterate linked list to find key/value - var current = table[position].getHead(); - - while(current.next){ - if (current.element.key === key){ - return current.element.value; - } - current = current.next; - } - - //check in case first or last element - if (current.element.key === key){ - return current.element.value; - } - } - return undefined; - }; - - this.remove = function(key){ - - var position = hashCode(key); - - if (table[position] !== undefined){ - - //iterate linked list to find key/value - var current = table[position].getHead(); - - while(current.next){ - if (current.element.key === key){ - table[position].remove(current.element); - if (table[position].isEmpty()){ - table[position] = undefined; - } - return true; - } - current = current.next; - } - - //check in case first or last element - if (current.element.key === key){ - table[position].remove(current.element); - if (table[position].isEmpty()){ - table[position] = undefined; - } - return true; - } - } - - return false; - }; - - this.print = function() { - for (var i = 0; i < table.length; ++i) { - if (table[i] !== undefined) { - console.log(table[i].toString()); - } - } - }; -} \ No newline at end of file diff --git a/chapter07/06-UsingHashCollisionSeparateChaining.html b/chapter07/06-UsingHashCollisionSeparateChaining.html deleted file mode 100644 index e1741527..00000000 --- a/chapter07/06-UsingHashCollisionSeparateChaining.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/chapter07/06-UsingHashCollisionSeparateChaining.js b/chapter07/06-UsingHashCollisionSeparateChaining.js deleted file mode 100644 index 2a0d3c37..00000000 --- a/chapter07/06-UsingHashCollisionSeparateChaining.js +++ /dev/null @@ -1,40 +0,0 @@ -var hashTableSeparateChaining = new HashTableSeparateChaining(); - -hashTableSeparateChaining.put('Gandalf', 'gandalf@email.com'); -hashTableSeparateChaining.put('John', 'johnsnow@email.com'); -hashTableSeparateChaining.put('Tyrion', 'tyrion@email.com'); -hashTableSeparateChaining.put('Aaron', 'aaron@email.com'); -hashTableSeparateChaining.put('Donnie', 'donnie@email.com'); -hashTableSeparateChaining.put('Ana', 'ana@email.com'); -hashTableSeparateChaining.put('Jonathan', 'jonathan@email.com'); -hashTableSeparateChaining.put('Jamie', 'jamie@email.com'); -hashTableSeparateChaining.put('Sue', 'sue@email.com'); -hashTableSeparateChaining.put('Mindy', 'mindy@email.com'); -hashTableSeparateChaining.put('Paul', 'paul@email.com'); -hashTableSeparateChaining.put('Nathan', 'nathan@email.com'); - -console.log('**** Printing Hash **** '); - -hashTableSeparateChaining.print(); - -console.log('**** Get **** '); - -console.log(hashTableSeparateChaining.get('Jamie')); -console.log(hashTableSeparateChaining.get('Sue')); -console.log(hashTableSeparateChaining.get('Jonathan')); -console.log(hashTableSeparateChaining.get('Loiane')); - -console.log('**** Remove **** '); - -console.log(hashTableSeparateChaining.remove('Gandalf')); -console.log(hashTableSeparateChaining.get('Gandalf')); -hashTableSeparateChaining.print(); - -console.log(hashTableSeparateChaining.remove('Sue')); -hashTableSeparateChaining.print(); - -console.log(hashTableSeparateChaining.remove('Jamie')); -hashTableSeparateChaining.print(); - -console.log(hashTableSeparateChaining.remove('Donnie')); -hashTableSeparateChaining.print(); \ No newline at end of file diff --git a/chapter07/07-HashCollisionLinearProbing.js b/chapter07/07-HashCollisionLinearProbing.js deleted file mode 100644 index 74fdbac5..00000000 --- a/chapter07/07-HashCollisionLinearProbing.js +++ /dev/null @@ -1,85 +0,0 @@ -function HashLinearProbing(){ - - var table = []; - - var ValuePair = function(key, value){ - this.key = key; - this.value = value; - - this.toString = function() { - return '[' + this.key + ' - ' + this.value + ']'; - } - }; - - var loseloseHashCode = function (key) { - var hash = 0; - for (var i = 0; i < key.length; i++) { - hash += key.charCodeAt(i); - } - return hash % 37; - }; - - var hashCode = function(key){ - return loseloseHashCode(key); - }; - - this.put = function(key, value){ - var position = hashCode(key); - console.log(position + ' - ' + key); - - if (table[position] == undefined) { - table[position] = new ValuePair(key, value); - } else { - var index = ++position; - while (table[index] != undefined){ - index++; - } - table[index] = new ValuePair(key, value); - } - }; - - this.get = function(key) { - var position = hashCode(key); - - if (table[position] !== undefined){ - if (table[position].key === key) { - return table[position].value; - } else { - var index = ++position; - while (table[index] === undefined || table[index].key !== key){ - index++; - } - if (table[index].key === key) { - return table[index].value; - } - } - } - return undefined; - }; - - this.remove = function(key){ - var position = hashCode(key); - - if (table[position] !== undefined){ - if (table[position].key === key) { - table[position] = undefined; - } else { - var index = ++position; - while (table[index] === undefined || table[index].key !== key){ - index++; - } - if (table[index].key === key) { - table[index] = undefined; - } - } - } - }; - - this.print = function() { - for (var i = 0; i < table.length; ++i) { - if (table[i] !== undefined) { - console.log(i + ' -> ' + table[i].toString()); - } - } - }; -} \ No newline at end of file diff --git a/chapter07/08-UsingHashCollisionLinearProbing.html b/chapter07/08-UsingHashCollisionLinearProbing.html deleted file mode 100644 index f5fd9ad5..00000000 --- a/chapter07/08-UsingHashCollisionLinearProbing.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter07/08-UsingHashCollisionLinearProbing.js b/chapter07/08-UsingHashCollisionLinearProbing.js deleted file mode 100644 index 902384ee..00000000 --- a/chapter07/08-UsingHashCollisionLinearProbing.js +++ /dev/null @@ -1,29 +0,0 @@ -var hashLinearProbing = new HashLinearProbing(); - -hashLinearProbing.put('Gandalf', 'gandalf@email.com'); -hashLinearProbing.put('John', 'johnsnow@email.com'); -hashLinearProbing.put('Tyrion', 'tyrion@email.com'); -hashLinearProbing.put('Aaron', 'aaron@email.com'); -hashLinearProbing.put('Donnie', 'donnie@email.com'); -hashLinearProbing.put('Ana', 'ana@email.com'); -hashLinearProbing.put('Jonathan', 'jonathan@email.com'); -hashLinearProbing.put('Jamie', 'jamie@email.com'); -hashLinearProbing.put('Sue', 'sue@email.com'); -hashLinearProbing.put('Mindy', 'mindy@email.com'); -hashLinearProbing.put('Paul', 'paul@email.com'); -hashLinearProbing.put('Nathan', 'nathan@email.com'); - -console.log('**** Printing Hash **** '); - -hashLinearProbing.print(); - -console.log('**** Get **** '); - -console.log(hashLinearProbing.get('Nathan')); -console.log(hashLinearProbing.get('Loiane')); - -console.log('**** Remove **** '); - -hashLinearProbing.remove('Gandalf'); -console.log(hashLinearProbing.get('Gandalf')); -hashLinearProbing.print(); \ No newline at end of file diff --git a/chapter08/01-BinarySearchTree.js b/chapter08/01-BinarySearchTree.js deleted file mode 100644 index ae813fce..00000000 --- a/chapter08/01-BinarySearchTree.js +++ /dev/null @@ -1,187 +0,0 @@ -function BinarySearchTree() { - - var Node = function(key){ - this.key = key; - this.left = null; - this.right = null; - }; - - var root = null; - - this.insert = function(key){ - - var newNode = new Node(key); - - //special case - first element - if (root === null){ - root = newNode; - } else { - insertNode(root,newNode); - } - }; - - var insertNode = function(node, newNode){ - if (newNode.key < node.key){ - if (node.left === null){ - node.left = newNode; - } else { - insertNode(node.left, newNode); - } - } else { - if (node.right === null){ - node.right = newNode; - } else { - insertNode(node.right, newNode); - } - } - }; - - this.getRoot = function(){ - return root; - }; - - this.search = function(key){ - - return searchNode(root, key); - }; - - var searchNode = function(node, key){ - - if (node === null){ - return false; - } - - if (key < node.key){ - return searchNode(node.left, key); - - } else if (key > node.key){ - return searchNode(node.right, key); - - } else { //element is equal to node.item - return true; - } - }; - - this.inOrderTraverse = function(callback){ - inOrderTraverseNode(root, callback); - }; - - var inOrderTraverseNode = function (node, callback) { - if (node !== null) { - inOrderTraverseNode(node.left, callback); - callback(node.key); - inOrderTraverseNode(node.right, callback); - } - }; - - this.preOrderTraverse = function(callback){ - preOrderTraverseNode(root, callback); - }; - - var preOrderTraverseNode = function (node, callback) { - if (node !== null) { - callback(node.key); - preOrderTraverseNode(node.left, callback); - preOrderTraverseNode(node.right, callback); - } - }; - - this.postOrderTraverse = function(callback){ - postOrderTraverseNode(root, callback); - }; - - var postOrderTraverseNode = function (node, callback) { - if (node !== null) { - postOrderTraverseNode(node.left, callback); - postOrderTraverseNode(node.right, callback); - callback(node.key); - } - }; - - this.min = function() { - return minNode(root); - }; - - var minNode = function (node) { - if (node){ - while (node && node.left !== null) { - node = node.left; - } - - return node.key; - } - return null; - }; - - this.max = function() { - return maxNode(root); - }; - - var maxNode = function (node) { - if (node){ - while (node && node.right !== null) { - node = node.right; - } - - return node.key; - } - return null; - }; - - this.remove = function(element){ - root = removeNode(root, element); - }; - - var findMinNode = function(node){ - while (node && node.left !== null) { - node = node.left; - } - - return node; - }; - - var removeNode = function(node, element){ - - if (node === null){ - return null; - } - - if (element < node.key){ - node.left = removeNode(node.left, element); - return node; - - } else if (element > node.key){ - node.right = removeNode(node.right, element); - return node; - - } else { //element is equal to node.item - - //handle 3 special conditions - //1 - a leaf node - //2 - a node with only 1 child - //3 - a node with 2 children - - //case 1 - if (node.left === null && node.right === null){ - node = null; - return node; - } - - //case 2 - if (node.left === null){ - node = node.right; - return node; - - } else if (node.right === null){ - node = node.left; - return node; - } - - //case 3 - var aux = findMinNode(node.right); - node.key = aux.key; - node.right = removeNode(node.right, aux.key); - return node; - } - }; -} \ No newline at end of file diff --git a/chapter08/02-UsingBinarySearchTree.html b/chapter08/02-UsingBinarySearchTree.html deleted file mode 100644 index ed25a2c4..00000000 --- a/chapter08/02-UsingBinarySearchTree.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter08/02-UsingBinarySearchTree.js b/chapter08/02-UsingBinarySearchTree.js deleted file mode 100644 index 3caef17c..00000000 --- a/chapter08/02-UsingBinarySearchTree.js +++ /dev/null @@ -1,52 +0,0 @@ -var tree = new BinarySearchTree(); - -tree.insert(11); -tree.insert(7); -tree.insert(15); -tree.insert(5); -tree.insert(3); -tree.insert(9); -tree.insert(8); -tree.insert(10); -tree.insert(13); -tree.insert(12); -tree.insert(14); -tree.insert(20); -tree.insert(18); -tree.insert(25); -tree.insert(6); - -console.log('********* in-order transverse ***********'); -function printNode(value){ - console.log(value); -} -tree.inOrderTraverse(printNode); - -console.log('********* pre-order transverse ***********'); -tree.preOrderTraverse(printNode); - -console.log('********* post-order transverse ***********'); -tree.postOrderTraverse(printNode); - - -console.log('********* max and min ***********'); -console.log(tree.max()); -console.log(tree.min()); -console.log(tree.search(1) ? 'Key 1 found.' : 'Key 1 not found.'); -console.log(tree.search(8) ? 'Key 8 found.' : 'Key 8 not found.'); - - -console.log('********* remove 6 ***********'); -tree.remove(6); -tree.inOrderTraverse(printNode); - -console.log('********* remove 5 ***********'); -tree.remove(5); -tree.inOrderTraverse(printNode); - -console.log('********* remove 15 ***********'); -tree.remove(15); -tree.inOrderTraverse(printNode); - -console.log('********* raw data structure ***********'); -console.log(tree.getRoot()); \ No newline at end of file diff --git a/chapter08/03-AVLTree.js b/chapter08/03-AVLTree.js deleted file mode 100644 index 277a22b6..00000000 --- a/chapter08/03-AVLTree.js +++ /dev/null @@ -1,149 +0,0 @@ -function AVLTree() { - - var Node = function(key){ - this.key = key; - this.left = null; - this.right = null; - }; - - var root = null; - - this.getRoot = function(){ - return root; - }; - - var heightNode = function(node) { - if (node === null) { - return -1; - } else { - return Math.max(heightNode(node.left), heightNode(node.right)) + 1; - } - }; - - var rotationLL = function(node) { - var tmp = node.left; - node.left = tmp.right; - tmp.right = node; - - return tmp; - }; - - var rotationRR = function(node) { - var tmp = node.right; - node.right = tmp.left; - tmp.left = node; - - return tmp; - }; - - var rotationLR = function(node) { - node.left = rotationRR(node.left); - return rotationLL(node); - }; - - var rotationRL = function(node) { - node.right = rotationLL(node.right); - return rotationRR(node); - }; - - var insertNode = function(node, element) { - - if (node === null) { - node = new Node(element); - - } else if (element < node.key) { - - node.left = insertNode(node.left, element); - - if (node.left !== null) { - - if ((heightNode(node.left) - heightNode(node.right)) > 1){ - if (element < node.left.key){ - node = rotationLL(node); - } else { - node = rotationLR(node); - } - } - } - } else if (element > node.key) { - - node.right = insertNode(node.right, element); - - if (node.right !== null) { - - if ((heightNode(node.right) - heightNode(node.left)) > 1){ - - if (element > node.right.key){ - node = rotationRR(node); - } else { - node = rotationRL(node); - } - } - } - } - - return node; - }; - - this.insert = function(element) { - root = insertNode(root, element); - }; - - var parentNode; - var nodeToBeDeleted; - - var removeNode = function(node, element) { - if (node === null) { - return null; - } - parentNode = node; - - if (element < node.key) { - node.left = removeNode(node.left, element); - } else { - nodeToBeDeleted = node; - node.right = removeNode(node.right, element); - } - - if (node === parentNode) { //remove node - if (nodeToBeDeleted !== null && element === nodeToBeDeleted.key) { - if (nodeToBeDeleted === parentNode) { - node = node.left; - } else { - var tmp = nodeToBeDeleted.key; - nodeToBeDeleted.key = parentNode.key; - parentNode.key = tmp; - node = node.right; - } - } - } else { //do balancing - - if (node.left === undefined) node.left = null; - if (node.right === undefined) node.right = null; - - if ((heightNode(node.left) - heightNode(node.right)) === 2) { - if (element < node.left.key) { - node = rotationLR(node); - } else { - node = rotationLL(node); - } - } - - if ((heightNode(node.right) - heightNode(node.left)) === 2) { - if (element > node.right.key) { - node = rotationRL(node); - } else { - node = rotationRR(node); - } - } - } - - return node; - }; - - this.remove = function(element) { - parentNode = null; - nodeToBeDeleted = null; - root = removeNode(root, element); - }; -} diff --git a/chapter08/04-UsingAVLTree.html b/chapter08/04-UsingAVLTree.html deleted file mode 100644 index f7ce18b0..00000000 --- a/chapter08/04-UsingAVLTree.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter08/04-UsingAVLTree.js b/chapter08/04-UsingAVLTree.js deleted file mode 100644 index 1f70c66c..00000000 --- a/chapter08/04-UsingAVLTree.js +++ /dev/null @@ -1,61 +0,0 @@ -var avlTree = new AVLTree(); - -avlTree.insert(1); -avlTree.insert(2); -avlTree.insert(3); -avlTree.insert(4); -avlTree.insert(5); -avlTree.insert(6); -avlTree.insert(7); -avlTree.insert(14); -avlTree.insert(15); -avlTree.insert(13); -avlTree.insert(12); -avlTree.insert(11); - -//RR rotation -/*avlTree.insert(50); -avlTree.insert(30); -avlTree.insert(70); -avlTree.insert(60); -avlTree.insert(80); -avlTree.insert(90);*/ - -//LL rotation -/*avlTree.insert(50); -avlTree.insert(30); -avlTree.insert(70); -avlTree.insert(10); -avlTree.insert(40); -avlTree.insert(5);*/ - -//LR rotation -/*avlTree.insert(50); -avlTree.insert(30); -avlTree.insert(70); -avlTree.insert(40); -avlTree.insert(10); -avlTree.insert(35);*/ - -//RL rotation -/*avlTree.insert(70); -avlTree.insert(50); -avlTree.insert(80); -avlTree.insert(72); -avlTree.insert(90); -avlTree.insert(75);*/ - -console.log('********* raw data structure ***********'); -console.log(avlTree.getRoot()); - -/*avlTree.remove(12); -avlTree.remove(15); -avlTree.remove(11); -avlTree.remove(14); -avlTree.remove(13); -avlTree.remove(7); -avlTree.remove(6); -avlTree.remove(2); -avlTree.remove(4); - -console.log(avlTree.getRoot());*/ diff --git a/chapter09/01-Graph.js b/chapter09/01-Graph.js deleted file mode 100644 index ce4bd3ff..00000000 --- a/chapter09/01-Graph.js +++ /dev/null @@ -1,172 +0,0 @@ -function Graph() { - - var vertices = []; //list - - var adjList = new Dictionary(); - - this.addVertex = function(v){ - vertices.push(v); - adjList.set(v, []); //initialize adjacency list with array as well; - }; - - this.addEdge = function(v, w){ - adjList.get(v).push(w); - //adjList.get(w).push(v); //commented to run the improved DFS with topological sorting - }; - - this.toString = function(){ - var s = ''; - for (var i=0; i '; - var neighbors = adjList.get(vertices[i]); - for (var j=0; j - - - - - - - - - - - - - \ No newline at end of file diff --git a/chapter09/02-UsingGraphs.js b/chapter09/02-UsingGraphs.js deleted file mode 100644 index 3f143525..00000000 --- a/chapter09/02-UsingGraphs.js +++ /dev/null @@ -1,97 +0,0 @@ -var graph = new Graph(); - -var myVertices = ['A','B','C','D','E','F','G','H','I']; - -for (var i=0; i max){ - max = fTimes[myVertices[i]]; - maxName = myVertices[i]; - } - } - s += ' - ' + maxName; - delete fTimes[maxName]; -} -console.log(s); diff --git a/chapter10/01-SortingSearchingAlgorithms.js b/chapter10/01-SortingSearchingAlgorithms.js deleted file mode 100755 index b4081024..00000000 --- a/chapter10/01-SortingSearchingAlgorithms.js +++ /dev/null @@ -1,251 +0,0 @@ -function ArrayList(){ - - var array = []; - - this.insert = function(item){ - array.push(item); - }; - - var swap = function(index1, index2){ - var aux = array[index1]; - array[index1] = array[index2]; - array[index2] = aux; - }; - - this.toString= function(){ - return array.join(); - }; - - this.bubbleSort = function(){ - var length = array.length; - - for (var i=0; i array[j+1]){ - console.log('swap ' + array[j] + ' with ' + array[j+1]); - swap(j, j+1); - } - } - } - }; - - this.modifiedBubbleSort = function(){ - var length = array.length; - - for (var i=0; i array[j+1]){ - console.log('swap ' + array[j] + ' with ' + array[j+1]); - swap(j, j+1); - } - } - } - - }; - - this.selectionSort = function(){ - var length = array.length, - indexMin; - - for (var i=0; iarray[j]){ - console.log('new index min ' + array[j]); - indexMin = j; - } - } - if (i !== indexMin){ - console.log('swap ' + array[i] + ' with ' + array[indexMin]); - swap(i, indexMin); - } - } - }; - - this.insertionSort = function(){ - var length = array.length, - j, temp; - for (var i=1; i0 && array[j-1] > temp){ - console.log('shift ' + array[j-1]); - array[j] = array[j-1]; - j--; - } - console.log('insert ' + temp); - array[j] = temp; - } - }; - - this.mergeSort = function(){ - array = mergeSortRec(array); - }; - - var mergeSortRec = function(array){ - - var length = array.length; - - if(length === 1) { - console.log(array); - return array; - } - - var mid = Math.floor(length / 2), - left = array.slice(0, mid), - right = array.slice(mid, length); - - return merge(mergeSortRec(left), mergeSortRec(right)); - }; - - var merge = function(left, right){ - var result = [], - il = 0, - ir = 0; - - while(il < left.length && ir < right.length) { - - if(left[il] < right[ir]) { - result.push(left[il++]); - } else{ - result.push(right[ir++]); - } - } - - while (il < left.length){ - result.push(left[il++]); - } - - while (ir < right.length){ - result.push(right[ir++]); - } - - console.log(result); - - return result; - }; - - this.quickSort = function(){ - quick(array, 0, array.length - 1); - }; - - var partition = function(array, left, right) { - - var pivot = array[Math.floor((right + left) / 2)], - i = left, - j = right; - - console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right); - - while (i <= j) { - while (array[i] < pivot) { - i++; - console.log('i = ' + i); - } - - while (array[j] > pivot) { - j--; - console.log('j = ' + j); - } - - if (i <= j) { - console.log('swap ' + array[i] + ' with ' + array[j]); - swapQuickStort(array, i, j); - i++; - j--; - } - } - - return i; - }; - - var swapQuickStort = function(array, index1, index2){ - var aux = array[index1]; - array[index1] = array[index2]; - array[index2] = aux; - }; - - var quick = function(array, left, right){ - - var index; - - if (array.length > 1) { - - index = partition(array, left, right); - - if (left < index - 1) { - quick(array, left, index - 1); - } - - if (index < right) { - quick(array, index, right); - } - } - return array; - }; - - this.sequentialSearch = function(item){ - - for (var i=0; i array[i]){ - min = array[i]; - } - } - - return min; - }; - - this.binarySearch = function(item){ - this.quickSort(); - - var low = 0, - high = array.length - 1, - mid, element; - - while (low <= high){ - mid = Math.floor((low + high) / 2); - element = array[mid]; - console.log('mid element is ' + element); - if (element < item) { - low = mid + 1; - console.log('low is ' + low); - } else if (element > item) { - high = mid - 1; - console.log('high is ' + high); - } else { - console.log('found it'); - return mid; - } - } - return -1; - }; - -} \ No newline at end of file diff --git a/chapter10/02-UsingSortingAlgorithms.html b/chapter10/02-UsingSortingAlgorithms.html deleted file mode 100755 index 7a666fdb..00000000 --- a/chapter10/02-UsingSortingAlgorithms.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter10/02-UsingSortingAlgorithms.js b/chapter10/02-UsingSortingAlgorithms.js deleted file mode 100755 index e09c3e33..00000000 --- a/chapter10/02-UsingSortingAlgorithms.js +++ /dev/null @@ -1,90 +0,0 @@ -function createNonSortedArray(size){ - var array = new ArrayList(); - - for (var i = size; i> 0; i--){ - array.insert(i); - } - - return array; -} - -function createRandomNonSortedArray(){ - var array = new ArrayList(); - - array.insert(3); - array.insert(5); - array.insert(1); - array.insert(4); - array.insert(2); - - return array; -} - -console.log('********** Bubble Sort **********'); - -var array = createNonSortedArray(5); - -console.log(array.toString()); - -array.bubbleSort(); - -console.log(array.toString()); - -console.log('********** Modified Bubble Sort **********'); - -array = createNonSortedArray(5); - -console.log(array.toString()); - -array.modifiedBubbleSort(); - -console.log(array.toString()); - -console.log('********** Selection Sort **********'); - -array = createNonSortedArray(5); - -console.log(array.toString()); - -array.selectionSort(); - -console.log(array.toString()); - -console.log('********** Insertion Sort **********'); - -array = createRandomNonSortedArray(); - -console.log(array.toString()); - -array.insertionSort(); - -console.log(array.toString()); - -console.log('********** Merge Sort **********'); - -array = createNonSortedArray(8); - -console.log(array.toString()); - -array.mergeSort(); - -console.log(array.toString()); - -console.log('********** Quick Sort **********'); -array = new ArrayList(); - -array.insert(3); -array.insert(5); -array.insert(1); -array.insert(6); -array.insert(4); -array.insert(7); -array.insert(2); - -console.log(array.toString()); - -array.quickSort(); - -console.log(array.toString()); - - diff --git a/chapter10/03-UsingSearchingAlgorithms.html b/chapter10/03-UsingSearchingAlgorithms.html deleted file mode 100755 index a4e4b6a3..00000000 --- a/chapter10/03-UsingSearchingAlgorithms.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter10/03-UsingSearchingAlgorithms.js b/chapter10/03-UsingSearchingAlgorithms.js deleted file mode 100755 index 62201e80..00000000 --- a/chapter10/03-UsingSearchingAlgorithms.js +++ /dev/null @@ -1,33 +0,0 @@ -function createNonSortedArray(items){ - var array = new ArrayList(); - - for (var i = items; i> 0; i--){ - array.insert(i); - } - - return array; -} - -var array = createNonSortedArray(5); - -console.log('********** Sequential Sort #3 **********'); - -console.log(array.sequentialSearch(3)); - -console.log('********** Min **********'); - -console.log(array.findMinValue()); - -console.log('********** Max **********'); - -console.log(array.findMaxValue()); - -console.log('********** Binary Search #3 **********'); - -console.log(array.binarySearch(3)); - -console.log('********** Binary Search #2 **********'); - -var array = createNonSortedArray(8); - -console.log(array.binarySearch(2)); \ No newline at end of file diff --git a/chapter11/01-Recursion.html b/chapter11/01-Recursion.html deleted file mode 100644 index 5961583b..00000000 --- a/chapter11/01-Recursion.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter11/01-Recursion.js b/chapter11/01-Recursion.js deleted file mode 100644 index bd16253d..00000000 --- a/chapter11/01-Recursion.js +++ /dev/null @@ -1,25 +0,0 @@ -//Recursive solution - DP -function fibonacci(num){ - if (num === 1 || num === 2){ - return 1; - } - if (num > 2){ - return fibonacci(num - 1) + fibonacci(num - 2); - } -} - -//Non Recursive solution -function fib(num){ - var n1 = 1, - n2 = 1, - n = 1; - for (var i = 3; i<=num; i++){ - n = n1 + n2; - n1 = n2; - n2 = n; - } - return n; -} - -console.log(fibonacci(6)); -console.log(fib(6)); \ No newline at end of file diff --git a/chapter11/02-InfiniteRecursion.html b/chapter11/02-InfiniteRecursion.html deleted file mode 100644 index e51a8132..00000000 --- a/chapter11/02-InfiniteRecursion.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter11/02-InfiniteRecursion.js b/chapter11/02-InfiniteRecursion.js deleted file mode 100644 index 2ca26d33..00000000 --- a/chapter11/02-InfiniteRecursion.js +++ /dev/null @@ -1,15 +0,0 @@ -var i = 0; - -function recursiveFn () { - i++; - recursiveFn(); -} - -try { - recursiveFn(); -} catch (ex) { - alert('i = ' + i + ' error: ' + ex); -} - -//chrome 37 = 20955 RangeError: Maximum call stack size exceeded -//ff 27 = 343429 InternalError: too much recursion \ No newline at end of file diff --git a/chapter11/03-MinCoinChangeDP.html b/chapter11/03-MinCoinChangeDP.html deleted file mode 100644 index c4171470..00000000 --- a/chapter11/03-MinCoinChangeDP.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter11/03-MinCoinChangeDP.js b/chapter11/03-MinCoinChangeDP.js deleted file mode 100644 index 75d0bfd2..00000000 --- a/chapter11/03-MinCoinChangeDP.js +++ /dev/null @@ -1,40 +0,0 @@ -function MinCoinChange(coins){ - - var coins = coins; - - var cache = {}; - - this.makeChange = function(amount) { - var me = this; - if (!amount) { - return []; - } - if (cache[amount]) { - return cache[amount]; - } - var min = [], newMin, newAmount; - for (var i=0; i= 0){ - newMin = me.makeChange(newAmount); - } - if ( - newAmount >= 0 && - (newMin.length < min.length-1 || !min.length) && - (newMin.length || !newAmount) - ){ - min = [coin].concat(newMin); - console.log('new Min ' + min + ' for ' + amount); - } - } - return (cache[amount] = min); - }; -} - - -var minCoinChange = new MinCoinChange([1, 5, 10, 25]); -console.log(minCoinChange.makeChange(36)); - -var minCoinChange2 = new MinCoinChange([1, 3, 4]); -console.log(minCoinChange2.makeChange(6)); \ No newline at end of file diff --git a/chapter11/04-MinCoinChangeGreedy.html b/chapter11/04-MinCoinChangeGreedy.html deleted file mode 100644 index cc01ddc2..00000000 --- a/chapter11/04-MinCoinChangeGreedy.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter11/04-MinCoinChangeGreedy.js b/chapter11/04-MinCoinChangeGreedy.js deleted file mode 100644 index a935c16b..00000000 --- a/chapter11/04-MinCoinChangeGreedy.js +++ /dev/null @@ -1,26 +0,0 @@ -function MinCoinChange(coins){ - - var coins = coins; - - var cache = {}; - - this.makeChange = function(amount) { - var change = [], - total = 0; - for (var i=coins.length; i>=0; i--){ - var coin = coins[i]; - while (total + coin <= amount) { - change.push(coin); - total += coin; - } - } - return change; - }; -} - - -var minCoinChange = new MinCoinChange([1, 5, 10, 25]); -console.log(minCoinChange.makeChange(36)); - -var minCoinChange2 = new MinCoinChange([1, 3, 4]); -console.log(minCoinChange2.makeChange(6)); \ No newline at end of file diff --git a/chapter11/05-BigONotation.html b/chapter11/05-BigONotation.html deleted file mode 100644 index 317a5bfb..00000000 --- a/chapter11/05-BigONotation.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter11/05-BigONotation.js b/chapter11/05-BigONotation.js deleted file mode 100644 index a48bd6ab..00000000 --- a/chapter11/05-BigONotation.js +++ /dev/null @@ -1,65 +0,0 @@ -//*************** o(1) -function increment(num){ - console.log('cost for increment with input ' + num + ' is 1'); - return ++num; -} - -increment(1); -increment(2); - -//*************** o(n) - -function createNonSortedArray(size){ - var array = []; - - for (var i = size; i> 0; i--){ - array[i] = i; - } - - return array; -} - -function sequentialSearch(array, item){ - var cost = 0; - for (var i=0; i array[j+1]){ - swap(array, j, j+1); - } - } - } - console.log('cost for bubbleSort with input size ' + length + ' is ' + cost); -} - -var array1 = createNonSortedArray(99); -var array2 = createNonSortedArray(999); -var array3 = createNonSortedArray(9999); -bubbleSort(array1); -bubbleSort(array2); -bubbleSort(array3); \ No newline at end of file diff --git a/chapter11/bigOChart/chart.js b/chapter11/bigOChart/chart.js deleted file mode 100644 index 765794df..00000000 --- a/chapter11/bigOChart/chart.js +++ /dev/null @@ -1,37 +0,0 @@ -google.load('visualization', '1.0', {'packages':['corechart']}); -google.setOnLoadCallback(drawChart); - -function drawChart() { - - var data = new google.visualization.DataTable(); - data.addColumn('string', 'n'); - data.addColumn('number', 'O(1)'); - data.addColumn('number', 'O(log n)'); - data.addColumn('number', 'O(n)'); - data.addColumn('number', 'O(n log n)'); - data.addColumn('number', 'O(n^2)'); - data.addColumn('number', 'O(2^n)'); - - for (var i = 0; i <= 30; i++) { - data.addRow([i+'', 1, Math.log(i), i, Math.log(i)*i, Math.pow(i,2), Math.pow(2,i)]); - } - - var options = {'title':'Big O Notation Complexity Chart', - 'width':700, - 'height':600, - 'backgroundColor':{stroke:'#CCC',strokeWidth:1}, - 'curveType':'function', - 'hAxis':{ - title:'Elements (n)', - showTextEvery:5 - }, - 'vAxis':{ - title:'Operations', - viewWindowMode:'explicit', - viewWindow:{min:0,max:450} - } - }; - - var chart = new google.visualization.LineChart(document.getElementById('chart_div')); - chart.draw(data, options); -} \ No newline at end of file diff --git a/chapter11/bigOChart/index.html b/chapter11/bigOChart/index.html deleted file mode 100644 index 31118263..00000000 --- a/chapter11/bigOChart/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - -
- - \ No newline at end of file From 5eabb7b7d828d924b918ccc0c746ec9845e68259 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Oct 2017 11:58:07 -0300 Subject: [PATCH 006/188] chapter 04: [Queues and Deques] --- README.md | 1 + examples/PacktDataStructuresAlgorithms.min.js | 2 +- examples/chapter04/01-Queue.html | 11 + examples/chapter04/01-Queue.js | 14 ++ examples/chapter04/02-Deque.html | 11 + examples/chapter04/02-Deque.js | 17 ++ examples/chapter04/03-HotPotato.html | 11 + examples/chapter04/03-HotPotato.js | 16 ++ examples/chapter04/04-PalindromeChecker.html | 11 + examples/chapter04/04-PalindromeChecker.js | 8 + examples/index.html | 101 +++++---- src/js/data-structures/deque.js | 88 ++++++++ src/js/data-structures/queue.js | 56 +++++ src/js/index.js | 10 +- src/js/others/hot-potato.js | 22 ++ src/js/others/palindrome-checker.js | 30 +++ src/ts/data-structures/deque.ts | 90 ++++++++ .../data-structures/priority-queue-array.ts | 58 +++++ src/ts/data-structures/queue.ts | 58 +++++ src/ts/index.ts | 14 +- src/ts/others/hot-potato.ts | 22 ++ src/ts/others/palindrome-checker.ts | 28 +++ src/ts/util.ts | 13 ++ test/js/data-structures/deque.spec.js | 207 ++++++++++++++++++ test/js/data-structures/queue.spec.js | 171 +++++++++++++++ test/js/others/hot-potato.spec.js | 14 ++ test/js/others/palindrome-checker.spec.js | 19 ++ test/ts/data-structures/deque.spec.ts | 204 +++++++++++++++++ test/ts/data-structures/queue.spec.ts | 168 ++++++++++++++ test/ts/data-structures/stack.spec.ts | 2 +- test/ts/others/hot-potato.spec.ts | 16 ++ test/ts/others/palindrome-checker.spec.ts | 20 ++ 32 files changed, 1468 insertions(+), 45 deletions(-) create mode 100755 examples/chapter04/01-Queue.html create mode 100755 examples/chapter04/01-Queue.js create mode 100755 examples/chapter04/02-Deque.html create mode 100755 examples/chapter04/02-Deque.js create mode 100755 examples/chapter04/03-HotPotato.html create mode 100755 examples/chapter04/03-HotPotato.js create mode 100755 examples/chapter04/04-PalindromeChecker.html create mode 100755 examples/chapter04/04-PalindromeChecker.js create mode 100644 src/js/data-structures/deque.js create mode 100644 src/js/data-structures/queue.js create mode 100644 src/js/others/hot-potato.js create mode 100644 src/js/others/palindrome-checker.js create mode 100644 src/ts/data-structures/deque.ts create mode 100644 src/ts/data-structures/priority-queue-array.ts create mode 100644 src/ts/data-structures/queue.ts create mode 100644 src/ts/others/hot-potato.ts create mode 100644 src/ts/others/palindrome-checker.ts create mode 100644 src/ts/util.ts create mode 100644 test/js/data-structures/deque.spec.js create mode 100644 test/js/data-structures/queue.spec.js create mode 100644 test/js/others/hot-potato.spec.js create mode 100644 test/js/others/palindrome-checker.spec.js create mode 100644 test/ts/data-structures/deque.spec.ts create mode 100644 test/ts/data-structures/queue.spec.ts create mode 100644 test/ts/others/hot-potato.spec.ts create mode 100644 test/ts/others/palindrome-checker.spec.ts diff --git a/README.md b/README.md index 0be9ad9b..6ff78b35 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ Work in Progress. * 01: [JavaScript, ECMAScript and TypeScript: a quick overview](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter01) * 02: [Arrays](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter02) * 03: [Stacks](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter03) +* 04: [Queues and Deques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter04) ## Thrid Edition Updates diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index 2977a273..8fabf6e5 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=1)}([function(t,e,n){var r,o,i;!function(n,u){o=[t,e],r=u,void 0!==(i="function"==typeof r?r.apply(e,o):r)&&(t.exports=i)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return s;if(1===t){o.push(e.pop());var f={};f[i]=e.toString(),f[u]=r.toString(),f[a]=o.toString(),s.push(f)}else{n(t-1,e,o,r,i,a,u,s),o.push(e.pop());var c={};c[i]=e.toString(),c[u]=r.toString(),c[a]=o.toString(),s.push(c),n(t-1,r,e,o,u,i,a,s)}return s}function r(t){for(var e=new i.default,r=new i.default,o=new i.default,u=t;u>0;u--)e.push(u);return n(t,e,o,r,"source","helper","dest")}function o(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?i:(1===t?i.push([e,r]):(o(t-1,e,r,n,i),i.push([e,r]),o(t-1,n,e,r,i)),i)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=r,t.hanoi=o;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var r,o,i;!function(u,a){o=[e,n(0)],r=a,void 0!==(i="function"==typeof r?r.apply(e,o):r)&&(t.exports=i)}(0,function(t,e){"use strict";function n(t){for(var e=new o.default,n=t,r=void 0,i="";n>0;)r=Math.floor(n%2),e.push(r),n=Math.floor(n/2);for(;!e.isEmpty();)i+=e.pop().toString();return i}function r(t,e){var n=new o.default,r=t,i=void 0,u="";if(!(e>=2&&e<=36))return"";for(;r>0;)i=Math.floor(r%e),n.push(i),r=Math.floor(r/e);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=r;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var r,o,i;!function(n,u){o=[t,e],r=u,void 0!==(i="function"==typeof r?r.apply(e,o):r)&&(t.exports=i)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n=0?e.push(a):e.isEmpty()?i=!1:(s=e.pop(),n.indexOf(s)!==o.indexOf(a)&&(i=!1)),u++;return!(!i||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var r=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(t,e,n){var i,o,u;!function(n,r){o=[t,e],i=r,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e1;){for(var r=0;r1&&o;)u=e.removeFront(),r=e.removeBack(),u!==r&&(o=!1);return o}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(r,s){o=[e,n(0)],i=s,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t){for(var e=new o.default,n=t,i=void 0,u="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)u+=e.pop().toString();return u}function i(t,e){var n=new o.default,i=t,u=void 0,r="";if(!(e>=2&&e<=36))return"";for(;i>0;)u=Math.floor(i%e),n.push(u),i=Math.floor(i/e);for(;!n.isEmpty();)r+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return r}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(n,r){o=[t,e],i=r,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?u=!1:(a=e.pop(),n.indexOf(a)!==o.indexOf(s)&&(u=!1)),r++;return!(!u||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(r,s){o=[e,n(0)],i=s,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e,i,o,u,r,s){var a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){o.push(e.pop());var c={};c[u]=e.toString(),c[r]=i.toString(),c[s]=o.toString(),a.push(c)}else{n(t-1,e,o,i,u,s,r,a),o.push(e.pop());var f={};f[u]=e.toString(),f[r]=i.toString(),f[s]=o.toString(),a.push(f),n(t-1,i,e,o,r,u,s,a)}return a}function i(t){for(var e=new u.default,i=new u.default,o=new u.default,r=t;r>0;r--)e.push(r);return n(t,e,o,i,"source","helper","dest")}function o(t,e,n,i){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?u:(1===t?u.push([e,i]):(o(t-1,e,i,n,u),u.push([e,i]),o(t-1,n,e,i,u)),u)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=o;var u=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file diff --git a/examples/chapter04/01-Queue.html b/examples/chapter04/01-Queue.html new file mode 100755 index 00000000..2e67f7f4 --- /dev/null +++ b/examples/chapter04/01-Queue.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter04/01-Queue.js b/examples/chapter04/01-Queue.js new file mode 100755 index 00000000..9c8be0be --- /dev/null +++ b/examples/chapter04/01-Queue.js @@ -0,0 +1,14 @@ +const { Queue } = PacktDataStructuresAlgorithms; + +const queue = new Queue(); +console.log(queue.isEmpty()); // outputs true +queue.enqueue('John'); +queue.enqueue('Jack'); +console.log(queue.toString()); // John,Jack +queue.enqueue('Camila'); +console.log(queue.toString()); // John,Jack,Camila +console.log(queue.size()); // outputs 3 +console.log(queue.isEmpty()); // outputs false +queue.dequeue(); +queue.dequeue(); +console.log(queue.toString()); // Camila diff --git a/examples/chapter04/02-Deque.html b/examples/chapter04/02-Deque.html new file mode 100755 index 00000000..99b838af --- /dev/null +++ b/examples/chapter04/02-Deque.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter04/02-Deque.js b/examples/chapter04/02-Deque.js new file mode 100755 index 00000000..e4e12bb6 --- /dev/null +++ b/examples/chapter04/02-Deque.js @@ -0,0 +1,17 @@ +const { Deque } = PacktDataStructuresAlgorithms; + +const deque = new Deque(); +console.log(deque.isEmpty()); // outputs true +deque.addBack('John'); +deque.addBack('Jack'); +console.log(deque.toString()); // John,Jack +deque.addBack('Camila'); +console.log(deque.toString()); // John,Jack,Camila +console.log(deque.size()); // outputs 3 +console.log(deque.isEmpty()); // outputs false +deque.removeFront(); +console.log(deque.toString()); // Jack,Camila +deque.removeBack(); // Camila decides to leave +console.log(deque.toString()); // Jack +deque.addFront('John'); +console.log(deque.toString()); // John,Jack diff --git a/examples/chapter04/03-HotPotato.html b/examples/chapter04/03-HotPotato.html new file mode 100755 index 00000000..85d45104 --- /dev/null +++ b/examples/chapter04/03-HotPotato.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter04/03-HotPotato.js b/examples/chapter04/03-HotPotato.js new file mode 100755 index 00000000..686f6791 --- /dev/null +++ b/examples/chapter04/03-HotPotato.js @@ -0,0 +1,16 @@ +const { hotPotato } = PacktDataStructuresAlgorithms; + +const names = ['John', 'Jack', 'Camila', 'Ingrid', 'Carl']; +const result = hotPotato(names, 7); + +result.eliminated.forEach(name => { + console.log(`${name} was eliminated from the Hot Potato game.`); +}); + +console.log(`The winner is: ${result.winner}`); + +// Camila was eliminated from the Hot Potato game. +// Jack was eliminated from the Hot Potato game. +// Carl was eliminated from the Hot Potato game. +// Ingrid was eliminated from the Hot Potato game. +// The winner is: John diff --git a/examples/chapter04/04-PalindromeChecker.html b/examples/chapter04/04-PalindromeChecker.html new file mode 100755 index 00000000..785e0482 --- /dev/null +++ b/examples/chapter04/04-PalindromeChecker.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter04/04-PalindromeChecker.js b/examples/chapter04/04-PalindromeChecker.js new file mode 100755 index 00000000..99c29cf9 --- /dev/null +++ b/examples/chapter04/04-PalindromeChecker.js @@ -0,0 +1,8 @@ +const { palindromeChecker } = PacktDataStructuresAlgorithms; + +console.log('a', palindromeChecker('a')); +console.log('aa', palindromeChecker('aa')); +console.log('kayak', palindromeChecker('kayak')); +console.log('level', palindromeChecker('level')); +console.log('Was it a car or a cat I saw', palindromeChecker('Was it a car or a cat I saw')); +console.log('Step on no pets', palindromeChecker('Step on no pets')); diff --git a/examples/index.html b/examples/index.html index 81003bd3..3a7ccc7d 100644 --- a/examples/index.html +++ b/examples/index.html @@ -13,12 +13,15 @@ .mdl-layout__content { padding: 10px; } + .mdl-layout__drawer { width: 290px; } + .iframe-padding { padding-left: 295px; } + .mdl-layout__drawer .mdl-navigation .mdl-navigation__link { color: rgb(103, 58, 183); } @@ -39,37 +42,39 @@ 02 03 04 - 05 - 06 + 05 + 06
Please open the Developer Tools Console to see the output -
+
+ +
@@ -80,14 +85,14 @@ @@ -95,23 +100,37 @@
-
- Soon. +
+ + +
+
+ Soon. +
+
diff --git a/src/js/data-structures/deque.js b/src/js/data-structures/deque.js new file mode 100644 index 00000000..82b50617 --- /dev/null +++ b/src/js/data-structures/deque.js @@ -0,0 +1,88 @@ +// @ts-check + +export default class Deque { + constructor() { + this.count = 0; + this.lowestCount = 0; + this.items = {}; + } + + addFront(element) { + if (this.isEmpty()) { + this.addBack(element); + } else if (this.lowestCount > 0) { + this.lowestCount--; + this.items[this.lowestCount] = element; + } else { + for (let i = this.count; i > 0; i--) { + this.items[i] = this.items[i - 1]; + } + this.count++; + this.items[0] = element; + } + } + + addBack(element) { + this.items[this.count] = element; + this.count++; + } + + removeFront() { + if (this.isEmpty()) { + return undefined; + } + const result = this.items[this.lowestCount]; + delete this.items[this.lowestCount]; + this.lowestCount++; + return result; + } + + removeBack() { + if (this.isEmpty()) { + return undefined; + } + this.count--; + const result = this.items[this.count]; + delete this.items[this.count]; + return result; + } + + peekFront() { + if (this.isEmpty()) { + return undefined; + } + return this.items[this.lowestCount]; + } + + peekBack() { + if (this.isEmpty()) { + return undefined; + } + return this.items[this.count - 1]; + } + + isEmpty() { + return this.size() === 0; + } + + clear() { + this.items = {}; + this.count = 0; + this.lowestCount = 0; + } + + size() { + return this.count - this.lowestCount; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + let objString = `${this.items[this.lowestCount]}`; + for (let i = this.lowestCount + 1; i < this.count; i++) { + objString = `${objString},${this.items[i]}`; + } + return objString; + } +} diff --git a/src/js/data-structures/queue.js b/src/js/data-structures/queue.js new file mode 100644 index 00000000..8f6c59fd --- /dev/null +++ b/src/js/data-structures/queue.js @@ -0,0 +1,56 @@ +// @ts-check + +export default class Queue { + constructor() { + this.count = 0; + this.lowestCount = 0; + this.items = {}; + } + + enqueue(element) { + this.items[this.count] = element; + this.count++; + } + + dequeue() { + if (this.isEmpty()) { + return undefined; + } + const result = this.items[this.lowestCount]; + delete this.items[this.lowestCount]; + this.lowestCount++; + return result; + } + + peek() { + if (this.isEmpty()) { + return undefined; + } + return this.items[this.lowestCount]; + } + + isEmpty() { + return this.count - this.lowestCount === 0; + } + + clear() { + this.items = {}; + this.count = 0; + this.lowestCount = 0; + } + + size() { + return this.count - this.lowestCount; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + let objString = `${this.items[this.lowestCount]}`; + for (let i = this.lowestCount + 1; i < this.count; i++) { + objString = `${objString},${this.items[i]}`; + } + return objString; + } +} diff --git a/src/js/index.js b/src/js/index.js index 198a42e2..d81e7f32 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1,3 +1,7 @@ +import { hotPotato } from './others/hot-potato'; +import { palindromeChecker } from './others/palindrome-checker'; +import Deque from './data-structures/deque'; +import Queue from './data-structures/queue'; import { hanoi, hanoiStack } from './others/hanoi'; import { baseConverter, decimalToBinary } from './others/base-converter'; import StackArray from './data-structures/stack-array'; @@ -11,5 +15,9 @@ export { baseConverter, decimalToBinary, hanoi, - hanoiStack + hanoiStack, + Queue, + Deque, + hotPotato, + palindromeChecker }; diff --git a/src/js/others/hot-potato.js b/src/js/others/hot-potato.js new file mode 100644 index 00000000..b34fcc64 --- /dev/null +++ b/src/js/others/hot-potato.js @@ -0,0 +1,22 @@ +import Queue from '../data-structures/queue'; + +export function hotPotato(elementsList, num) { + const queue = new Queue(); + const elimitatedList = []; + + for (let i = 0; i < elementsList.length; i++) { + queue.enqueue(elementsList[i]); + } + + while (queue.size() > 1) { + for (let i = 0; i < num; i++) { + queue.enqueue(queue.dequeue()); + } + elimitatedList.push(queue.dequeue()); + } + + return { + eliminated: elimitatedList, + winner: queue.dequeue() + }; +} diff --git a/src/js/others/palindrome-checker.js b/src/js/others/palindrome-checker.js new file mode 100644 index 00000000..17a0c581 --- /dev/null +++ b/src/js/others/palindrome-checker.js @@ -0,0 +1,30 @@ +import Deque from '../data-structures/deque'; + +export function palindromeChecker(aString) { + if ( + aString === undefined || + aString === null || + (aString !== null && aString.length === 0) + ) { + return false; + } + const deque = new Deque(); + const lowerString = aString.toLocaleLowerCase().split(' ').join(''); + let isEqual = true; + let firstChar; + let lastChar; + + for (let i = 0; i < lowerString.length; i++) { + deque.addBack(lowerString.charAt(i)); + } + + while (deque.size() > 1 && isEqual) { + firstChar = deque.removeFront(); + lastChar = deque.removeBack(); + if (firstChar !== lastChar) { + isEqual = false; + } + } + + return isEqual; +} diff --git a/src/ts/data-structures/deque.ts b/src/ts/data-structures/deque.ts new file mode 100644 index 00000000..155b735c --- /dev/null +++ b/src/ts/data-structures/deque.ts @@ -0,0 +1,90 @@ +export default class Deque { + private count: number; + private lowestCount: number; + private items: any; + + constructor() { + this.count = 0; + this.lowestCount = 0; + this.items = {}; + } + + addFront(element: T) { + if (this.isEmpty()) { + this.addBack(element); + } else if (this.lowestCount > 0) { + this.lowestCount--; + this.items[this.lowestCount] = element; + } else { + for (let i = this.count; i > 0; i--) { + this.items[i] = this.items[i - 1]; + } + this.count++; + this.items[0] = element; + } + } + + addBack(element: T) { + this.items[this.count] = element; + this.count++; + } + + removeFront() { + if (this.isEmpty()) { + return undefined; + } + const result = this.items[this.lowestCount]; + delete this.items[this.lowestCount]; + this.lowestCount++; + return result; + } + + removeBack() { + if (this.isEmpty()) { + return undefined; + } + this.count--; + const result = this.items[this.count]; + delete this.items[this.count]; + return result; + } + + peekFront() { + if (this.isEmpty()) { + return undefined; + } + return this.items[this.lowestCount]; + } + + peekBack() { + if (this.isEmpty()) { + return undefined; + } + return this.items[this.count - 1]; + } + + isEmpty() { + return this.size() === 0; + } + + clear() { + this.items = {}; + this.count = 0; + this.lowestCount = 0; + } + + size() { + return this.count - this.lowestCount; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + let objString = `${this.items[this.lowestCount]}`; + for (let i = this.lowestCount + 1; i < this.count; i++) { + objString = `${objString},${this.items[i]}`; + } + return objString; + } +} diff --git a/src/ts/data-structures/priority-queue-array.ts b/src/ts/data-structures/priority-queue-array.ts new file mode 100644 index 00000000..6ad0d441 --- /dev/null +++ b/src/ts/data-structures/priority-queue-array.ts @@ -0,0 +1,58 @@ +import { Compare, defaultCompare, ICompareFunction } from '../util'; + +export default class PriorityQueue { + private items: T[]; + + constructor( + private compareFn: ICompareFunction = defaultCompare, + private compare: Compare = Compare.LESS_THAN + ) { + this.items = []; + } + + enqueue(element: T) { + let added = false; + + for (let i = 0; i < this.items.length; i++) { + if (this.compareFn(element, this.items[i]) === this.compare) { + this.items.splice(i, 0, element); + added = true; + break; + } + } + + if (!added) { + this.items.push(element); + } + } + + dequeue() { + return this.items.shift(); + } + + peek() { + if (this.isEmpty()) { + return undefined; + } + return this.items[0]; + } + + isEmpty() { + return this.items.length === 0; + } + + clear() { + this.items = []; + } + + size() { + return this.items.length; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + return this.items; + } +} diff --git a/src/ts/data-structures/queue.ts b/src/ts/data-structures/queue.ts new file mode 100644 index 00000000..8708c0f3 --- /dev/null +++ b/src/ts/data-structures/queue.ts @@ -0,0 +1,58 @@ +export default class Queue { + private count: number; + private lowestCount: number; + private items: any; + + constructor() { + this.count = 0; + this.lowestCount = 0; + this.items = {}; + } + + enqueue(element: T) { + this.items[this.count] = element; + this.count++; + } + + dequeue() { + if (this.isEmpty()) { + return undefined; + } + const result = this.items[this.lowestCount]; + delete this.items[this.lowestCount]; + this.lowestCount++; + return result; + } + + peek() { + if (this.isEmpty()) { + return undefined; + } + return this.items[this.lowestCount]; + } + + isEmpty() { + return this.count - this.lowestCount === 0; + } + + clear() { + this.items = {}; + this.count = 0; + this.lowestCount = 0; + } + + size() { + return this.count - this.lowestCount; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + let objString = `${this.items[this.lowestCount]}`; + for (let i = this.lowestCount + 1; i < this.count; i++) { + objString = `${objString},${this.items[i]}`; + } + return objString; + } +} diff --git a/src/ts/index.ts b/src/ts/index.ts index 198a42e2..c97e44b7 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -1,8 +1,13 @@ +import { hotPotato } from './others/hot-potato'; +import { palindromeChecker } from './others/palindrome-checker'; +import Deque from './data-structures/deque'; +import Queue from './data-structures/queue'; import { hanoi, hanoiStack } from './others/hanoi'; import { baseConverter, decimalToBinary } from './others/base-converter'; import StackArray from './data-structures/stack-array'; import Stack from './data-structures/stack'; import { parenthesesChecker } from './others/balanced-symbols'; +import { Compare, defaultCompare, ICompareFunction } from './util'; export { Stack, @@ -11,5 +16,12 @@ export { baseConverter, decimalToBinary, hanoi, - hanoiStack + hanoiStack, + ICompareFunction, + defaultCompare, + Compare, + Queue, + Deque, + hotPotato, + palindromeChecker }; diff --git a/src/ts/others/hot-potato.ts b/src/ts/others/hot-potato.ts new file mode 100644 index 00000000..f6eb8349 --- /dev/null +++ b/src/ts/others/hot-potato.ts @@ -0,0 +1,22 @@ +import Queue from '../data-structures/queue'; + +export function hotPotato(elementsList: any[], num: number) { + const queue = new Queue(); + const elimitatedList = []; + + for (let i = 0; i < elementsList.length; i++) { + queue.enqueue(elementsList[i]); + } + + while (queue.size() > 1) { + for (let i = 0; i < num; i++) { + queue.enqueue(queue.dequeue()); + } + elimitatedList.push(queue.dequeue()); + } + + return { + elimitated: elimitatedList, + winner: queue.dequeue() + }; +} diff --git a/src/ts/others/palindrome-checker.ts b/src/ts/others/palindrome-checker.ts new file mode 100644 index 00000000..10c5a21a --- /dev/null +++ b/src/ts/others/palindrome-checker.ts @@ -0,0 +1,28 @@ +import Deque from '../data-structures/deque'; + +export function palindromeChecker(aString: string) { + + if (aString === undefined || aString === null || + (aString !== null && aString.length === 0)) { + return false; + } + + const deque = new Deque(); + const lowerString = aString.toLocaleLowerCase().split(' ').join(''); + let isEqual = true; + let firstChar: string, lastChar: string; + + for (let i = 0; i < lowerString.length; i++) { + deque.addBack(lowerString.charAt(i)); + } + + while (deque.size() > 1 && isEqual) { + firstChar = deque.removeFront(); + lastChar = deque.removeBack(); + if (firstChar !== lastChar) { + isEqual = false; + } + } + + return isEqual; +} diff --git a/src/ts/util.ts b/src/ts/util.ts new file mode 100644 index 00000000..13cb876c --- /dev/null +++ b/src/ts/util.ts @@ -0,0 +1,13 @@ +export type ICompareFunction = (a: T, b: T) => number; + +export enum Compare { + LESS_THAN = -1, + BIGGER_THAN = 1 +} + +export function defaultCompare(a: T, b: T): number { + if (a === b) { + return 0; + } + return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN; +} diff --git a/test/js/data-structures/deque.spec.js b/test/js/data-structures/deque.spec.js new file mode 100644 index 00000000..69861377 --- /dev/null +++ b/test/js/data-structures/deque.spec.js @@ -0,0 +1,207 @@ +import 'mocha'; +import { expect } from 'chai'; +import Deque from '../../../src/js/data-structures/deque'; + +describe('Deque', () => { + let deque; + + beforeEach(() => { + deque = new Deque(); + }); + + it('starts empty', () => { + expect(deque.size()).to.equal(0); + expect(deque.isEmpty()).to.equal(true); + }); + + it('add elements in the back', () => { + deque.addBack(1); + expect(deque.size()).to.equal(1); + + deque.addBack(2); + expect(deque.size()).to.equal(2); + + deque.addBack(3); + expect(deque.size()).to.equal(3); + }); + + it('add elements in the front', () => { + deque.addFront(1); + expect(deque.size()).to.equal(1); + + deque.addFront(2); + expect(deque.size()).to.equal(2); + + deque.addFront(3); + expect(deque.size()).to.equal(3); + + deque.removeFront(); + deque.addFront(4); + expect(deque.size()).to.equal(3); + }); + + it('remove elements from the back', () => { + deque.addBack(1); + deque.addBack(2); + deque.addBack(3); + deque.addFront(0); + + expect(deque.removeBack()).to.equal(3); + expect(deque.removeBack()).to.equal(2); + expect(deque.removeBack()).to.equal(1); + expect(deque.removeBack()).to.equal(0); + expect(deque.removeBack()).to.equal(undefined); + }); + + it('remove elements from the front', () => { + deque.addFront(1); + deque.addBack(2); + deque.addBack(3); + deque.addFront(0); + deque.addFront(-1); + deque.addFront(-2); + + expect(deque.removeFront()).to.equal(-2); + expect(deque.removeFront()).to.equal(-1); + expect(deque.removeFront()).to.equal(0); + expect(deque.removeFront()).to.equal(1); + expect(deque.removeFront()).to.equal(2); + expect(deque.removeFront()).to.equal(3); + expect(deque.removeFront()).to.equal(undefined); + }); + + it('allows to peek at the front element in the deque without removing it', () => { + expect(deque.peekFront()).to.equal(undefined); + + deque.addFront(1); + expect(deque.peekFront()).to.equal(1); + deque.addBack(2); + expect(deque.peekFront()).to.equal(1); + deque.addBack(3); + expect(deque.peekFront()).to.equal(1); + deque.addFront(0); + expect(deque.peekFront()).to.equal(0); + deque.addFront(-1); + expect(deque.peekFront()).to.equal(-1); + deque.addFront(-2); + expect(deque.peekFront()).to.equal(-2); + }); + + it('allows to peek at the last element in the deque without removing it', () => { + expect(deque.peekBack()).to.equal(undefined); + + deque.addFront(1); + expect(deque.peekBack()).to.equal(1); + deque.addBack(2); + expect(deque.peekBack()).to.equal(2); + deque.addBack(3); + expect(deque.peekBack()).to.equal(3); + deque.addFront(0); + expect(deque.peekBack()).to.equal(3); + deque.addFront(-1); + expect(deque.peekBack()).to.equal(3); + deque.addFront(-2); + expect(deque.peekBack()).to.equal(3); + }); + + it('returns the correct size', () => { + expect(deque.size()).to.equal(0); + + deque.addFront(1); + expect(deque.size()).to.equal(1); + deque.addBack(2); + expect(deque.size()).to.equal(2); + deque.addBack(3); + expect(deque.size()).to.equal(3); + deque.addFront(0); + expect(deque.size()).to.equal(4); + deque.addFront(-1); + expect(deque.size()).to.equal(5); + deque.addFront(-2); + expect(deque.size()).to.equal(6); + + deque.clear(); + expect(deque.size()).to.equal(0); + + deque.addFront(1); + deque.addBack(2); + expect(deque.size()).to.equal(2); + + deque.removeFront(); + deque.removeBack(); + expect(deque.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(deque.isEmpty()).to.equal(true); + + deque.addFront(1); + expect(deque.isEmpty()).to.equal(false); + deque.addBack(2); + expect(deque.isEmpty()).to.equal(false); + + deque.clear(); + expect(deque.isEmpty()).to.equal(true); + + deque.addFront(1); + deque.addBack(2); + expect(deque.isEmpty()).to.equal(false); + + deque.removeFront(); + expect(deque.isEmpty()).to.equal(false); + deque.removeBack(); + expect(deque.isEmpty()).to.equal(true); + }); + + it('clears the queue', () => { + deque.clear(); + expect(deque.isEmpty()).to.equal(true); + + deque.addFront(1); + deque.addBack(2); + expect(deque.isEmpty()).to.equal(false); + + deque.clear(); + expect(deque.isEmpty()).to.equal(true); + }); + + it('returns toString primitive types', () => { + expect(deque.toString()).to.equal(''); + + deque.addFront(1); + expect(deque.toString()).to.equal('1'); + + deque.addBack(2); + expect(deque.toString()).to.equal('1,2'); + + deque.clear(); + expect(deque.toString()).to.equal(''); + + const queueString = new Deque(); + queueString.addFront('el1'); + expect(queueString.toString()).to.equal('el1'); + + queueString.addBack('el2'); + expect(queueString.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + class MyObj { + constructor(el1, el2) { + this.el1 = el1; + this.el2 = el2; + } + toString() { + return `${this.el1.toString()}|${this.el2.toString()}`; + } + } + const dequeMyObj = new Deque(); + expect(dequeMyObj.toString()).to.equal(''); + + dequeMyObj.addFront(new MyObj(1, 2)); + expect(dequeMyObj.toString()).to.equal('1|2'); + + dequeMyObj.addBack(new MyObj(3, 4)); + expect(dequeMyObj.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/js/data-structures/queue.spec.js b/test/js/data-structures/queue.spec.js new file mode 100644 index 00000000..ec113683 --- /dev/null +++ b/test/js/data-structures/queue.spec.js @@ -0,0 +1,171 @@ +import 'mocha'; +import { expect } from 'chai'; +import Queue from '../../../src/js/data-structures/queue'; + +describe('Queue', () => { + let queue; + + beforeEach(() => { + queue = new Queue(); + }); + + it('starts empty', () => { + expect(queue.size()).to.equal(0); + expect(queue.isEmpty()).to.equal(true); + }); + + it('enqueues elements', () => { + queue.enqueue(1); + expect(queue.size()).to.equal(1); + queue.enqueue(2); + expect(queue.size()).to.equal(2); + queue.enqueue(3); + expect(queue.size()).to.equal(3); + + expect(queue.isEmpty()).to.equal(false); + }); + + it('dequeue elements', () => { + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + + expect(queue.dequeue()).to.equal(1); + expect(queue.dequeue()).to.equal(2); + expect(queue.dequeue()).to.equal(3); + expect(queue.dequeue()).to.equal(undefined); + }); + + it('implements FIFO logic', () => { + queue.enqueue(1); + expect(queue.peek()).to.equal(1); + queue.enqueue(2); + expect(queue.peek()).to.equal(1); + queue.enqueue(3); + expect(queue.peek()).to.equal(1); + + expect(queue.dequeue()).to.equal(1); + expect(queue.dequeue()).to.equal(2); + expect(queue.dequeue()).to.equal(3); + expect(queue.dequeue()).to.equal(undefined); + }); + + it('allows to peek at the front element in the queue without dequeuing it', () => { + expect(queue.peek()).to.equal(undefined); + + queue.enqueue(1); + expect(queue.peek()).to.equal(1); + + queue.enqueue(2); + expect(queue.peek()).to.equal(1); + + queue.dequeue(); + expect(queue.peek()).to.equal(2); + }); + + it('returns the correct size', () => { + expect(queue.size()).to.equal(0); + queue.enqueue(1); + expect(queue.size()).to.equal(1); + queue.enqueue(2); + expect(queue.size()).to.equal(2); + queue.enqueue(3); + expect(queue.size()).to.equal(3); + + queue.clear(); + expect(queue.isEmpty()).to.equal(true); + + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + expect(queue.size()).to.equal(3); + + queue.dequeue(); + expect(queue.size()).to.equal(2); + queue.dequeue(); + expect(queue.size()).to.equal(1); + queue.dequeue(); + expect(queue.size()).to.equal(0); + queue.dequeue(); + expect(queue.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(queue.isEmpty()).to.equal(true); + queue.enqueue(1); + expect(queue.isEmpty()).to.equal(false); + queue.enqueue(2); + expect(queue.isEmpty()).to.equal(false); + queue.enqueue(3); + expect(queue.isEmpty()).to.equal(false); + + queue.clear(); + expect(queue.isEmpty()).to.equal(true); + + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + expect(queue.isEmpty()).to.equal(false); + + queue.dequeue(); + expect(queue.isEmpty()).to.equal(false); + queue.dequeue(); + expect(queue.isEmpty()).to.equal(false); + queue.dequeue(); + expect(queue.isEmpty()).to.equal(true); + queue.dequeue(); + expect(queue.isEmpty()).to.equal(true); + }); + + it('clears the queue', () => { + queue.clear(); + expect(queue.isEmpty()).to.equal(true); + + queue.enqueue(1); + queue.enqueue(2); + expect(queue.isEmpty()).to.equal(false); + + queue.clear(); + expect(queue.isEmpty()).to.equal(true); + }); + + it('returns toString primitive types', () => { + expect(queue.toString()).to.equal(''); + + queue.enqueue(1); + expect(queue.toString()).to.equal('1'); + + queue.enqueue(2); + expect(queue.toString()).to.equal('1,2'); + + queue.clear(); + expect(queue.toString()).to.equal(''); + + const queueString = new Queue(); + queueString.enqueue('el1'); + expect(queueString.toString()).to.equal('el1'); + + queueString.enqueue('el2'); + expect(queueString.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + class MyObj { + constructor(el1, el2) { + this.el1 = el1; + this.el2 = el2; + } + toString() { + return `${this.el1.toString()}|${this.el2.toString()}`; + } + } + const queueMyObj = new Queue(); + expect(queueMyObj.toString()).to.equal(''); + + queueMyObj.enqueue(new MyObj(1, 2)); + expect(queueMyObj.toString()).to.equal('1|2'); + + queueMyObj.enqueue(new MyObj(3, 4)); + expect(queueMyObj.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/js/others/hot-potato.spec.js b/test/js/others/hot-potato.spec.js new file mode 100644 index 00000000..dfbb2751 --- /dev/null +++ b/test/js/others/hot-potato.spec.js @@ -0,0 +1,14 @@ +import 'mocha'; +import { expect } from 'chai'; +import { hotPotato } from '../../../src/js/others/hot-potato'; + +describe('Hot Potato with Queue', () => { + it('Hot potato game', () => { + const names = ['John', 'Jack', 'Camila', 'Ingrid', 'Carl']; + expect(hotPotato(names, 6).winner).to.equal('Ingrid'); + expect(hotPotato(names, 7).winner).to.equal('John'); + expect(hotPotato(names, 8).winner).to.equal('Jack'); + expect(hotPotato(names, 9).winner).to.equal('Ingrid'); + expect(hotPotato(names, 10).winner).to.equal('Carl'); + }); +}); diff --git a/test/js/others/palindrome-checker.spec.js b/test/js/others/palindrome-checker.spec.js new file mode 100644 index 00000000..c5664a31 --- /dev/null +++ b/test/js/others/palindrome-checker.spec.js @@ -0,0 +1,19 @@ +import 'mocha'; +import { expect } from 'chai'; +import { palindromeChecker } from '../../../src/js/others/palindrome-checker'; + +describe('Palindrome', () => { + it('Palindrome Checker', () => { + expect(palindromeChecker('')).to.equal(false); + expect(palindromeChecker('a')).to.equal(true); + expect(palindromeChecker('aa')).to.equal(true); + expect(palindromeChecker('aba')).to.equal(true); + expect(palindromeChecker('ab')).to.equal(false); + expect(palindromeChecker('kayak')).to.equal(true); + expect(palindromeChecker('radar')).to.equal(true); + expect(palindromeChecker('level')).to.equal(true); + expect(palindromeChecker('Was it a car or a cat I saw')).to.equal(true); + expect(palindromeChecker('Step on no pets')).to.equal(true); + expect(palindromeChecker('Able was I ere I saw Elba')).to.equal(true); + }); +}); diff --git a/test/ts/data-structures/deque.spec.ts b/test/ts/data-structures/deque.spec.ts new file mode 100644 index 00000000..7dcb4c8a --- /dev/null +++ b/test/ts/data-structures/deque.spec.ts @@ -0,0 +1,204 @@ +import 'mocha'; +import { expect } from 'chai'; +import Deque from '../../../src/ts/data-structures/deque'; + +describe('Deque', () => { + let deque: Deque; + + beforeEach(() => { + deque = new Deque(); + }); + + it('starts empty', () => { + expect(deque.size()).to.equal(0); + expect(deque.isEmpty()).to.equal(true); + }); + + it('add elements in the back', () => { + deque.addBack(1); + expect(deque.size()).to.equal(1); + + deque.addBack(2); + expect(deque.size()).to.equal(2); + + deque.addBack(3); + expect(deque.size()).to.equal(3); + }); + + it('add elements in the front', () => { + deque.addFront(1); + expect(deque.size()).to.equal(1); + + deque.addFront(2); + expect(deque.size()).to.equal(2); + + deque.addFront(3); + expect(deque.size()).to.equal(3); + + deque.removeFront(); + deque.addFront(4); + expect(deque.size()).to.equal(3); + }); + + it('remove elements from the back', () => { + deque.addBack(1); + deque.addBack(2); + deque.addBack(3); + deque.addFront(0); + + expect(deque.removeBack()).to.equal(3); + expect(deque.removeBack()).to.equal(2); + expect(deque.removeBack()).to.equal(1); + expect(deque.removeBack()).to.equal(0); + expect(deque.removeBack()).to.equal(undefined); + }); + + it('remove elements from the front', () => { + deque.addFront(1); + deque.addBack(2); + deque.addBack(3); + deque.addFront(0); + deque.addFront(-1); + deque.addFront(-2); + + expect(deque.removeFront()).to.equal(-2); + expect(deque.removeFront()).to.equal(-1); + expect(deque.removeFront()).to.equal(0); + expect(deque.removeFront()).to.equal(1); + expect(deque.removeFront()).to.equal(2); + expect(deque.removeFront()).to.equal(3); + expect(deque.removeFront()).to.equal(undefined); + }); + + it('allows to peek at the front element in the deque without removing it', () => { + expect(deque.peekFront()).to.equal(undefined); + + deque.addFront(1); + expect(deque.peekFront()).to.equal(1); + deque.addBack(2); + expect(deque.peekFront()).to.equal(1); + deque.addBack(3); + expect(deque.peekFront()).to.equal(1); + deque.addFront(0); + expect(deque.peekFront()).to.equal(0); + deque.addFront(-1); + expect(deque.peekFront()).to.equal(-1); + deque.addFront(-2); + expect(deque.peekFront()).to.equal(-2); + }); + + it('allows to peek at the last element in the deque without removing it', () => { + expect(deque.peekBack()).to.equal(undefined); + + deque.addFront(1); + expect(deque.peekBack()).to.equal(1); + deque.addBack(2); + expect(deque.peekBack()).to.equal(2); + deque.addBack(3); + expect(deque.peekBack()).to.equal(3); + deque.addFront(0); + expect(deque.peekBack()).to.equal(3); + deque.addFront(-1); + expect(deque.peekBack()).to.equal(3); + deque.addFront(-2); + expect(deque.peekBack()).to.equal(3); + }); + + it('returns the correct size', () => { + expect(deque.size()).to.equal(0); + + deque.addFront(1); + expect(deque.size()).to.equal(1); + deque.addBack(2); + expect(deque.size()).to.equal(2); + deque.addBack(3); + expect(deque.size()).to.equal(3); + deque.addFront(0); + expect(deque.size()).to.equal(4); + deque.addFront(-1); + expect(deque.size()).to.equal(5); + deque.addFront(-2); + expect(deque.size()).to.equal(6); + + deque.clear(); + expect(deque.size()).to.equal(0); + + deque.addFront(1); + deque.addBack(2); + expect(deque.size()).to.equal(2); + + deque.removeFront(); + deque.removeBack(); + expect(deque.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(deque.isEmpty()).to.equal(true); + + deque.addFront(1); + expect(deque.isEmpty()).to.equal(false); + deque.addBack(2); + expect(deque.isEmpty()).to.equal(false); + + deque.clear(); + expect(deque.isEmpty()).to.equal(true); + + deque.addFront(1); + deque.addBack(2); + expect(deque.isEmpty()).to.equal(false); + + deque.removeFront(); + expect(deque.isEmpty()).to.equal(false); + deque.removeBack(); + expect(deque.isEmpty()).to.equal(true); + }); + + it('clears the queue', () => { + deque.clear(); + expect(deque.isEmpty()).to.equal(true); + + deque.addFront(1); + deque.addBack(2); + expect(deque.isEmpty()).to.equal(false); + + deque.clear(); + expect(deque.isEmpty()).to.equal(true); + }); + + it('returns toString primitive types', () => { + expect(deque.toString()).to.equal(''); + + deque.addFront(1); + expect(deque.toString()).to.equal('1'); + + deque.addBack(2); + expect(deque.toString()).to.equal('1,2'); + + deque.clear(); + expect(deque.toString()).to.equal(''); + + const queueString = new Deque(); + queueString.addFront('el1'); + expect(queueString.toString()).to.equal('el1'); + + queueString.addBack('el2'); + expect(queueString.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + class MyObj { + constructor(public el1: any, public el2: any) {} + toString() { + return `${this.el1.toString()}|${this.el2.toString()}`; + } + } + const dequeMyObj = new Deque(); + expect(dequeMyObj.toString()).to.equal(''); + + dequeMyObj.addFront(new MyObj(1, 2)); + expect(dequeMyObj.toString()).to.equal('1|2'); + + dequeMyObj.addBack(new MyObj(3, 4)); + expect(dequeMyObj.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/ts/data-structures/queue.spec.ts b/test/ts/data-structures/queue.spec.ts new file mode 100644 index 00000000..132f7280 --- /dev/null +++ b/test/ts/data-structures/queue.spec.ts @@ -0,0 +1,168 @@ +import 'mocha'; +import { expect } from 'chai'; +import Queue from '../../../src/ts/data-structures/queue'; + +describe('Queue', () => { + let queue: Queue; + + beforeEach(() => { + queue = new Queue(); + }); + + it('starts empty', () => { + expect(queue.size()).to.equal(0); + expect(queue.isEmpty()).to.equal(true); + }); + + it('enqueues elements', () => { + queue.enqueue(1); + expect(queue.size()).to.equal(1); + queue.enqueue(2); + expect(queue.size()).to.equal(2); + queue.enqueue(3); + expect(queue.size()).to.equal(3); + + expect(queue.isEmpty()).to.equal(false); + }); + + it('dequeue elements', () => { + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + + expect(queue.dequeue()).to.equal(1); + expect(queue.dequeue()).to.equal(2); + expect(queue.dequeue()).to.equal(3); + expect(queue.dequeue()).to.equal(undefined); + }); + + it('implements FIFO logic', () => { + queue.enqueue(1); + expect(queue.peek()).to.equal(1); + queue.enqueue(2); + expect(queue.peek()).to.equal(1); + queue.enqueue(3); + expect(queue.peek()).to.equal(1); + + expect(queue.dequeue()).to.equal(1); + expect(queue.dequeue()).to.equal(2); + expect(queue.dequeue()).to.equal(3); + expect(queue.dequeue()).to.equal(undefined); + }); + + it('allows to peek at the front element in the queue without dequeuing it', () => { + expect(queue.peek()).to.equal(undefined); + + queue.enqueue(1); + expect(queue.peek()).to.equal(1); + + queue.enqueue(2); + expect(queue.peek()).to.equal(1); + + queue.dequeue(); + expect(queue.peek()).to.equal(2); + }); + + it('returns the correct size', () => { + expect(queue.size()).to.equal(0); + queue.enqueue(1); + expect(queue.size()).to.equal(1); + queue.enqueue(2); + expect(queue.size()).to.equal(2); + queue.enqueue(3); + expect(queue.size()).to.equal(3); + + queue.clear(); + expect(queue.isEmpty()).to.equal(true); + + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + expect(queue.size()).to.equal(3); + + queue.dequeue(); + expect(queue.size()).to.equal(2); + queue.dequeue(); + expect(queue.size()).to.equal(1); + queue.dequeue(); + expect(queue.size()).to.equal(0); + queue.dequeue(); + expect(queue.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(queue.isEmpty()).to.equal(true); + queue.enqueue(1); + expect(queue.isEmpty()).to.equal(false); + queue.enqueue(2); + expect(queue.isEmpty()).to.equal(false); + queue.enqueue(3); + expect(queue.isEmpty()).to.equal(false); + + queue.clear(); + expect(queue.isEmpty()).to.equal(true); + + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + expect(queue.isEmpty()).to.equal(false); + + queue.dequeue(); + expect(queue.isEmpty()).to.equal(false); + queue.dequeue(); + expect(queue.isEmpty()).to.equal(false); + queue.dequeue(); + expect(queue.isEmpty()).to.equal(true); + queue.dequeue(); + expect(queue.isEmpty()).to.equal(true); + }); + + it('clears the queue', () => { + queue.clear(); + expect(queue.isEmpty()).to.equal(true); + + queue.enqueue(1); + queue.enqueue(2); + expect(queue.isEmpty()).to.equal(false); + + queue.clear(); + expect(queue.isEmpty()).to.equal(true); + }); + + it('returns toString primitive types', () => { + expect(queue.toString()).to.equal(''); + + queue.enqueue(1); + expect(queue.toString()).to.equal('1'); + + queue.enqueue(2); + expect(queue.toString()).to.equal('1,2'); + + queue.clear(); + expect(queue.toString()).to.equal(''); + + const queueString = new Queue(); + queueString.enqueue('el1'); + expect(queueString.toString()).to.equal('el1'); + + queueString.enqueue('el2'); + expect(queueString.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + class MyObj { + constructor(public el1: any, public el2: any) {} + toString() { + return `${this.el1.toString()}|${this.el2.toString()}`; + } + } + const queueMyObj = new Queue(); + expect(queueMyObj.toString()).to.equal(''); + + queueMyObj.enqueue(new MyObj(1, 2)); + expect(queueMyObj.toString()).to.equal('1|2'); + + queueMyObj.enqueue(new MyObj(3, 4)); + expect(queueMyObj.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/ts/data-structures/stack.spec.ts b/test/ts/data-structures/stack.spec.ts index 54770f3f..f1cc8a61 100644 --- a/test/ts/data-structures/stack.spec.ts +++ b/test/ts/data-structures/stack.spec.ts @@ -47,7 +47,7 @@ describe('Stack', () => { expect(stack.pop()).to.equal(undefined); }); - it('allows to peek at the top element in he stack without popping it', () => { + it('allows to peek at the top element in the stack without popping it', () => { expect(stack.peek()).to.equal(undefined); stack.push(1); diff --git a/test/ts/others/hot-potato.spec.ts b/test/ts/others/hot-potato.spec.ts new file mode 100644 index 00000000..7ac9b827 --- /dev/null +++ b/test/ts/others/hot-potato.spec.ts @@ -0,0 +1,16 @@ +import { hotPotato } from '../../../src/ts/others/hot-potato'; +import 'mocha'; +import { expect } from 'chai'; + +describe('Hot Potato with Queue', () => { + + it('Hot potato game', () => { + const names = ['John', 'Jack', 'Camila', 'Ingrid', 'Carl']; + expect(hotPotato(names, 6).winner).to.equal('Ingrid'); + expect(hotPotato(names, 7).winner).to.equal('John'); + expect(hotPotato(names, 8).winner).to.equal('Jack'); + expect(hotPotato(names, 9).winner).to.equal('Ingrid'); + expect(hotPotato(names, 10).winner).to.equal('Carl'); + }); + +}); diff --git a/test/ts/others/palindrome-checker.spec.ts b/test/ts/others/palindrome-checker.spec.ts new file mode 100644 index 00000000..82451113 --- /dev/null +++ b/test/ts/others/palindrome-checker.spec.ts @@ -0,0 +1,20 @@ +import 'mocha'; +import { expect } from 'chai'; +import { palindromeChecker } from '../../../src/ts/others/palindrome-checker'; + +describe('Palindrome', () => { + + it('Palindrome Checker', () => { + expect(palindromeChecker('')).to.equal(false); + expect(palindromeChecker('a')).to.equal(true); + expect(palindromeChecker('aa')).to.equal(true); + expect(palindromeChecker('aba')).to.equal(true); + expect(palindromeChecker('ab')).to.equal(false); + expect(palindromeChecker('kayak')).to.equal(true); + expect(palindromeChecker('radar')).to.equal(true); + expect(palindromeChecker('level')).to.equal(true); + expect(palindromeChecker('Was it a car or a cat I saw')).to.equal(true); + expect(palindromeChecker('Step on no pets')).to.equal(true); + expect(palindromeChecker('Able was I ere I saw Elba')).to.equal(true); + }); +}); From 2414e5f823634daddac93c3bfac4cce8441dfa3b Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Oct 2017 15:05:58 -0300 Subject: [PATCH 007/188] chapter 04: [Queues and Deques] --- examples/chapter04/01-Queue.js | 4 ++-- examples/chapter04/02-Deque.js | 4 ++-- src/js/data-structures/queue.js | 2 +- src/ts/data-structures/queue.ts | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/chapter04/01-Queue.js b/examples/chapter04/01-Queue.js index 9c8be0be..852a1b4d 100755 --- a/examples/chapter04/01-Queue.js +++ b/examples/chapter04/01-Queue.js @@ -9,6 +9,6 @@ queue.enqueue('Camila'); console.log(queue.toString()); // John,Jack,Camila console.log(queue.size()); // outputs 3 console.log(queue.isEmpty()); // outputs false -queue.dequeue(); -queue.dequeue(); +queue.dequeue(); // remove John +queue.dequeue(); // remove Jack console.log(queue.toString()); // Camila diff --git a/examples/chapter04/02-Deque.js b/examples/chapter04/02-Deque.js index e4e12bb6..4c84b6de 100755 --- a/examples/chapter04/02-Deque.js +++ b/examples/chapter04/02-Deque.js @@ -9,9 +9,9 @@ deque.addBack('Camila'); console.log(deque.toString()); // John,Jack,Camila console.log(deque.size()); // outputs 3 console.log(deque.isEmpty()); // outputs false -deque.removeFront(); +deque.removeFront(); // remove John console.log(deque.toString()); // Jack,Camila deque.removeBack(); // Camila decides to leave console.log(deque.toString()); // Jack -deque.addFront('John'); +deque.addFront('John'); // John comes back for information console.log(deque.toString()); // John,Jack diff --git a/src/js/data-structures/queue.js b/src/js/data-structures/queue.js index 8f6c59fd..6c879004 100644 --- a/src/js/data-structures/queue.js +++ b/src/js/data-structures/queue.js @@ -30,7 +30,7 @@ export default class Queue { } isEmpty() { - return this.count - this.lowestCount === 0; + return this.size() === 0; } clear() { diff --git a/src/ts/data-structures/queue.ts b/src/ts/data-structures/queue.ts index 8708c0f3..b6db45a5 100644 --- a/src/ts/data-structures/queue.ts +++ b/src/ts/data-structures/queue.ts @@ -32,7 +32,7 @@ export default class Queue { } isEmpty() { - return this.count - this.lowestCount === 0; + return this.size() === 0; } clear() { From bacfd561141d4f7b3b4e53c4df55d58ca07d53ff Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 14 Oct 2017 18:09:07 -0300 Subject: [PATCH 008/188] chapter 05: [LinkedLists] --- .vscode/settings.json | 3 + README.md | 1 + examples/PacktDataStructuresAlgorithms.min.js | 2 +- package.json | 12 +- .../data-structures/circular-linked-list.ts | 166 +++++++ src/ts/data-structures/doubly-linked-list.ts | 198 +++++++++ src/ts/data-structures/linked-list.ts | 136 ++++++ .../models/linked-list-models.ts | 13 + src/ts/index.ts | 16 +- src/ts/util.ts | 6 + .../circular-linked-list.spec.ts | 342 +++++++++++++++ .../doubly-linked-list.spec.ts | 406 ++++++++++++++++++ test/ts/data-structures/linked-list.spec.ts | 330 ++++++++++++++ test/ts/data-structures/my-obj.ts | 7 + 14 files changed, 1625 insertions(+), 13 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/ts/data-structures/circular-linked-list.ts create mode 100644 src/ts/data-structures/doubly-linked-list.ts create mode 100644 src/ts/data-structures/linked-list.ts create mode 100644 src/ts/data-structures/models/linked-list-models.ts create mode 100644 test/ts/data-structures/circular-linked-list.spec.ts create mode 100644 test/ts/data-structures/doubly-linked-list.spec.ts create mode 100644 test/ts/data-structures/linked-list.spec.ts create mode 100644 test/ts/data-structures/my-obj.ts diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..55712c19 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib" +} \ No newline at end of file diff --git a/README.md b/README.md index 6ff78b35..a403c52b 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ Work in Progress. * 02: [Arrays](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter02) * 03: [Stacks](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter03) * 04: [Queues and Deques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter04) +* 05: [LinkedLists](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter05) ## Thrid Edition Updates diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index 8fabf6e5..a17768ec 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(t,e,n){var i,o,u;!function(n,r){o=[t,e],i=r,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e1;){for(var r=0;r1&&o;)u=e.removeFront(),r=e.removeBack(),u!==r&&(o=!1);return o}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(r,s){o=[e,n(0)],i=s,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t){for(var e=new o.default,n=t,i=void 0,u="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)u+=e.pop().toString();return u}function i(t,e){var n=new o.default,i=t,u=void 0,r="";if(!(e>=2&&e<=36))return"";for(;i>0;)u=Math.floor(i%e),n.push(u),i=Math.floor(i/e);for(;!n.isEmpty();)r+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return r}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(n,r){o=[t,e],i=r,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?u=!1:(a=e.pop(),n.indexOf(a)!==o.indexOf(s)&&(u=!1)),r++;return!(!u||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(r,s){o=[e,n(0)],i=s,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e,i,o,u,r,s){var a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){o.push(e.pop());var c={};c[u]=e.toString(),c[r]=i.toString(),c[s]=o.toString(),a.push(c)}else{n(t-1,e,o,i,u,s,r,a),o.push(e.pop());var f={};f[u]=e.toString(),f[r]=i.toString(),f[s]=o.toString(),a.push(f),n(t-1,i,e,o,r,u,s,a)}return a}function i(t){for(var e=new u.default,i=new u.default,o=new u.default,r=t;r>0;r--)e.push(r);return n(t,e,o,i,"source","helper","dest")}function o(t,e,n,i){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?u:(1===t?u.push([e,i]):(o(t-1,e,i,n,u),u.push([e,i]),o(t-1,n,e,i,u)),u)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=o;var u=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(t,e,n){var i,o,u;!function(n,r){o=[t,e],i=r,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e1;){for(var r=0;r1&&o;)u=e.removeFront(),r=e.removeBack(),u!==r&&(o=!1);return o}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(r,s){o=[e,n(0)],i=s,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t){for(var e=new o.default,n=t,i=void 0,u="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)u+=e.pop().toString();return u}function i(t,e){var n=new o.default,i=t,u=void 0,r="";if(!(e>=2&&e<=36))return"";for(;i>0;)u=Math.floor(i%e),n.push(u),i=Math.floor(i/e);for(;!n.isEmpty();)r+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return r}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(n,r){o=[t,e],i=r,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?u=!1:(a=e.pop(),n.indexOf(a)!==o.indexOf(s)&&(u=!1)),r++;return!(!u||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(r,s){o=[e,n(0)],i=s,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e,i,o,u,r,s){var a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){o.push(e.pop());var c={};c[u]=e.toString(),c[r]=i.toString(),c[s]=o.toString(),a.push(c)}else{n(t-1,e,o,i,u,s,r,a),o.push(e.pop());var f={};f[u]=e.toString(),f[r]=i.toString(),f[s]=o.toString(),a.push(f),n(t-1,i,e,o,r,u,s,a)}return a}function i(t){for(var e=new u.default,i=new u.default,o=new u.default,r=t;r>0;r--)e.push(r);return n(t,e,o,i,"source","helper","dest")}function o(t,e,n,i){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?u:(1===t?u.push([e,i]):(o(t-1,e,i,n,u),u.push([e,i]),o(t-1,n,e,i,u)),u)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=o;var u=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file diff --git a/package.json b/package.json index e4362713..06d90698 100644 --- a/package.json +++ b/package.json @@ -55,24 +55,24 @@ "@types/mocha": "^2.2.42", "babel-cli": "^6.26.0", "babel-core": "^6.26.0", - "babel-eslint": "^8.0.0", + "babel-eslint": "^8.0.1", "babel-loader": "^7.1.2", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-es2015-modules-umd": "^6.24.1", "babel-preset-env": "^1.6.0", "chai": "^4.1.2", "codecov": "^2.3.0", - "eslint": "^4.6.1", - "eslint-config-airbnb-base": "^12.0.0", + "eslint": "^4.8.0", + "eslint-config-airbnb-base": "^12.0.2", "eslint-plugin-import": "^2.7.0", "istanbul": "^v1.1.0-alpha.1", - "mocha": "^3.5.0", + "mocha": "^4.0.1", "mochawesome": "^2.3.1", "nyc": "^11.2.1", "ts-node": "^3.3.0", "tslint": "^5.7.0", - "typescript": "^2.5.2", - "webpack": "^3.6.0", + "typescript": "^2.6.0-dev.20171014", + "webpack": "^3.7.1", "yargs": "^9.0.1" } } diff --git a/src/ts/data-structures/circular-linked-list.ts b/src/ts/data-structures/circular-linked-list.ts new file mode 100644 index 00000000..c3f4a1f2 --- /dev/null +++ b/src/ts/data-structures/circular-linked-list.ts @@ -0,0 +1,166 @@ +import { defaultEquals, IEqualsFunction } from '../util'; +import { Node } from './models/linked-list-models'; + +export default class CircularLinkedList { + private count = 0; + private head: Node | undefined; + + constructor(private equalsFn: IEqualsFunction = defaultEquals) { } + + private getLastElement() { + let current = this.head; + for (let i = 2; i <= this.size() && current; i++) { + current = current.next; + } + return current; + } + + push(element: T) { + const node = new Node(element); + let current; + + if (this.head === undefined || this.head === null) { + this.head = node; + } else { + current = this.getLastElement(); + if (current) { + current.next = node; + } + } + + // set node.next to head - to have circular list + node.next = this.head; + + this.count++; + } + + getElementAt(index: number) { + if (index >= 0 && index <= this.count) { + let node = this.head; + for (let i = 0; i < index; i++) { + if (node) { + node = node.next; + } + } + return node; + } + return undefined; + } + + insert(index: number, element: T) { + if (index >= 0 && index <= this.count) { + const node = new Node(element); + let current = this.head; + + if (index === 0) { + if (!this.head) { + // if no node in list + this.head = node; + node.next = this.head; + } else { + node.next = current; + current = this.getLastElement(); + // update last element + this.head = node; + if (current) { + current.next = this.head; + } + } + } else { + const previous = this.getElementAt(index - 1); + if (previous) { + node.next = previous.next; + previous.next = node; + } + } + this.count++; + return true; + } + return false; + } + + removeAt(index: number) { + if (index >= 0 && index < this.count) { + let current = this.head; + + if (index === 0) { + const removed = this.head; + + if (this.size() === 1) { + this.head = undefined; + } else { + current = this.getLastElement(); + if (this.head) { + this.head = this.head.next; + } + if (current) { + current.next = this.head; + } + current = removed; + } + } else { + // no need to update last element for circular list + const previous = this.getElementAt(index - 1); + if (previous) { + current = previous.next; + if (current) { + previous.next = current.next; + } + } + } + if (current) { + this.count--; + return current.element; + } + } + return undefined; + } + + remove(element: T) { + const index = this.indexOf(element); + return this.removeAt(index); + } + + indexOf(element: T) { + let current = this.head; + + for (let i = 1; i <= this.size() && current; i++) { + if (this.equalsFn(element, current.element)) { + return i - 1; + } + current = current.next; + } + + return -1; + } + + isEmpty() { + return this.size() === 0; + } + + size() { + return this.count; + } + + getHead() { + return this.head; + } + + clear() { + this.head = undefined; + this.count = 0; + } + + toString() { + if (this.head === undefined) { + return ''; + } + let objString = `${this.head.element}`; + let current = this.head.next; + for (let i = 2; i <= this.size() && current; i++) { + objString = `${objString},${current.element}`; + current = current.next; + } + return objString; + } +} diff --git a/src/ts/data-structures/doubly-linked-list.ts b/src/ts/data-structures/doubly-linked-list.ts new file mode 100644 index 00000000..7e181638 --- /dev/null +++ b/src/ts/data-structures/doubly-linked-list.ts @@ -0,0 +1,198 @@ +import { defaultEquals, IEqualsFunction } from '../util'; +import { DoublyNode } from './models/linked-list-models'; + +export default class DoublyLinkedList { + private count = 0; + private head: DoublyNode | undefined; + private tail: DoublyNode | undefined; + + constructor(private equalsFn: IEqualsFunction = defaultEquals) { } + + push(element: T) { + const node = new DoublyNode(element); + + if (this.head === undefined || this.head === null) { + this.head = node; + this.tail = node; // NEW + } else { + // attach to the tail node // NEW + if (this.tail !== undefined && this.tail !== null) { + this.tail.next = node; + node.prev = this.tail; + this.tail = node; + } + } + this.count++; + } + + getElementAt(index: number) { + if (index >= 0 && index <= this.count) { + let node = this.head; + for (let i = 0; i < index; i++) { + if (node) { + node = node.next; + } + } + return node; + } + return undefined; + } + + insert(index: number, element: T) { + if (index >= 0 && index <= this.count) { + const node = new DoublyNode(element); + let current = this.head; + + if (index === 0) { + if (this.head === undefined || this.head === null) { + // NEW + this.head = node; + this.tail = node; + } else { + node.next = this.head; + this.head.prev = node; // NEW + this.head = node; + } + } else if (index === this.count) { + // last item // NEW + + current = this.tail; // {2} + if (current) { + current.next = node; + node.prev = current; + this.tail = node; + } + } else { + const previous = this.getElementAt(index - 1); + if (previous) { + current = previous.next; + node.next = current; + previous.next = node; + + if (current) { + current.prev = node; // NEW + node.prev = previous; // NEW + } + } + } + this.count++; + return true; + } + return false; + } + + removeAt(index: number) { + if (index >= 0 && index < this.count) { + let current = this.head; + + if (index === 0) { + if (this.head) { + this.head = this.head.next; // {1} + // if there is only one item, then we update tail as well //NEW + if (this.count === 1) { + // {2} + this.tail = undefined; + } else { + if (this.head) { + this.head.prev = undefined; // {3} + } + } + } + } else if (index === this.count - 1) { + // last item //NEW + current = this.tail; // {4} + if (current) { + this.tail = current.prev; + if (this.tail) { + this.tail.next = undefined; + } + } + } else { + current = this.getElementAt(index); + if (current) { + const previous = current.prev; + if (previous) { + // link previous with current's next - skip it to remove + previous.next = current.next; // {6} + if (current && current.next) { + current.next.prev = previous; // NEW + } + } + } + } + if (current) { + this.count--; + return current.element; + } + } + return undefined; + } + + remove(element: T) { + const index = this.indexOf(element); + return this.removeAt(index); + } + + indexOf(element: T) { + let current = this.head; + let index = 0; + + while (current) { + if (this.equalsFn(element, current.element)) { + return index; + } + index++; + current = current.next; + } + + return -1; + } + + getHead() { + return this.head; + } + + getTail() { + return this.tail; + } + + isEmpty() { + return this.size() === 0; + } + + clear() { + this.head = undefined; + this.tail = undefined; + this.count = 0; + } + + size() { + return this.count; + } + + toString() { + if (this.head === undefined) { + return ''; + } + let objString = `${this.head.element}`; + let current: DoublyNode | undefined = this.head.next; + while (current) { + objString = `${objString},${current.element}`; + current = current.next; + } + return objString; + } + + inverseToString() { + if (this.tail === undefined) { + return ''; + } + let objString = `${this.tail.element}`; + let previous: DoublyNode | undefined = this.tail.prev; + while (previous) { + objString = `${objString},${previous.element}`; + previous = previous.prev; + } + return objString; + } +} diff --git a/src/ts/data-structures/linked-list.ts b/src/ts/data-structures/linked-list.ts new file mode 100644 index 00000000..c2c49a78 --- /dev/null +++ b/src/ts/data-structures/linked-list.ts @@ -0,0 +1,136 @@ +import { defaultEquals, IEqualsFunction } from '../util'; +import { Node } from './models/linked-list-models'; + +export default class LinkedList { + private count = 0; + private head: Node | undefined; + + constructor(private equalsFn: IEqualsFunction = defaultEquals) { } + + push(element: T) { + const node = new Node(element); + let current; + + if (this.head === undefined || this.head === null) { + this.head = node; + } else { + current = this.head; + + while (current.next) { + current = current.next; + } + + current.next = node; + } + this.count++; + } + + getElementAt(index: number) { + if (index >= 0 && index <= this.count) { + let node = this.head; + for (let i = 0; i < index; i++) { + if (node) { + node = node.next; + } + } + return node; + } + return undefined; + } + + insert(index: number, element: T) { + if (index >= 0 && index <= this.count) { + const node = new Node(element); + const current = this.head; + + if (index === 0) { + node.next = current; + this.head = node; + } else { + const previous = this.getElementAt(index - 1); + if (previous) { + node.next = previous.next; + previous.next = node; + } + } + this.count++; + return true; + } + return false; + } + + removeAt(index: number) { + if (index >= 0 && index < this.count) { + let current = this.head; + + if (index === 0) { + if (this.head) { + this.head = this.head.next; + } + } else { + const previous = this.getElementAt(index - 1); + if (previous) { + current = previous.next; + if (current) { + previous.next = current.next; + } + } + } + if (current) { + this.count--; + return current.element; + } + } + return undefined; + } + + remove(element: T) { + const index = this.indexOf(element); + return this.removeAt(index); + } + + indexOf(element: T) { + let current = this.head; + let index = 0; + + while (current) { + if (this.equalsFn(element, current.element)) { + return index; + } + index++; + current = current.next; + } + + return -1; + } + + isEmpty() { + return this.size() === 0; + } + + size() { + return this.count; + } + + getHead() { + return this.head; + } + + clear() { + this.head = undefined; + this.count = 0; + } + + toString() { + if (this.head === undefined) { + return ''; + } + let objString = `${this.head.element}`; + let current: Node | undefined = this.head.next; + while (current) { + objString = `${objString},${current.element}`; + current = current.next; + } + return objString; + } +} diff --git a/src/ts/data-structures/models/linked-list-models.ts b/src/ts/data-structures/models/linked-list-models.ts new file mode 100644 index 00000000..168d640e --- /dev/null +++ b/src/ts/data-structures/models/linked-list-models.ts @@ -0,0 +1,13 @@ +export class Node { + constructor(public element: T, public next?: Node) {} +} + +export class DoublyNode extends Node { + constructor( + public element: T, + public next?: DoublyNode, + public prev?: DoublyNode + ) { + super(element, next); + } +} diff --git a/src/ts/index.ts b/src/ts/index.ts index c97e44b7..d0863cf2 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -1,4 +1,11 @@ -import { hotPotato } from './others/hot-potato'; +export { default as CircularLinkedList } from './data-structures/circular-linked-list'; +export { default as DoublyLinkedList } from './data-structures/doubly-linked-list'; +export { default as LinkedList } from './data-structures/linked-list'; + +import * as _util from './util'; +export const util = _util; + +/* import { hotPotato } from './others/hot-potato'; import { palindromeChecker } from './others/palindrome-checker'; import Deque from './data-structures/deque'; import Queue from './data-structures/queue'; @@ -7,7 +14,7 @@ import { baseConverter, decimalToBinary } from './others/base-converter'; import StackArray from './data-structures/stack-array'; import Stack from './data-structures/stack'; import { parenthesesChecker } from './others/balanced-symbols'; -import { Compare, defaultCompare, ICompareFunction } from './util'; + export { Stack, @@ -17,11 +24,8 @@ export { decimalToBinary, hanoi, hanoiStack, - ICompareFunction, - defaultCompare, - Compare, Queue, Deque, hotPotato, palindromeChecker -}; +}; */ diff --git a/src/ts/util.ts b/src/ts/util.ts index 13cb876c..d88f4efa 100644 --- a/src/ts/util.ts +++ b/src/ts/util.ts @@ -1,5 +1,7 @@ export type ICompareFunction = (a: T, b: T) => number; +export type IEqualsFunction = (a: T, b: T) => boolean; + export enum Compare { LESS_THAN = -1, BIGGER_THAN = 1 @@ -11,3 +13,7 @@ export function defaultCompare(a: T, b: T): number { } return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN; } + +export function defaultEquals(a: T, b: T): boolean { + return a === b; +} diff --git a/test/ts/data-structures/circular-linked-list.spec.ts b/test/ts/data-structures/circular-linked-list.spec.ts new file mode 100644 index 00000000..78570be8 --- /dev/null +++ b/test/ts/data-structures/circular-linked-list.spec.ts @@ -0,0 +1,342 @@ +import 'mocha'; +import { expect } from 'chai'; +import { CircularLinkedList } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('CircularLinkedList', () => { + let list: CircularLinkedList; + let min: number; + let max: number; + + beforeEach(function() { + list = new CircularLinkedList(); + min = 1; + max = 3; + }); + + function pushesElements() { + for (let i = min; i <= max; i++) { + list.push(i); + } + } + + function verifyList() { + let current = list.getHead(); + for (let i = min; i <= max && current; i++) { + expect(current).to.not.be.an('undefined'); + if (current) { + // TS strictNullChecks + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(i); + if (i < max) { + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + // TS strictNullChecks + expect(current.next.element).to.equal(i + 1); + } + } else { + // circular list + expect(current.next).to.not.be.an('undefined'); + expect(current.next).to.equal(list.getHead()); + if (current.next) { + expect(current.next.element).to.equal(min); + } + } + current = current.next; + } + } + } + + it('starts empty', () => { + expect(list.size()).to.equal(0); + expect(list.isEmpty()).to.equal(true); + expect(list.getHead()).to.be.an('undefined'); + }); + + it('pushes elements', () => { + pushesElements(); + verifyList(); + }); + + it('returns element at specific index: invalid position', () => { + // list is empty + expect(list.getElementAt(3)).to.be.an('undefined'); + }); + + it('returns element at specific index', () => { + let node; + + pushesElements(); + + for (let i = min; i <= max; i++) { + node = list.getElementAt(i - 1); + expect(node).to.not.be.an('undefined'); + if (node) { + expect(node.element).to.equal(i); + } + } + }); + + it('inserts elements first position empty list', () => { + const element = 1; + max = element; + expect(list.insert(0, element)).to.equal(true); + verifyList(); + }); + + it('inserts elements first position not empty list', () => { + max = 2; + expect(list.insert(0, max)).to.equal(true); + + expect(list.insert(0, min)).to.equal(true); + + verifyList(); + }); + + it('inserts elements invalid position empty list', () => { + expect(list.insert(1, 1)).to.equal(false); + }); + + it('inserts elements invalid position not empty list', () => { + const element = 1; + expect(list.insert(0, element)).to.equal(true); + expect(list.insert(2, element)).to.equal(false); + }); + + it('inserts elements in the middle of list', () => { + expect(list.insert(0, 3)).to.equal(true); + expect(list.insert(0, 1)).to.equal(true); + expect(list.insert(1, 2)).to.equal(true); + verifyList(); + }); + + it('inserts elements at the end of list', () => { + max = 5; + + for (let i = min; i <= max; i++) { + expect(list.insert(i - 1, i)).to.equal(true); + } + + verifyList(); + }); + + it('returns index of elements', () => { + let index; + + pushesElements(); + + for (let i = min; i <= max; i++) { + index = list.indexOf(i); + expect(index).to.equal(i - 1); + } + + expect(list.indexOf(max + 2)).to.equal(-1); + }); + + it('removes valid elements', () => { + let element; + + pushesElements(); + + const minIndex = min; + for (let i = minIndex; i <= max; i++) { + element = list.remove(i); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + min++; + verifyList(); + } + }); + + it('removes invalid elements', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.remove(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position empty list', () => { + let element; + + for (let i = min; i <= max; i++) { + element = list.removeAt(i - 1); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position not empty list', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.removeAt(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes first element list single element', () => { + const value = 1; + list.push(value); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(value); + + expect(list.getHead()).to.be.an('undefined'); + expect(list.isEmpty()).to.equal(true); + }); + + it('removes first element list multiple elements', () => { + pushesElements(); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(min); + + min = 2; + verifyList(); + }); + + it('removes element from middle of list', () => { + pushesElements(); // 1, 2, 3 + + const element = list.removeAt(1); // element 2 + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(2); + + // list needs to be [1, 3] + let current = list.getHead(); + + // element 1 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(min); + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + expect(current.next.element).to.equal(max); + current = current.next; + } + } + + // element 3 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(max); + expect(current.next).to.not.be.an('undefined'); + expect(current.next).to.equal(list.getHead()); + if (current.next) { + expect(current.next.element).to.equal(min); + } + } + }); + + it('removes element from end of list', () => { + let element; + + pushesElements(); + + const maxIndex = max; + for (let i = max; i >= min; i--) { + element = list.removeAt(i - 1); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + max--; + verifyList(); + } + }); + + it('returns the head of the list', () => { + expect(list.getHead()).to.be.an('undefined'); + + list.push(1); + expect(list.getHead()).to.not.be.an('undefined'); + }); + + it('returns the correct size', () => { + expect(list.size()).to.equal(0); + + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.size()).to.equal(i); + } + + const size = max; + for (let i = min; i <= max; i++) { + list.remove(i); + expect(list.size()).to.equal(size - i); + } + + expect(list.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(list.isEmpty()).to.equal(true); + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.isEmpty()).to.equal(false); + } + + for (let i = min; i < max; i++) { + list.remove(i); + expect(list.isEmpty()).to.equal(false); + } + list.remove(max); + expect(list.isEmpty()).to.equal(true); + + pushesElements(); + expect(list.isEmpty()).to.equal(false); + + list.clear(); + expect(list.isEmpty()).to.equal(true); + }); + + it('clears the list', () => { + expect(list.size()).to.equal(0); + list.clear(); + expect(list.size()).to.equal(0); + pushesElements(); + expect(list.size()).to.greaterThan(0); + list.clear(); + expect(list.size()).to.equal(0); + }); + + it('returns toString primitive types', () => { + expect(list.toString()).to.equal(''); + + list.push(1); + expect(list.toString()).to.equal('1'); + + list.push(2); + expect(list.toString()).to.equal('1,2'); + + list.clear(); + expect(list.toString()).to.equal(''); + }); + + it('returns toString primitive types: string', () => { + const ds = new CircularLinkedList(); + ds.push('el1'); + expect(ds.toString()).to.equal('el1'); + + ds.push('el2'); + expect(ds.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + const ds = new CircularLinkedList(); + expect(ds.toString()).to.equal(''); + + ds.push(new MyObj(1, 2)); + expect(ds.toString()).to.equal('1|2'); + + ds.push(new MyObj(3, 4)); + expect(ds.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/ts/data-structures/doubly-linked-list.spec.ts b/test/ts/data-structures/doubly-linked-list.spec.ts new file mode 100644 index 00000000..1c53dfbe --- /dev/null +++ b/test/ts/data-structures/doubly-linked-list.spec.ts @@ -0,0 +1,406 @@ +import 'mocha'; +import { expect } from 'chai'; +import { DoublyLinkedList } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('DoublyLinkedList', () => { + let list: DoublyLinkedList; + let min: number; + let max: number; + + beforeEach(function() { + list = new DoublyLinkedList(); + min = 1; + max = 3; + }); + + function pushesElements() { + for (let i = min; i <= max; i++) { + list.push(i); + } + } + + function verifyNode(current: any, i: number) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(i); + + // verify next node + if (i < max) { + expect(current.next).to.not.be.an('undefined'); + // TS strictNullChecks + if (current.next) { + expect(current.next.element).to.equal(i + 1); + } + } else { + expect(current.next).to.be.an('undefined'); + } + + // verify previous node + if (i > min) { + expect(current.prev).to.not.be.an('undefined'); + if (current.prev) { + expect(current.prev.element).to.equal(i - 1); + } + } else { + expect(current.prev).to.be.an('undefined'); + } + } + + function verifyList() { + let current = list.getHead(); + for (let i = min; i <= max; i++) { + expect(current).to.not.be.an('undefined'); + // TS strictNullChecks + if (current) { + verifyNode(current, i); + current = current.next; + } + } + verifyListFromTail(); + } + + function verifyListFromTail() { + let current = list.getTail(); + for (let i = max; i >= min; i--) { + expect(current).to.not.be.an('undefined'); + // TS strictNullChecks + if (current) { + verifyNode(current, i); + current = current.prev; + } + } + } + + it('starts empty', () => { + expect(list.size()).to.equal(0); + expect(list.isEmpty()).to.equal(true); + expect(list.getHead()).to.be.an('undefined'); + expect(list.getTail()).to.be.an('undefined'); + }); + + it('pushes elements', () => { + pushesElements(); + verifyList(); + }); + + it('returns element at specific index: invalid position', () => { + // list is empty + expect(list.getElementAt(3)).to.be.an('undefined'); + }); + + it('returns element at specific index', () => { + let node; + + pushesElements(); + + for (let i = min; i <= max; i++) { + node = list.getElementAt(i - 1); + expect(node).to.not.be.an('undefined'); + if (node) { + expect(node.element).to.equal(i); + } + } + }); + + it('inserts elements first position empty list', () => { + const element = 1; + max = element; + expect(list.insert(0, element)).to.equal(true); + verifyList(); + }); + + it('inserts elements first position not empty list', () => { + max = 2; + expect(list.insert(0, max)).to.equal(true); + + expect(list.insert(0, min)).to.equal(true); + + verifyList(); + }); + + it('inserts elements invalid position empty list', () => { + expect(list.insert(1, 1)).to.equal(false); + }); + + it('inserts elements invalid position not empty list', () => { + const element = 1; + expect(list.insert(0, element)).to.equal(true); + expect(list.insert(2, element)).to.equal(false); + }); + + it('inserts elements at the end of list', () => { + max = 5; + + for (let i = min; i <= max; i++) { + expect(list.insert(i - 1, i)).to.equal(true); + } + + verifyList(); + }); + + it('inserts elements in the middle of list', () => { + expect(list.insert(0, 3)).to.equal(true); + expect(list.insert(0, 1)).to.equal(true); + expect(list.insert(1, 2)).to.equal(true); + verifyList(); + }); + + it('returns index of elements', () => { + let index; + + pushesElements(); + + for (let i = min; i <= max; i++) { + index = list.indexOf(i); + expect(index).to.equal(i - 1); + } + + expect(list.indexOf(max + 2)).to.equal(-1); + }); + + it('removes invalid elements', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.remove(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes valid elements', () => { + let element; + + pushesElements(); + + for (let i = min; i <= max; i++) { + element = list.remove(i); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + } + }); + + it('removes element invalid position empty list', () => { + let element; + + for (let i = min; i <= max; i++) { + element = list.removeAt(i - 1); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position not empty list', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.removeAt(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes first element list single element', () => { + const value = 1; + list.push(value); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(value); + + expect(list.getHead()).to.be.an('undefined'); + expect(list.getTail()).to.be.an('undefined'); + expect(list.isEmpty()).to.equal(true); + }); + + it('removes first element list multiple elements', () => { + pushesElements(); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(min); + + min = 2; + verifyList(); + }); + + it('removes element from end of list', () => { + let element; + + pushesElements(); + + const maxIndex = max; + for (let i = max; i >= min; i--) { + element = list.removeAt(i - 1); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + max--; + verifyList(); + } + }); + + it('removes element from middle of list', () => { + pushesElements(); // 1, 2, 3 + + const element = list.removeAt(1); // element 2 + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(2); + + // list needs to be [1, 3] + let current = list.getHead(); + + // element 1 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(1); + expect(current.prev).to.be.an('undefined'); + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + expect(current.next.element).to.equal(3); + current = current.next; + } + } + + // element 3 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(3); + expect(current.next).to.be.an('undefined'); + expect(current.prev).to.not.be.an('undefined'); + if (current.prev) { + expect(current.prev.element).to.equal(1); + } + } + }); + + it('returns the head of the list', () => { + expect(list.getHead()).to.be.an('undefined'); + + list.push(1); + expect(list.getHead()).to.not.be.an('undefined'); + }); + + it('returns the tail of the list', () => { + expect(list.getTail()).to.be.an('undefined'); + + list.push(1); + expect(list.getTail()).to.not.be.an('undefined'); + }); + + it('returns the correct size', () => { + expect(list.size()).to.equal(0); + + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.size()).to.equal(i); + } + + const size = max; + for (let i = min; i <= max; i++) { + list.remove(i); + expect(list.size()).to.equal(size - i); + } + + expect(list.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(list.isEmpty()).to.equal(true); + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.isEmpty()).to.equal(false); + } + + for (let i = min; i < max; i++) { + list.remove(i); + expect(list.isEmpty()).to.equal(false); + } + list.remove(max); + expect(list.isEmpty()).to.equal(true); + + pushesElements(); + expect(list.isEmpty()).to.equal(false); + + list.clear(); + expect(list.isEmpty()).to.equal(true); + }); + + it('clears the list', () => { + expect(list.size()).to.equal(0); + list.clear(); + expect(list.size()).to.equal(0); + pushesElements(); + expect(list.size()).to.greaterThan(0); + list.clear(); + expect(list.size()).to.equal(0); + }); + + it('returns toString primitive types', () => { + expect(list.toString()).to.equal(''); + + list.push(1); + expect(list.toString()).to.equal('1'); + + list.push(2); + expect(list.toString()).to.equal('1,2'); + + list.clear(); + expect(list.toString()).to.equal(''); + }); + + it('returns toString primitive types: string', () => { + const ds = new DoublyLinkedList(); + ds.push('el1'); + expect(ds.toString()).to.equal('el1'); + + ds.push('el2'); + expect(ds.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + const ds = new DoublyLinkedList(); + expect(ds.toString()).to.equal(''); + + ds.push(new MyObj(1, 2)); + expect(ds.toString()).to.equal('1|2'); + + ds.push(new MyObj(3, 4)); + expect(ds.toString()).to.equal('1|2,3|4'); + }); + + it('returns inverseToString primitive types', () => { + expect(list.inverseToString()).to.equal(''); + + list.push(1); + expect(list.inverseToString()).to.equal('1'); + + list.push(2); + expect(list.inverseToString()).to.equal('2,1'); + + list.clear(); + expect(list.inverseToString()).to.equal(''); + }); + + it('returns inverseToString primitive types: string', () => { + const ds = new DoublyLinkedList(); + ds.push('el1'); + expect(ds.inverseToString()).to.equal('el1'); + + ds.push('el2'); + expect(ds.inverseToString()).to.equal('el2,el1'); + }); + + it('returns inverseToString objects', () => { + const ds = new DoublyLinkedList(); + expect(ds.inverseToString()).to.equal(''); + + ds.push(new MyObj(1, 2)); + expect(ds.inverseToString()).to.equal('1|2'); + + ds.push(new MyObj(3, 4)); + expect(ds.inverseToString()).to.equal('3|4,1|2'); + }); +}); diff --git a/test/ts/data-structures/linked-list.spec.ts b/test/ts/data-structures/linked-list.spec.ts new file mode 100644 index 00000000..96031571 --- /dev/null +++ b/test/ts/data-structures/linked-list.spec.ts @@ -0,0 +1,330 @@ +import 'mocha'; +import { expect } from 'chai'; +import { LinkedList, util } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('LinkedList', () => { + let list: LinkedList; + let min: number; + let max: number; + + beforeEach(function() { + list = new LinkedList(util.defaultEquals); + min = 1; + max = 3; + }); + + function pushesElements() { + for (let i = min; i <= max; i++) { + list.push(i); + } + } + + function verifyList() { + let current = list.getHead(); + for (let i = min; i <= max && current; i++) { + expect(current).to.not.be.an('undefined'); + if (current) { + // TS strictNullChecks + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(i); + if (i < max) { + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + // TS strictNullChecks + expect(current.next.element).to.equal(i + 1); + } + } else { + expect(current.next).to.be.an('undefined'); + } + current = current.next; + } + } + } + + it('starts empty', () => { + expect(list.size()).to.equal(0); + expect(list.isEmpty()).to.equal(true); + expect(list.getHead()).to.be.an('undefined'); + }); + + it('pushes elements', () => { + pushesElements(); + verifyList(); + }); + + it('returns element at specific index: invalid position', () => { + // list is empty + expect(list.getElementAt(3)).to.be.an('undefined'); + }); + + it('returns element at specific index', () => { + let node; + + pushesElements(); + + for (let i = min; i <= max; i++) { + node = list.getElementAt(i - 1); + expect(node).to.not.be.an('undefined'); + if (node) { + expect(node.element).to.equal(i); + } + } + }); + + it('inserts elements first position empty list', () => { + const element = 1; + max = element; + expect(list.insert(0, element)).to.equal(true); + verifyList(); + }); + + it('inserts elements first position not empty list', () => { + max = 2; + expect(list.insert(0, max)).to.equal(true); + + expect(list.insert(0, min)).to.equal(true); + + verifyList(); + }); + + it('inserts elements invalid position empty list', () => { + expect(list.insert(1, 1)).to.equal(false); + }); + + it('inserts elements invalid position not empty list', () => { + const element = 1; + expect(list.insert(0, element)).to.equal(true); + expect(list.insert(2, element)).to.equal(false); + }); + + it('inserts elements in the middle of list', () => { + expect(list.insert(0, 3)).to.equal(true); + expect(list.insert(0, 1)).to.equal(true); + expect(list.insert(1, 2)).to.equal(true); + verifyList(); + }); + + it('inserts elements at the end of list', () => { + max = 5; + + for (let i = min; i <= max; i++) { + expect(list.insert(i - 1, i)).to.equal(true); + } + + verifyList(); + }); + + it('returns index of elements', () => { + let index; + + pushesElements(); + + for (let i = min; i <= max; i++) { + index = list.indexOf(i); + expect(index).to.equal(i - 1); + } + + expect(list.indexOf(max + 2)).to.equal(-1); + }); + + it('removes valid elements', () => { + let element; + + pushesElements(); + + for (let i = min; i <= max; i++) { + element = list.remove(i); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + } + }); + + it('removes invalid elements', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.remove(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position empty list', () => { + let element; + + for (let i = min; i <= max; i++) { + element = list.removeAt(i - 1); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position not empty list', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.removeAt(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes first element list single element', () => { + const value = 1; + list.push(value); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(value); + + expect(list.getHead()).to.be.an('undefined'); + expect(list.isEmpty()).to.equal(true); + }); + + it('removes first element list multiple elements', () => { + pushesElements(); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(min); + + min = 2; + verifyList(); + }); + + it('removes element from middle of list', () => { + pushesElements(); // 1, 2, 3 + + const element = list.removeAt(1); // element 2 + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(2); + + // list needs to be [1, 3] + let current = list.getHead(); + + // element 1 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(1); + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + expect(current.next.element).to.equal(3); + current = current.next; + } + } + + // element 3 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(3); + expect(current.next).to.be.an('undefined'); + } + }); + + it('removes element from end of list', () => { + let element; + + pushesElements(); + + const maxIndex = max; + for (let i = max; i >= min; i--) { + element = list.removeAt(i - 1); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + max--; + verifyList(); + } + }); + + it('returns the head of the list', () => { + expect(list.getHead()).to.be.an('undefined'); + + list.push(1); + expect(list.getHead()).to.not.be.an('undefined'); + }); + + it('returns the correct size', () => { + expect(list.size()).to.equal(0); + + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.size()).to.equal(i); + } + + const size = max; + for (let i = min; i <= max; i++) { + list.remove(i); + expect(list.size()).to.equal(size - i); + } + + expect(list.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(list.isEmpty()).to.equal(true); + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.isEmpty()).to.equal(false); + } + + for (let i = min; i < max; i++) { + list.remove(i); + expect(list.isEmpty()).to.equal(false); + } + list.remove(max); + expect(list.isEmpty()).to.equal(true); + + pushesElements(); + expect(list.isEmpty()).to.equal(false); + + list.clear(); + expect(list.isEmpty()).to.equal(true); + }); + + it('clears the list', () => { + expect(list.size()).to.equal(0); + list.clear(); + expect(list.size()).to.equal(0); + pushesElements(); + expect(list.size()).to.greaterThan(0); + list.clear(); + expect(list.size()).to.equal(0); + }); + + it('returns toString primitive types', () => { + expect(list.toString()).to.equal(''); + + list.push(1); + expect(list.toString()).to.equal('1'); + + list.push(2); + expect(list.toString()).to.equal('1,2'); + + list.clear(); + expect(list.toString()).to.equal(''); + }); + + it('returns toString primitive types: string', () => { + const ds = new LinkedList(); + ds.push('el1'); + expect(ds.toString()).to.equal('el1'); + + ds.push('el2'); + expect(ds.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + const ds = new LinkedList(); + expect(ds.toString()).to.equal(''); + + ds.push(new MyObj(1, 2)); + expect(ds.toString()).to.equal('1|2'); + + ds.push(new MyObj(3, 4)); + expect(ds.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/ts/data-structures/my-obj.ts b/test/ts/data-structures/my-obj.ts new file mode 100644 index 00000000..ff633f2b --- /dev/null +++ b/test/ts/data-structures/my-obj.ts @@ -0,0 +1,7 @@ +export default class MyObj { + constructor(public el1: any, public el2: any) { } + toString() { + return `${this.el1.toString()}|${this.el2.toString()}`; + } +} + From c922b60539e9f1a1879a21b987b61d4585be77c0 Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 14 Oct 2017 22:09:30 -0300 Subject: [PATCH 009/188] chapter 05: [LinkedLists] --- .../data-structures/circular-linked-list.ts | 92 ++++--------------- src/ts/data-structures/doubly-linked-list.ts | 85 ++++++----------- src/ts/data-structures/linked-list.ts | 62 +++++++++---- 3 files changed, 87 insertions(+), 152 deletions(-) diff --git a/src/ts/data-structures/circular-linked-list.ts b/src/ts/data-structures/circular-linked-list.ts index c3f4a1f2..e9fc26c2 100644 --- a/src/ts/data-structures/circular-linked-list.ts +++ b/src/ts/data-structures/circular-linked-list.ts @@ -1,15 +1,16 @@ import { defaultEquals, IEqualsFunction } from '../util'; +import LinkedList from './linked-list'; import { Node } from './models/linked-list-models'; -export default class CircularLinkedList { - private count = 0; - private head: Node | undefined; +export default class CircularLinkedList extends LinkedList { - constructor(private equalsFn: IEqualsFunction = defaultEquals) { } + constructor(protected equalsFn: IEqualsFunction = defaultEquals) { + super(equalsFn); + } private getLastElement() { let current = this.head; - for (let i = 2; i <= this.size() && current; i++) { + for (let i = 2; i <= this.size() && current != null; i++) { current = current.next; } return current; @@ -19,11 +20,11 @@ export default class CircularLinkedList { const node = new Node(element); let current; - if (this.head === undefined || this.head === null) { + if (this.head == null) { this.head = node; } else { current = this.getLastElement(); - if (current) { + if (current != null) { current.next = node; } } @@ -34,26 +35,13 @@ export default class CircularLinkedList { this.count++; } - getElementAt(index: number) { - if (index >= 0 && index <= this.count) { - let node = this.head; - for (let i = 0; i < index; i++) { - if (node) { - node = node.next; - } - } - return node; - } - return undefined; - } - insert(index: number, element: T) { if (index >= 0 && index <= this.count) { const node = new Node(element); let current = this.head; if (index === 0) { - if (!this.head) { + if (this.head == null) { // if no node in list this.head = node; node.next = this.head; @@ -62,13 +50,13 @@ export default class CircularLinkedList { current = this.getLastElement(); // update last element this.head = node; - if (current) { + if (current != null) { current.next = this.head; } } } else { const previous = this.getElementAt(index - 1); - if (previous) { + if (previous != null) { node.next = previous.next; previous.next = node; } @@ -90,10 +78,10 @@ export default class CircularLinkedList { this.head = undefined; } else { current = this.getLastElement(); - if (this.head) { + if (this.head != null) { this.head = this.head.next; } - if (current) { + if (current != null) { current.next = this.head; } current = removed; @@ -101,66 +89,18 @@ export default class CircularLinkedList { } else { // no need to update last element for circular list const previous = this.getElementAt(index - 1); - if (previous) { + if (previous != null) { current = previous.next; - if (current) { + if (current != null) { previous.next = current.next; } } } - if (current) { + if (current != null) { this.count--; return current.element; } } return undefined; } - - remove(element: T) { - const index = this.indexOf(element); - return this.removeAt(index); - } - - indexOf(element: T) { - let current = this.head; - - for (let i = 1; i <= this.size() && current; i++) { - if (this.equalsFn(element, current.element)) { - return i - 1; - } - current = current.next; - } - - return -1; - } - - isEmpty() { - return this.size() === 0; - } - - size() { - return this.count; - } - - getHead() { - return this.head; - } - - clear() { - this.head = undefined; - this.count = 0; - } - - toString() { - if (this.head === undefined) { - return ''; - } - let objString = `${this.head.element}`; - let current = this.head.next; - for (let i = 2; i <= this.size() && current; i++) { - objString = `${objString},${current.element}`; - current = current.next; - } - return objString; - } } diff --git a/src/ts/data-structures/doubly-linked-list.ts b/src/ts/data-structures/doubly-linked-list.ts index 7e181638..935ef360 100644 --- a/src/ts/data-structures/doubly-linked-list.ts +++ b/src/ts/data-structures/doubly-linked-list.ts @@ -1,22 +1,24 @@ import { defaultEquals, IEqualsFunction } from '../util'; +import LinkedList from './linked-list'; import { DoublyNode } from './models/linked-list-models'; -export default class DoublyLinkedList { - private count = 0; - private head: DoublyNode | undefined; - private tail: DoublyNode | undefined; +export default class DoublyLinkedList extends LinkedList { + protected head: DoublyNode | undefined; + protected tail: DoublyNode | undefined; - constructor(private equalsFn: IEqualsFunction = defaultEquals) { } + constructor(protected equalsFn: IEqualsFunction = defaultEquals) { + super(equalsFn); + } push(element: T) { const node = new DoublyNode(element); - if (this.head === undefined || this.head === null) { + if (this.head == null) { this.head = node; this.tail = node; // NEW } else { // attach to the tail node // NEW - if (this.tail !== undefined && this.tail !== null) { + if (this.tail != null) { this.tail.next = node; node.prev = this.tail; this.tail = node; @@ -25,26 +27,13 @@ export default class DoublyLinkedList { this.count++; } - getElementAt(index: number) { - if (index >= 0 && index <= this.count) { - let node = this.head; - for (let i = 0; i < index; i++) { - if (node) { - node = node.next; - } - } - return node; - } - return undefined; - } - insert(index: number, element: T) { if (index >= 0 && index <= this.count) { const node = new DoublyNode(element); let current = this.head; if (index === 0) { - if (this.head === undefined || this.head === null) { + if (this.head == null) { // NEW this.head = node; this.tail = node; @@ -57,19 +46,19 @@ export default class DoublyLinkedList { // last item // NEW current = this.tail; // {2} - if (current) { + if (current != null) { current.next = node; node.prev = current; this.tail = node; } } else { const previous = this.getElementAt(index - 1); - if (previous) { + if (previous != null) { current = previous.next; node.next = current; previous.next = node; - if (current) { + if (current != null) { current.prev = node; // NEW node.prev = previous; // NEW } @@ -86,14 +75,14 @@ export default class DoublyLinkedList { let current = this.head; if (index === 0) { - if (this.head) { + if (this.head != null) { this.head = this.head.next; // {1} // if there is only one item, then we update tail as well //NEW if (this.count === 1) { // {2} this.tail = undefined; } else { - if (this.head) { + if (this.head != null) { this.head.prev = undefined; // {3} } } @@ -101,7 +90,7 @@ export default class DoublyLinkedList { } else if (index === this.count - 1) { // last item //NEW current = this.tail; // {4} - if (current) { + if (current != null) { this.tail = current.prev; if (this.tail) { this.tail.next = undefined; @@ -109,18 +98,18 @@ export default class DoublyLinkedList { } } else { current = this.getElementAt(index); - if (current) { + if (current != null) { const previous = current.prev; - if (previous) { + if (previous != null) { // link previous with current's next - skip it to remove previous.next = current.next; // {6} - if (current && current.next) { + if (current != null && current.next != null) { current.next.prev = previous; // NEW } } } } - if (current) { + if (current != null) { this.count--; return current.element; } @@ -128,16 +117,11 @@ export default class DoublyLinkedList { return undefined; } - remove(element: T) { - const index = this.indexOf(element); - return this.removeAt(index); - } - indexOf(element: T) { let current = this.head; let index = 0; - while (current) { + while (current != null) { if (this.equalsFn(element, current.element)) { return index; } @@ -148,35 +132,22 @@ export default class DoublyLinkedList { return -1; } - getHead() { - return this.head; - } - getTail() { return this.tail; } - isEmpty() { - return this.size() === 0; - } - clear() { - this.head = undefined; + super.clear(); this.tail = undefined; - this.count = 0; - } - - size() { - return this.count; } toString() { - if (this.head === undefined) { + if (this.head == null) { return ''; } let objString = `${this.head.element}`; - let current: DoublyNode | undefined = this.head.next; - while (current) { + let current = this.head.next; + while (current != null) { objString = `${objString},${current.element}`; current = current.next; } @@ -184,12 +155,12 @@ export default class DoublyLinkedList { } inverseToString() { - if (this.tail === undefined) { + if (this.tail == null) { return ''; } let objString = `${this.tail.element}`; - let previous: DoublyNode | undefined = this.tail.prev; - while (previous) { + let previous = this.tail.prev; + while (previous != null) { objString = `${objString},${previous.element}`; previous = previous.prev; } diff --git a/src/ts/data-structures/linked-list.ts b/src/ts/data-structures/linked-list.ts index c2c49a78..9a4fb6f5 100644 --- a/src/ts/data-structures/linked-list.ts +++ b/src/ts/data-structures/linked-list.ts @@ -1,22 +1,25 @@ -import { defaultEquals, IEqualsFunction } from '../util'; +import { defaultCompare, defaultEquals, ICompareFunction, IEqualsFunction } from '../util'; import { Node } from './models/linked-list-models'; export default class LinkedList { - private count = 0; - private head: Node | undefined; + protected count = 0; + protected head: Node | undefined; - constructor(private equalsFn: IEqualsFunction = defaultEquals) { } + constructor( + protected equalsFn: IEqualsFunction = defaultEquals, + protected compareFn: ICompareFunction = defaultCompare + ) {} push(element: T) { const node = new Node(element); let current; - if (this.head === undefined || this.head === null) { + if (this.head == null) { // catches null && undefined this.head = node; } else { current = this.head; - while (current.next) { + while (current.next != null) { current = current.next; } @@ -29,7 +32,7 @@ export default class LinkedList { if (index >= 0 && index <= this.count) { let node = this.head; for (let i = 0; i < index; i++) { - if (node) { + if (node != null) { node = node.next; } } @@ -48,7 +51,7 @@ export default class LinkedList { this.head = node; } else { const previous = this.getElementAt(index - 1); - if (previous) { + if (previous != null) { node.next = previous.next; previous.next = node; } @@ -59,24 +62,47 @@ export default class LinkedList { return false; } + insertSorted(element: T) { + if (this.isEmpty()) { + this.push(element); + } else { + const index = this.getIndexNextSortedElement(element); + this.insert(index, element); + } + } + + private getIndexNextSortedElement(element: T) { + let current = this.head; + + for (let i = 0; i < this.size() && current; i++) { + const comp = this.compareFn(element, current.element); + if (comp >= 0) { + return i; + } + current = current.next; + } + + return -1; + } + removeAt(index: number) { if (index >= 0 && index < this.count) { let current = this.head; if (index === 0) { - if (this.head) { + if (this.head != null) { this.head = this.head.next; } } else { const previous = this.getElementAt(index - 1); - if (previous) { + if (previous != null) { current = previous.next; - if (current) { + if (current != null) { previous.next = current.next; } } } - if (current) { + if (current != null) { this.count--; return current.element; } @@ -91,13 +117,11 @@ export default class LinkedList { indexOf(element: T) { let current = this.head; - let index = 0; - while (current) { + for (let i = 0; i < this.size() && current != null; i++) { if (this.equalsFn(element, current.element)) { - return index; + return i; } - index++; current = current.next; } @@ -122,12 +146,12 @@ export default class LinkedList { } toString() { - if (this.head === undefined) { + if (this.head == null) { return ''; } let objString = `${this.head.element}`; - let current: Node | undefined = this.head.next; - while (current) { + let current = this.head.next; + for (let i = 1; i < this.size() && current != null; i++) { objString = `${objString},${current.element}`; current = current.next; } From 1a4f18e2f6e37e67971d2819079603e5a3f77180 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 15 Oct 2017 10:35:40 -0200 Subject: [PATCH 010/188] chapter 05: [LinkedLists] --- package.json | 2 +- src/ts/data-structures/doubly-linked-list.ts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 06d90698..25097717 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "nyc": "^11.2.1", "ts-node": "^3.3.0", "tslint": "^5.7.0", - "typescript": "^2.6.0-dev.20171014", + "typescript": "^2.5.3", "webpack": "^3.7.1", "yargs": "^9.0.1" } diff --git a/src/ts/data-structures/doubly-linked-list.ts b/src/ts/data-structures/doubly-linked-list.ts index 935ef360..ffcaf6b6 100644 --- a/src/ts/data-structures/doubly-linked-list.ts +++ b/src/ts/data-structures/doubly-linked-list.ts @@ -132,6 +132,10 @@ export default class DoublyLinkedList extends LinkedList { return -1; } + getHead() { + return this.head; + } + getTail() { return this.tail; } From 17cfa43941f5682a1de8451cb514867fb405447a Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 15 Oct 2017 12:37:49 -0200 Subject: [PATCH 011/188] chapter 05: [LinkedLists] --- .../data-structures/circular-linked-list.ts | 39 +- src/ts/data-structures/doubly-linked-list.ts | 80 ++-- src/ts/data-structures/linked-list.ts | 65 +--- src/ts/data-structures/sorted-linked-list.ts | 43 +++ src/ts/index.ts | 4 +- .../circular-linked-list.spec.ts | 20 +- .../doubly-linked-list.spec.ts | 20 +- test/ts/data-structures/linked-list.spec.ts | 20 +- .../sorted-linked-list.spec.ts | 341 ++++++++++++++++++ tsconfig.json | 14 +- 10 files changed, 477 insertions(+), 169 deletions(-) create mode 100644 src/ts/data-structures/sorted-linked-list.ts create mode 100644 test/ts/data-structures/sorted-linked-list.spec.ts diff --git a/src/ts/data-structures/circular-linked-list.ts b/src/ts/data-structures/circular-linked-list.ts index e9fc26c2..95c0b470 100644 --- a/src/ts/data-structures/circular-linked-list.ts +++ b/src/ts/data-structures/circular-linked-list.ts @@ -3,7 +3,6 @@ import LinkedList from './linked-list'; import { Node } from './models/linked-list-models'; export default class CircularLinkedList extends LinkedList { - constructor(protected equalsFn: IEqualsFunction = defaultEquals) { super(equalsFn); } @@ -24,9 +23,7 @@ export default class CircularLinkedList extends LinkedList { this.head = node; } else { current = this.getLastElement(); - if (current != null) { - current.next = node; - } + current.next = node; } // set node.next to head - to have circular list @@ -35,7 +32,7 @@ export default class CircularLinkedList extends LinkedList { this.count++; } - insert(index: number, element: T) { + insert(element: T, index: number) { if (index >= 0 && index <= this.count) { const node = new Node(element); let current = this.head; @@ -50,16 +47,12 @@ export default class CircularLinkedList extends LinkedList { current = this.getLastElement(); // update last element this.head = node; - if (current != null) { - current.next = this.head; - } + current.next = this.head; } } else { const previous = this.getElementAt(index - 1); - if (previous != null) { - node.next = previous.next; - previous.next = node; - } + node.next = previous.next; + previous.next = node; } this.count++; return true; @@ -78,28 +71,18 @@ export default class CircularLinkedList extends LinkedList { this.head = undefined; } else { current = this.getLastElement(); - if (this.head != null) { - this.head = this.head.next; - } - if (current != null) { - current.next = this.head; - } + this.head = this.head.next; + current.next = this.head; current = removed; } } else { // no need to update last element for circular list const previous = this.getElementAt(index - 1); - if (previous != null) { - current = previous.next; - if (current != null) { - previous.next = current.next; - } - } - } - if (current != null) { - this.count--; - return current.element; + current = previous.next; + previous.next = current.next; } + this.count--; + return current.element; } return undefined; } diff --git a/src/ts/data-structures/doubly-linked-list.ts b/src/ts/data-structures/doubly-linked-list.ts index ffcaf6b6..07ac834a 100644 --- a/src/ts/data-structures/doubly-linked-list.ts +++ b/src/ts/data-structures/doubly-linked-list.ts @@ -18,16 +18,14 @@ export default class DoublyLinkedList extends LinkedList { this.tail = node; // NEW } else { // attach to the tail node // NEW - if (this.tail != null) { - this.tail.next = node; - node.prev = this.tail; - this.tail = node; - } + this.tail.next = node; + node.prev = this.tail; + this.tail = node; } this.count++; } - insert(index: number, element: T) { + insert(element: T, index: number) { if (index >= 0 && index <= this.count) { const node = new DoublyNode(element); let current = this.head; @@ -46,23 +44,17 @@ export default class DoublyLinkedList extends LinkedList { // last item // NEW current = this.tail; // {2} - if (current != null) { - current.next = node; - node.prev = current; - this.tail = node; - } + current.next = node; + node.prev = current; + this.tail = node; } else { const previous = this.getElementAt(index - 1); - if (previous != null) { - current = previous.next; - node.next = current; - previous.next = node; - - if (current != null) { - current.prev = node; // NEW - node.prev = previous; // NEW - } - } + current = previous.next; + node.next = current; + previous.next = node; + + current.prev = node; // NEW + node.prev = previous; // NEW } this.count++; return true; @@ -75,44 +67,28 @@ export default class DoublyLinkedList extends LinkedList { let current = this.head; if (index === 0) { - if (this.head != null) { - this.head = this.head.next; // {1} - // if there is only one item, then we update tail as well //NEW - if (this.count === 1) { - // {2} - this.tail = undefined; - } else { - if (this.head != null) { - this.head.prev = undefined; // {3} - } - } + this.head = this.head.next; // {1} + // if there is only one item, then we update tail as well //NEW + if (this.count === 1) { + // {2} + this.tail = undefined; + } else { + this.head.prev = undefined; // {3} } } else if (index === this.count - 1) { // last item //NEW current = this.tail; // {4} - if (current != null) { - this.tail = current.prev; - if (this.tail) { - this.tail.next = undefined; - } - } + this.tail = current.prev; + this.tail.next = undefined; } else { current = this.getElementAt(index); - if (current != null) { - const previous = current.prev; - if (previous != null) { - // link previous with current's next - skip it to remove - previous.next = current.next; // {6} - if (current != null && current.next != null) { - current.next.prev = previous; // NEW - } - } - } - } - if (current != null) { - this.count--; - return current.element; + const previous = current.prev; + // link previous with current's next - skip it to remove + previous.next = current.next; // {6} + current.next.prev = previous; // NEW } + this.count--; + return current.element; } return undefined; } diff --git a/src/ts/data-structures/linked-list.ts b/src/ts/data-structures/linked-list.ts index 9a4fb6f5..e256b208 100644 --- a/src/ts/data-structures/linked-list.ts +++ b/src/ts/data-structures/linked-list.ts @@ -1,20 +1,18 @@ -import { defaultCompare, defaultEquals, ICompareFunction, IEqualsFunction } from '../util'; +import { defaultEquals, IEqualsFunction } from '../util'; import { Node } from './models/linked-list-models'; export default class LinkedList { protected count = 0; protected head: Node | undefined; - constructor( - protected equalsFn: IEqualsFunction = defaultEquals, - protected compareFn: ICompareFunction = defaultCompare - ) {} + constructor(protected equalsFn: IEqualsFunction = defaultEquals) {} push(element: T) { const node = new Node(element); let current; - if (this.head == null) { // catches null && undefined + if (this.head == null) { + // catches null && undefined this.head = node; } else { current = this.head; @@ -31,17 +29,15 @@ export default class LinkedList { getElementAt(index: number) { if (index >= 0 && index <= this.count) { let node = this.head; - for (let i = 0; i < index; i++) { - if (node != null) { - node = node.next; - } + for (let i = 0; i < index && node != null; i++) { + node = node.next; } return node; } return undefined; } - insert(index: number, element: T) { + insert(element: T, index: number) { if (index >= 0 && index <= this.count) { const node = new Node(element); const current = this.head; @@ -51,10 +47,8 @@ export default class LinkedList { this.head = node; } else { const previous = this.getElementAt(index - 1); - if (previous != null) { - node.next = previous.next; - previous.next = node; - } + node.next = previous.next; + previous.next = node; } this.count++; return true; @@ -62,50 +56,19 @@ export default class LinkedList { return false; } - insertSorted(element: T) { - if (this.isEmpty()) { - this.push(element); - } else { - const index = this.getIndexNextSortedElement(element); - this.insert(index, element); - } - } - - private getIndexNextSortedElement(element: T) { - let current = this.head; - - for (let i = 0; i < this.size() && current; i++) { - const comp = this.compareFn(element, current.element); - if (comp >= 0) { - return i; - } - current = current.next; - } - - return -1; - } - removeAt(index: number) { if (index >= 0 && index < this.count) { let current = this.head; if (index === 0) { - if (this.head != null) { - this.head = this.head.next; - } + this.head = current.next; } else { const previous = this.getElementAt(index - 1); - if (previous != null) { - current = previous.next; - if (current != null) { - previous.next = current.next; - } - } - } - if (current != null) { - this.count--; - return current.element; + current = previous.next; + previous.next = current.next; } + this.count--; + return current.element; } return undefined; } diff --git a/src/ts/data-structures/sorted-linked-list.ts b/src/ts/data-structures/sorted-linked-list.ts new file mode 100644 index 00000000..f7832e81 --- /dev/null +++ b/src/ts/data-structures/sorted-linked-list.ts @@ -0,0 +1,43 @@ +import { Compare, defaultCompare, defaultEquals, ICompareFunction, IEqualsFunction } from '../util'; +import LinkedList from './linked-list'; + +export default class SortedLinkedList extends LinkedList { + constructor( + protected equalsFn: IEqualsFunction = defaultEquals, + protected compareFn: ICompareFunction = defaultCompare + ) { + super(equalsFn); + } + + push(element: T) { + if (this.isEmpty()) { + super.push(element); + } else { + const index = this.getIndexNextSortedElement(element); + super.insert(element, index); + } + } + + insert(element: T, index: number = 0) { + if (this.isEmpty()) { + return super.insert(element, 0); + } + index = this.getIndexNextSortedElement(element); + return super.insert(element, index); + } + + private getIndexNextSortedElement(element: T) { + let current = this.head; + let i = 0; + + for (; i < this.size() && current; i++) { + const comp = this.compareFn(element, current.element); + if (comp === Compare.LESS_THAN) { + return i; + } + current = current.next; + } + + return i; + } +} diff --git a/src/ts/index.ts b/src/ts/index.ts index d0863cf2..8699d96a 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -1,8 +1,10 @@ +import * as _util from './util'; + export { default as CircularLinkedList } from './data-structures/circular-linked-list'; export { default as DoublyLinkedList } from './data-structures/doubly-linked-list'; export { default as LinkedList } from './data-structures/linked-list'; +export { default as SortedLinkedList } from './data-structures/sorted-linked-list'; -import * as _util from './util'; export const util = _util; /* import { hotPotato } from './others/hot-potato'; diff --git a/test/ts/data-structures/circular-linked-list.spec.ts b/test/ts/data-structures/circular-linked-list.spec.ts index 78570be8..78ac9a47 100644 --- a/test/ts/data-structures/circular-linked-list.spec.ts +++ b/test/ts/data-structures/circular-linked-list.spec.ts @@ -80,15 +80,15 @@ describe('CircularLinkedList', () => { it('inserts elements first position empty list', () => { const element = 1; max = element; - expect(list.insert(0, element)).to.equal(true); + expect(list.insert(element, 0)).to.equal(true); verifyList(); }); it('inserts elements first position not empty list', () => { max = 2; - expect(list.insert(0, max)).to.equal(true); + expect(list.insert(max, 0)).to.equal(true); - expect(list.insert(0, min)).to.equal(true); + expect(list.insert(min, 0)).to.equal(true); verifyList(); }); @@ -99,14 +99,14 @@ describe('CircularLinkedList', () => { it('inserts elements invalid position not empty list', () => { const element = 1; - expect(list.insert(0, element)).to.equal(true); - expect(list.insert(2, element)).to.equal(false); + expect(list.insert(element, 0)).to.equal(true); + expect(list.insert(element, 2)).to.equal(false); }); it('inserts elements in the middle of list', () => { - expect(list.insert(0, 3)).to.equal(true); - expect(list.insert(0, 1)).to.equal(true); - expect(list.insert(1, 2)).to.equal(true); + expect(list.insert(3, 0)).to.equal(true); + expect(list.insert(1, 0)).to.equal(true); + expect(list.insert(2, 1)).to.equal(true); verifyList(); }); @@ -114,7 +114,7 @@ describe('CircularLinkedList', () => { max = 5; for (let i = min; i <= max; i++) { - expect(list.insert(i - 1, i)).to.equal(true); + expect(list.insert(i , i - 1)).to.equal(true); } verifyList(); @@ -243,7 +243,7 @@ describe('CircularLinkedList', () => { pushesElements(); const maxIndex = max; - for (let i = max; i >= min; i--) { + for (let i = maxIndex; i >= min; i--) { element = list.removeAt(i - 1); expect(element).to.not.be.an('undefined'); expect(element).to.equal(i); diff --git a/test/ts/data-structures/doubly-linked-list.spec.ts b/test/ts/data-structures/doubly-linked-list.spec.ts index 1c53dfbe..d5e41556 100644 --- a/test/ts/data-structures/doubly-linked-list.spec.ts +++ b/test/ts/data-structures/doubly-linked-list.spec.ts @@ -105,15 +105,15 @@ describe('DoublyLinkedList', () => { it('inserts elements first position empty list', () => { const element = 1; max = element; - expect(list.insert(0, element)).to.equal(true); + expect(list.insert(element, 0)).to.equal(true); verifyList(); }); it('inserts elements first position not empty list', () => { max = 2; - expect(list.insert(0, max)).to.equal(true); + expect(list.insert(max, 0)).to.equal(true); - expect(list.insert(0, min)).to.equal(true); + expect(list.insert(min, 0)).to.equal(true); verifyList(); }); @@ -124,24 +124,24 @@ describe('DoublyLinkedList', () => { it('inserts elements invalid position not empty list', () => { const element = 1; - expect(list.insert(0, element)).to.equal(true); - expect(list.insert(2, element)).to.equal(false); + expect(list.insert(element, 0)).to.equal(true); + expect(list.insert(element, 2)).to.equal(false); }); it('inserts elements at the end of list', () => { max = 5; for (let i = min; i <= max; i++) { - expect(list.insert(i - 1, i)).to.equal(true); + expect(list.insert(i , i - 1)).to.equal(true); } verifyList(); }); it('inserts elements in the middle of list', () => { - expect(list.insert(0, 3)).to.equal(true); - expect(list.insert(0, 1)).to.equal(true); - expect(list.insert(1, 2)).to.equal(true); + expect(list.insert(3, 0)).to.equal(true); + expect(list.insert(1, 0)).to.equal(true); + expect(list.insert(2, 1)).to.equal(true); verifyList(); }); @@ -231,7 +231,7 @@ describe('DoublyLinkedList', () => { pushesElements(); const maxIndex = max; - for (let i = max; i >= min; i--) { + for (let i = maxIndex; i >= min; i--) { element = list.removeAt(i - 1); expect(element).to.not.be.an('undefined'); expect(element).to.equal(i); diff --git a/test/ts/data-structures/linked-list.spec.ts b/test/ts/data-structures/linked-list.spec.ts index 96031571..32665364 100644 --- a/test/ts/data-structures/linked-list.spec.ts +++ b/test/ts/data-structures/linked-list.spec.ts @@ -75,15 +75,15 @@ describe('LinkedList', () => { it('inserts elements first position empty list', () => { const element = 1; max = element; - expect(list.insert(0, element)).to.equal(true); + expect(list.insert(element, 0)).to.equal(true); verifyList(); }); it('inserts elements first position not empty list', () => { max = 2; - expect(list.insert(0, max)).to.equal(true); + expect(list.insert(max, 0)).to.equal(true); - expect(list.insert(0, min)).to.equal(true); + expect(list.insert(min, 0)).to.equal(true); verifyList(); }); @@ -94,14 +94,14 @@ describe('LinkedList', () => { it('inserts elements invalid position not empty list', () => { const element = 1; - expect(list.insert(0, element)).to.equal(true); - expect(list.insert(2, element)).to.equal(false); + expect(list.insert(element, 0)).to.equal(true); + expect(list.insert(element, 2)).to.equal(false); }); it('inserts elements in the middle of list', () => { - expect(list.insert(0, 3)).to.equal(true); - expect(list.insert(0, 1)).to.equal(true); - expect(list.insert(1, 2)).to.equal(true); + expect(list.insert(3, 0)).to.equal(true); + expect(list.insert(1, 0)).to.equal(true); + expect(list.insert(2, 1)).to.equal(true); verifyList(); }); @@ -109,7 +109,7 @@ describe('LinkedList', () => { max = 5; for (let i = min; i <= max; i++) { - expect(list.insert(i - 1, i)).to.equal(true); + expect(list.insert(i , i - 1)).to.equal(true); } verifyList(); @@ -231,7 +231,7 @@ describe('LinkedList', () => { pushesElements(); const maxIndex = max; - for (let i = max; i >= min; i--) { + for (let i = maxIndex; i >= min; i--) { element = list.removeAt(i - 1); expect(element).to.not.be.an('undefined'); expect(element).to.equal(i); diff --git a/test/ts/data-structures/sorted-linked-list.spec.ts b/test/ts/data-structures/sorted-linked-list.spec.ts new file mode 100644 index 00000000..6d05333f --- /dev/null +++ b/test/ts/data-structures/sorted-linked-list.spec.ts @@ -0,0 +1,341 @@ +import 'mocha'; +import { expect } from 'chai'; +import { SortedLinkedList, util } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('SortedLinkedList', () => { + let list: SortedLinkedList; + let min: number; + let max: number; + + beforeEach(function() { + list = new SortedLinkedList(); + min = 1; + max = 3; + }); + + function pushesElements() { + for (let i = max; i >= min; i--) { + list.push(i); + } + } + + function verifyList() { + let current = list.getHead(); + for (let i = min; i <= max && current; i++) { + expect(current).to.not.be.an('undefined'); + if (current) { + // TS strictNullChecks + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(i); + if (i < max) { + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + // TS strictNullChecks + expect(current.next.element).to.equal(i + 1); + } + } else { + expect(current.next).to.be.an('undefined'); + } + current = current.next; + } + } + } + + it('starts empty', () => { + expect(list.size()).to.equal(0); + expect(list.isEmpty()).to.equal(true); + expect(list.getHead()).to.be.an('undefined'); + }); + + it('pushes elements', () => { + pushesElements(); + verifyList(); + }); + + it('returns element at specific index: invalid position', () => { + // list is empty + expect(list.getElementAt(3)).to.be.an('undefined'); + }); + + it('returns element at specific index', () => { + let node; + + pushesElements(); + + for (let i = min; i <= max; i++) { + node = list.getElementAt(i - 1); + expect(node).to.not.be.an('undefined'); + if (node) { + expect(node.element).to.equal(i); + } + } + }); + + it('inserts elements first position empty list', () => { + const element = 1; + max = element; + expect(list.insert(element, 0)).to.equal(true); + verifyList(); + }); + + it('inserts elements first position not empty list', () => { + max = 2; + expect(list.insert(max)).to.equal(true); + + expect(list.insert(min, 0)).to.equal(true); + + verifyList(); + }); + + it('inserts elements invalid position empty list', () => { + // sorted list will ignore the index position + expect(list.insert(1, 1)).to.equal(true); + }); + + it('inserts elements invalid position not empty list', () => { + // sorted list will ignore the index position + const element = 1; + expect(list.insert(element, 0)).to.equal(true); + expect(list.insert(element, 2)).to.equal(true); + }); + + it('inserts elements in the middle of list', () => { + expect(list.insert(3, 0)).to.equal(true); + expect(list.insert(1, 0)).to.equal(true); + expect(list.insert(2, 1)).to.equal(true); + verifyList(); + }); + + it('inserts elements at the end of list', () => { + max = 5; + + for (let i = min; i <= max; i++) { + expect(list.insert(i , i - 1)).to.equal(true); + } + + verifyList(); + }); + + it('returns index of elements', () => { + let index; + + pushesElements(); + + for (let i = min; i <= max; i++) { + index = list.indexOf(i); + expect(index).to.equal(i - 1); + } + + expect(list.indexOf(max + 2)).to.equal(-1); + }); + + it('removes valid elements', () => { + let element; + + pushesElements(); + + for (let i = min; i <= max; i++) { + element = list.remove(i); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + } + }); + + it('removes invalid elements', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.remove(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position empty list', () => { + let element; + + for (let i = min; i <= max; i++) { + element = list.removeAt(i - 1); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position not empty list', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.removeAt(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes first element list single element', () => { + const value = 1; + list.push(value); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(value); + + expect(list.getHead()).to.be.an('undefined'); + expect(list.isEmpty()).to.equal(true); + }); + + it('removes first element list multiple elements', () => { + pushesElements(); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(min); + + min = 2; + verifyList(); + }); + + it('removes element from middle of list', () => { + pushesElements(); // 1, 2, 3 + + const element = list.removeAt(1); // element 2 + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(2); + + // list needs to be [1, 3] + let current = list.getHead(); + + // element 1 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(1); + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + expect(current.next.element).to.equal(3); + current = current.next; + } + } + + // element 3 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(3); + expect(current.next).to.be.an('undefined'); + } + }); + + it('removes element from end of list', () => { + let element; + + pushesElements(); + + const maxIndex = max; + for (let i = maxIndex; i >= min; i--) { + element = list.removeAt(i - 1); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + max--; + verifyList(); + } + }); + + it('returns the head of the list', () => { + expect(list.getHead()).to.be.an('undefined'); + + list.push(1); + expect(list.getHead()).to.not.be.an('undefined'); + }); + + it('returns the correct size', () => { + expect(list.size()).to.equal(0); + + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.size()).to.equal(i); + } + + const size = max; + for (let i = min; i <= max; i++) { + list.remove(i); + expect(list.size()).to.equal(size - i); + } + + expect(list.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(list.isEmpty()).to.equal(true); + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.isEmpty()).to.equal(false); + } + + for (let i = min; i < max; i++) { + list.remove(i); + expect(list.isEmpty()).to.equal(false); + } + list.remove(max); + expect(list.isEmpty()).to.equal(true); + + pushesElements(); + expect(list.isEmpty()).to.equal(false); + + list.clear(); + expect(list.isEmpty()).to.equal(true); + }); + + it('clears the list', () => { + expect(list.size()).to.equal(0); + list.clear(); + expect(list.size()).to.equal(0); + pushesElements(); + expect(list.size()).to.greaterThan(0); + list.clear(); + expect(list.size()).to.equal(0); + }); + + it('returns toString primitive types', () => { + expect(list.toString()).to.equal(''); + + list.push(1); + expect(list.toString()).to.equal('1'); + + list.push(2); + expect(list.toString()).to.equal('1,2'); + + list.clear(); + expect(list.toString()).to.equal(''); + }); + + function stringCompare(a: string, b: string): number { + return a.localeCompare(b); + } + + it('returns toString primitive types: string', () => { + + const ds = new SortedLinkedList(util.defaultEquals, stringCompare); + ds.push('el2'); + expect(ds.toString()).to.equal('el2'); + + ds.push('el1'); + expect(ds.toString()).to.equal('el1,el2'); + }); + + function myObjCompare(a: MyObj, b: MyObj): number { + return a.toString().localeCompare(b.toString()); + } + + it('returns toString objects', () => { + const ds = new SortedLinkedList(util.defaultEquals, myObjCompare); + expect(ds.toString()).to.equal(''); + + ds.push(new MyObj(3, 4)); + expect(ds.toString()).to.equal('3|4'); + + ds.push(new MyObj(1, 2)); + expect(ds.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index adb52da4..d9ecc6d6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,16 +19,16 @@ // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strict": true /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* Enable strict null checks. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + "noUnusedLocals": true, /* Report errors on unused locals. */ + "noUnusedParameters": true, /* Report errors on unused parameters. */ + "noImplicitReturns": true /* Report error when not all code paths in function return a value. */ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ /* Module Resolution Options */ From 52cb8a2c07950944b256dbba90f49681e705323b Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 15 Oct 2017 13:11:52 -0200 Subject: [PATCH 012/188] capter 05: [LinkedLists] --- README.md | 4 +- examples/PacktDataStructuresAlgorithms.min.js | 2 +- .../data-structures/circular-linked-list.js | 79 ++++ src/js/data-structures/doubly-linked-list.js | 130 ++++++ src/js/data-structures/linked-list.js | 105 +++++ .../models/linked-list-models.js | 12 + src/js/data-structures/sorted-linked-list.js | 37 ++ src/js/index.js | 9 + src/js/util.js | 15 + .../circular-linked-list.spec.js | 342 +++++++++++++++ .../doubly-linked-list.spec.js | 406 ++++++++++++++++++ test/js/data-structures/linked-list.spec.js | 330 ++++++++++++++ test/js/data-structures/my-obj.js | 9 + .../sorted-linked-list.spec.js | 340 +++++++++++++++ .../circular-linked-list.spec.ts | 2 +- .../doubly-linked-list.spec.ts | 2 +- test/ts/data-structures/linked-list.spec.ts | 2 +- .../sorted-linked-list.spec.ts | 2 +- 18 files changed, 1821 insertions(+), 7 deletions(-) create mode 100644 src/js/data-structures/circular-linked-list.js create mode 100644 src/js/data-structures/doubly-linked-list.js create mode 100644 src/js/data-structures/linked-list.js create mode 100644 src/js/data-structures/models/linked-list-models.js create mode 100644 src/js/data-structures/sorted-linked-list.js create mode 100644 src/js/util.js create mode 100644 test/js/data-structures/circular-linked-list.spec.js create mode 100644 test/js/data-structures/doubly-linked-list.spec.js create mode 100644 test/js/data-structures/linked-list.spec.js create mode 100644 test/js/data-structures/my-obj.js create mode 100644 test/js/data-structures/sorted-linked-list.spec.js diff --git a/README.md b/README.md index a403c52b..4c01adb2 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,10 @@ Work in Progress. * 04: [Queues and Deques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter04) * 05: [LinkedLists](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter05) -## Thrid Edition Updates +### Third Edition Updates * Algorithms using ES2015+ -* Creation of a Data Structure and Algorithms library that can be used in the browser or with Node.js +* Creation of a Data Structures and Algorithms library that can be used in the browser or with Node.js * Algorithms tested with Mocha + Chai (test code available in `test` directory) * TypeScript version of the source code included diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index a17768ec..ff1b255b 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(t,e,n){var i,o,u;!function(n,r){o=[t,e],i=r,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e1;){for(var r=0;r1&&o;)u=e.removeFront(),r=e.removeBack(),u!==r&&(o=!1);return o}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(r,s){o=[e,n(0)],i=s,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t){for(var e=new o.default,n=t,i=void 0,u="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)u+=e.pop().toString();return u}function i(t,e){var n=new o.default,i=t,u=void 0,r="";if(!(e>=2&&e<=36))return"";for(;i>0;)u=Math.floor(i%e),n.push(u),i=Math.floor(i/e);for(;!n.isEmpty();)r+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return r}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(n,r){o=[t,e],i=r,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?u=!1:(a=e.pop(),n.indexOf(a)!==o.indexOf(s)&&(u=!1)),r++;return!(!u||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,u;!function(r,s){o=[e,n(0)],i=s,void 0!==(u="function"==typeof i?i.apply(e,o):i)&&(t.exports=u)}(0,function(t,e){"use strict";function n(t,e,i,o,u,r,s){var a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){o.push(e.pop());var c={};c[u]=e.toString(),c[r]=i.toString(),c[s]=o.toString(),a.push(c)}else{n(t-1,e,o,i,u,s,r,a),o.push(e.pop());var f={};f[u]=e.toString(),f[r]=i.toString(),f[s]=o.toString(),a.push(f),n(t-1,i,e,o,r,u,s,a)}return a}function i(t){for(var e=new u.default,i=new u.default,o=new u.default,r=t;r>0;r--)e.push(r);return n(t,e,o,i,"source","helper","dest")}function o(t,e,n,i){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?u:(1===t?u.push([e,i]):(o(t-1,e,i,n,u),u.push([e,i]),o(t-1,n,e,i,u)),u)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=o;var u=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=6)}([function(t,e,n){var i,o,r;!function(n,u){o=[e],i=u,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t){"use strict";function e(t,e){return t===e?0:t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t),this.equalsFn=e,this.count=0}return r(t,[{key:"push",value:function(t){var e=new i.Node(t),n=void 0;if(null==this.head)this.head=e;else{for(n=this.head;null!=n.next;)n=n.next;n.next=e}this.count++}},{key:"getElementAt",value:function(t){if(t>=0&&t<=this.count){for(var e=this.head,n=0;n=0&&e<=this.count){var n=new i.Node(t),o=this.head;if(0===e)n.next=o,this.head=n;else{var r=this.getElementAt(e-1);n.next=r.next,r.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return r(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),l(e,[{key:"getLastElement",value:function(){for(var t=this.head,e=2;e<=this.size()&&null!=t;e++)t=t.next;return t}},{key:"push",value:function(t){var e=new o.Node(t),n=void 0;null==this.head?this.head=e:(n=this.getLastElement(),n.next=e),e.next=this.head,this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new o.Node(t),i=this.head;if(0===e)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getLastElement(),this.head=n,i.next=this.head);else{var r=this.getElementAt(e-1);n.next=r.next,r.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return r(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),l(e,[{key:"push",value:function(t){var e=new o.DoublyNode(t);null==this.head?(this.head=e,this.tail=e):(this.tail.next=e,e.prev=this.tail,this.tail=e),this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new o.DoublyNode(t),i=this.head;if(0===e)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(e===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var r=this.getElementAt(e-1);i=r.next,n.next=i,r.next=n,i.prev=n,n.prev=r}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;o(this,e);var u=r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return u.equalsFn=t,u.compareFn=i,u}return u(e,t),a(e,[{key:"push",value:function(t){if(this.isEmpty())l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"push",this).call(this,t);else{var n=this.getIndexNextSortedElement(t);l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,n)}}},{key:"insert",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,0===n?n:0);var i=this.getIndexNextSortedElement(t);return l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,i)}},{key:"getIndexNextSortedElement",value:function(t){for(var e=this.head,i=0;i1;){for(var u=0;u1&&o;)r=e.removeFront(),u=e.removeBack(),r!==u&&(o=!1);return o}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(u,s){o=[e,n(2)],i=s,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t,e,i,o,r,u,s){var a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){o.push(e.pop());var l={};l[r]=e.toString(),l[u]=i.toString(),l[s]=o.toString(),a.push(l)}else{n(t-1,e,o,i,r,s,u,a),o.push(e.pop());var f={};f[r]=e.toString(),f[u]=i.toString(),f[s]=o.toString(),a.push(f),n(t-1,i,e,o,u,r,s,a)}return a}function i(t){for(var e=new r.default,i=new r.default,o=new r.default,u=t;u>0;u--)e.push(u);return n(t,e,o,i,"source","helper","dest")}function o(t,e,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?r:(1===t?r.push([e,i]):(o(t-1,e,i,n,r),r.push([e,i]),o(t-1,n,e,i,r)),r)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=o;var r=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(u,s){o=[e,n(2)],i=s,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t){for(var e=new o.default,n=t,i=void 0,r="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)r+=e.pop().toString();return r}function i(t,e){var n=new o.default,i=t,r=void 0,u="";if(!(e>=2&&e<=36))return"";for(;i>0;)r=Math.floor(i%e),n.push(r),i=Math.floor(i/e);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(n,u){o=[t,e],i=u,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?r=!1:(a=e.pop(),n.indexOf(a)!==o.indexOf(s)&&(r=!1)),u++;return!(!r||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file diff --git a/src/js/data-structures/circular-linked-list.js b/src/js/data-structures/circular-linked-list.js new file mode 100644 index 00000000..b7e5f240 --- /dev/null +++ b/src/js/data-structures/circular-linked-list.js @@ -0,0 +1,79 @@ +import { defaultEquals } from '../util'; +import LinkedList from './linked-list'; +import { Node } from './models/linked-list-models'; + +export default class CircularLinkedList extends LinkedList { + constructor(equalsFn = defaultEquals) { + super(equalsFn); + } + getLastElement() { + let current = this.head; + for (let i = 2; i <= this.size() && current != null; i++) { + current = current.next; + } + return current; + } + push(element) { + const node = new Node(element); + let current; + if (this.head == null) { + this.head = node; + } else { + current = this.getLastElement(); + current.next = node; + } + // set node.next to head - to have circular list + node.next = this.head; + this.count++; + } + insert(element, index) { + if (index >= 0 && index <= this.count) { + const node = new Node(element); + let current = this.head; + if (index === 0) { + if (this.head == null) { + // if no node in list + this.head = node; + node.next = this.head; + } else { + node.next = current; + current = this.getLastElement(); + // update last element + this.head = node; + current.next = this.head; + } + } else { + const previous = this.getElementAt(index - 1); + node.next = previous.next; + previous.next = node; + } + this.count++; + return true; + } + return false; + } + removeAt(index) { + if (index >= 0 && index < this.count) { + let current = this.head; + if (index === 0) { + const removed = this.head; + if (this.size() === 1) { + this.head = undefined; + } else { + current = this.getLastElement(); + this.head = this.head.next; + current.next = this.head; + current = removed; + } + } else { + // no need to update last element for circular list + const previous = this.getElementAt(index - 1); + current = previous.next; + previous.next = current.next; + } + this.count--; + return current.element; + } + return undefined; + } +} diff --git a/src/js/data-structures/doubly-linked-list.js b/src/js/data-structures/doubly-linked-list.js new file mode 100644 index 00000000..cd6aaad8 --- /dev/null +++ b/src/js/data-structures/doubly-linked-list.js @@ -0,0 +1,130 @@ +import { defaultEquals } from '../util'; +import LinkedList from './linked-list'; +import { DoublyNode } from './models/linked-list-models'; + +export default class DoublyLinkedList extends LinkedList { + constructor(equalsFn = defaultEquals) { + super(equalsFn); + } + push(element) { + const node = new DoublyNode(element); + if (this.head == null) { + this.head = node; + this.tail = node; // NEW + } else { + // attach to the tail node // NEW + this.tail.next = node; + node.prev = this.tail; + this.tail = node; + } + this.count++; + } + insert(element, index) { + if (index >= 0 && index <= this.count) { + const node = new DoublyNode(element); + let current = this.head; + if (index === 0) { + if (this.head == null) { + // NEW + this.head = node; + this.tail = node; + } else { + node.next = this.head; + this.head.prev = node; // NEW + this.head = node; + } + } else if (index === this.count) { + // last item // NEW + current = this.tail; // {2} + current.next = node; + node.prev = current; + this.tail = node; + } else { + const previous = this.getElementAt(index - 1); + current = previous.next; + node.next = current; + previous.next = node; + current.prev = node; // NEW + node.prev = previous; // NEW + } + this.count++; + return true; + } + return false; + } + removeAt(index) { + if (index >= 0 && index < this.count) { + let current = this.head; + if (index === 0) { + this.head = this.head.next; // {1} + // if there is only one item, then we update tail as well //NEW + if (this.count === 1) { + // {2} + this.tail = undefined; + } else { + this.head.prev = undefined; // {3} + } + } else if (index === this.count - 1) { + // last item //NEW + current = this.tail; // {4} + this.tail = current.prev; + this.tail.next = undefined; + } else { + current = this.getElementAt(index); + const previous = current.prev; + // link previous with current's next - skip it to remove + previous.next = current.next; // {6} + current.next.prev = previous; // NEW + } + this.count--; + return current.element; + } + return undefined; + } + indexOf(element) { + let current = this.head; + let index = 0; + while (current != null) { + if (this.equalsFn(element, current.element)) { + return index; + } + index++; + current = current.next; + } + return -1; + } + getHead() { + return this.head; + } + getTail() { + return this.tail; + } + clear() { + super.clear(); + this.tail = undefined; + } + toString() { + if (this.head == null) { + return ''; + } + let objString = `${this.head.element}`; + let current = this.head.next; + while (current != null) { + objString = `${objString},${current.element}`; + current = current.next; + } + return objString; + } + inverseToString() { + if (this.tail == null) { + return ''; + } + let objString = `${this.tail.element}`; + let previous = this.tail.prev; + while (previous != null) { + objString = `${objString},${previous.element}`; + previous = previous.prev; + } + return objString; + } +} diff --git a/src/js/data-structures/linked-list.js b/src/js/data-structures/linked-list.js new file mode 100644 index 00000000..83fa3c16 --- /dev/null +++ b/src/js/data-structures/linked-list.js @@ -0,0 +1,105 @@ +import { defaultEquals } from '../util'; +import { Node } from './models/linked-list-models'; + +export default class LinkedList { + constructor(equalsFn = defaultEquals) { + this.equalsFn = equalsFn; + this.count = 0; + } + push(element) { + const node = new Node(element); + let current; + if (this.head == null) { + // catches null && undefined + this.head = node; + } else { + current = this.head; + while (current.next != null) { + current = current.next; + } + current.next = node; + } + this.count++; + } + getElementAt(index) { + if (index >= 0 && index <= this.count) { + let node = this.head; + for (let i = 0; i < index && node != null; i++) { + node = node.next; + } + return node; + } + return undefined; + } + insert(element, index) { + if (index >= 0 && index <= this.count) { + const node = new Node(element); + const current = this.head; + if (index === 0) { + node.next = current; + this.head = node; + } else { + const previous = this.getElementAt(index - 1); + node.next = previous.next; + previous.next = node; + } + this.count++; + return true; + } + return false; + } + removeAt(index) { + if (index >= 0 && index < this.count) { + let current = this.head; + if (index === 0) { + this.head = current.next; + } else { + const previous = this.getElementAt(index - 1); + current = previous.next; + previous.next = current.next; + } + this.count--; + return current.element; + } + return undefined; + } + remove(element) { + const index = this.indexOf(element); + return this.removeAt(index); + } + indexOf(element) { + let current = this.head; + for (let i = 0; i < this.size() && current != null; i++) { + if (this.equalsFn(element, current.element)) { + return i; + } + current = current.next; + } + return -1; + } + isEmpty() { + return this.size() === 0; + } + size() { + return this.count; + } + getHead() { + return this.head; + } + clear() { + this.head = undefined; + this.count = 0; + } + toString() { + if (this.head == null) { + return ''; + } + let objString = `${this.head.element}`; + let current = this.head.next; + for (let i = 1; i < this.size() && current != null; i++) { + objString = `${objString},${current.element}`; + current = current.next; + } + return objString; + } +} diff --git a/src/js/data-structures/models/linked-list-models.js b/src/js/data-structures/models/linked-list-models.js new file mode 100644 index 00000000..31f5dd95 --- /dev/null +++ b/src/js/data-structures/models/linked-list-models.js @@ -0,0 +1,12 @@ +export class Node { + constructor(element, next) { + this.element = element; + this.next = next; + } +} +export class DoublyNode extends Node { + constructor(element, next, prev) { + super(element, next); + this.prev = prev; + } +} diff --git a/src/js/data-structures/sorted-linked-list.js b/src/js/data-structures/sorted-linked-list.js new file mode 100644 index 00000000..7b3bd468 --- /dev/null +++ b/src/js/data-structures/sorted-linked-list.js @@ -0,0 +1,37 @@ +import { Compare, defaultCompare, defaultEquals } from '../util'; +import LinkedList from './linked-list'; + +export default class SortedLinkedList extends LinkedList { + constructor(equalsFn = defaultEquals, compareFn = defaultCompare) { + super(equalsFn); + this.equalsFn = equalsFn; + this.compareFn = compareFn; + } + push(element) { + if (this.isEmpty()) { + super.push(element); + } else { + const index = this.getIndexNextSortedElement(element); + super.insert(element, index); + } + } + insert(element, index = 0) { + if (this.isEmpty()) { + return super.insert(element, index === 0 ? index : 0); + } + const pos = this.getIndexNextSortedElement(element); + return super.insert(element, pos); + } + getIndexNextSortedElement(element) { + let current = this.head; + let i = 0; + for (; i < this.size() && current; i++) { + const comp = this.compareFn(element, current.element); + if (comp === Compare.LESS_THAN) { + return i; + } + current = current.next; + } + return i; + } +} diff --git a/src/js/index.js b/src/js/index.js index d81e7f32..ac0187bf 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -8,6 +8,15 @@ import StackArray from './data-structures/stack-array'; import Stack from './data-structures/stack'; import { parenthesesChecker } from './others/balanced-symbols'; +import * as _util from './util'; + +export { default as CircularLinkedList } from './data-structures/circular-linked-list'; +export { default as DoublyLinkedList } from './data-structures/doubly-linked-list'; +export { default as LinkedList } from './data-structures/linked-list'; +export { default as SortedLinkedList } from './data-structures/sorted-linked-list'; + +export const util = _util; + export { Stack, StackArray, diff --git a/src/js/util.js b/src/js/util.js new file mode 100644 index 00000000..501d2be8 --- /dev/null +++ b/src/js/util.js @@ -0,0 +1,15 @@ +export const Compare = { + LESS_THAN: -1, + BIGGER_THAN: 1 +}; + +export function defaultCompare(a, b) { + if (a === b) { + return 0; + } + return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN; +} + +export function defaultEquals(a, b) { + return a === b; +} diff --git a/test/js/data-structures/circular-linked-list.spec.js b/test/js/data-structures/circular-linked-list.spec.js new file mode 100644 index 00000000..aadb02ee --- /dev/null +++ b/test/js/data-structures/circular-linked-list.spec.js @@ -0,0 +1,342 @@ +import 'mocha'; +import { expect } from 'chai'; +import { CircularLinkedList } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('CircularLinkedList', () => { + let list; + let min; + let max; + + beforeEach(() => { + list = new CircularLinkedList(); + min = 1; + max = 3; + }); + + function pushesElements() { + for (let i = min; i <= max; i++) { + list.push(i); + } + } + + function verifyList() { + let current = list.getHead(); + for (let i = min; i <= max && current; i++) { + expect(current).to.not.be.an('undefined'); + if (current) { + // TS strictNullChecks + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(i); + if (i < max) { + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + // TS strictNullChecks + expect(current.next.element).to.equal(i + 1); + } + } else { + // circular list + expect(current.next).to.not.be.an('undefined'); + expect(current.next).to.equal(list.getHead()); + if (current.next) { + expect(current.next.element).to.equal(min); + } + } + current = current.next; + } + } + } + + it('starts empty', () => { + expect(list.size()).to.equal(0); + expect(list.isEmpty()).to.equal(true); + expect(list.getHead()).to.be.an('undefined'); + }); + + it('pushes elements', () => { + pushesElements(); + verifyList(); + }); + + it('returns element at specific index: invalid position', () => { + // list is empty + expect(list.getElementAt(3)).to.be.an('undefined'); + }); + + it('returns element at specific index', () => { + let node; + + pushesElements(); + + for (let i = min; i <= max; i++) { + node = list.getElementAt(i - 1); + expect(node).to.not.be.an('undefined'); + if (node) { + expect(node.element).to.equal(i); + } + } + }); + + it('inserts elements first position empty list', () => { + const element = 1; + max = element; + expect(list.insert(element, 0)).to.equal(true); + verifyList(); + }); + + it('inserts elements first position not empty list', () => { + max = 2; + expect(list.insert(max, 0)).to.equal(true); + + expect(list.insert(min, 0)).to.equal(true); + + verifyList(); + }); + + it('inserts elements invalid position empty list', () => { + expect(list.insert(1, 1)).to.equal(false); + }); + + it('inserts elements invalid position not empty list', () => { + const element = 1; + expect(list.insert(element, 0)).to.equal(true); + expect(list.insert(element, 2)).to.equal(false); + }); + + it('inserts elements in the middle of list', () => { + expect(list.insert(3, 0)).to.equal(true); + expect(list.insert(1, 0)).to.equal(true); + expect(list.insert(2, 1)).to.equal(true); + verifyList(); + }); + + it('inserts elements at the end of list', () => { + max = 5; + + for (let i = min; i <= max; i++) { + expect(list.insert(i, i - 1)).to.equal(true); + } + + verifyList(); + }); + + it('returns index of elements', () => { + let index; + + pushesElements(); + + for (let i = min; i <= max; i++) { + index = list.indexOf(i); + expect(index).to.equal(i - 1); + } + + expect(list.indexOf(max + 2)).to.equal(-1); + }); + + it('removes valid elements', () => { + let element; + + pushesElements(); + + const minIndex = min; + for (let i = minIndex; i <= max; i++) { + element = list.remove(i); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + min++; + verifyList(); + } + }); + + it('removes invalid elements', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.remove(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position empty list', () => { + let element; + + for (let i = min; i <= max; i++) { + element = list.removeAt(i - 1); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position not empty list', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.removeAt(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes first element list single element', () => { + const value = 1; + list.push(value); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(value); + + expect(list.getHead()).to.be.an('undefined'); + expect(list.isEmpty()).to.equal(true); + }); + + it('removes first element list multiple elements', () => { + pushesElements(); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(min); + + min = 2; + verifyList(); + }); + + it('removes element from middle of list', () => { + pushesElements(); // 1, 2, 3 + + const element = list.removeAt(1); // element 2 + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(2); + + // list needs to be [1, 3] + let current = list.getHead(); + + // element 1 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(min); + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + expect(current.next.element).to.equal(max); + current = current.next; + } + } + + // element 3 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(max); + expect(current.next).to.not.be.an('undefined'); + expect(current.next).to.equal(list.getHead()); + if (current.next) { + expect(current.next.element).to.equal(min); + } + } + }); + + it('removes element from end of list', () => { + let element; + + pushesElements(); + + const maxIndex = max; + for (let i = maxIndex; i >= min; i--) { + element = list.removeAt(i - 1); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + max--; + verifyList(); + } + }); + + it('returns the head of the list', () => { + expect(list.getHead()).to.be.an('undefined'); + + list.push(1); + expect(list.getHead()).to.not.be.an('undefined'); + }); + + it('returns the correct size', () => { + expect(list.size()).to.equal(0); + + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.size()).to.equal(i); + } + + const size = max; + for (let i = min; i <= max; i++) { + list.remove(i); + expect(list.size()).to.equal(size - i); + } + + expect(list.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(list.isEmpty()).to.equal(true); + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.isEmpty()).to.equal(false); + } + + for (let i = min; i < max; i++) { + list.remove(i); + expect(list.isEmpty()).to.equal(false); + } + list.remove(max); + expect(list.isEmpty()).to.equal(true); + + pushesElements(); + expect(list.isEmpty()).to.equal(false); + + list.clear(); + expect(list.isEmpty()).to.equal(true); + }); + + it('clears the list', () => { + expect(list.size()).to.equal(0); + list.clear(); + expect(list.size()).to.equal(0); + pushesElements(); + expect(list.size()).to.greaterThan(0); + list.clear(); + expect(list.size()).to.equal(0); + }); + + it('returns toString primitive types', () => { + expect(list.toString()).to.equal(''); + + list.push(1); + expect(list.toString()).to.equal('1'); + + list.push(2); + expect(list.toString()).to.equal('1,2'); + + list.clear(); + expect(list.toString()).to.equal(''); + }); + + it('returns toString primitive types: string', () => { + const ds = new CircularLinkedList(); + ds.push('el1'); + expect(ds.toString()).to.equal('el1'); + + ds.push('el2'); + expect(ds.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + const ds = new CircularLinkedList(); + expect(ds.toString()).to.equal(''); + + ds.push(new MyObj(1, 2)); + expect(ds.toString()).to.equal('1|2'); + + ds.push(new MyObj(3, 4)); + expect(ds.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/js/data-structures/doubly-linked-list.spec.js b/test/js/data-structures/doubly-linked-list.spec.js new file mode 100644 index 00000000..5e7fd6a4 --- /dev/null +++ b/test/js/data-structures/doubly-linked-list.spec.js @@ -0,0 +1,406 @@ +import 'mocha'; +import { expect } from 'chai'; +import { DoublyLinkedList } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('DoublyLinkedList', () => { + let list; + let min; + let max; + + beforeEach(() => { + list = new DoublyLinkedList(); + min = 1; + max = 3; + }); + + function pushesElements() { + for (let i = min; i <= max; i++) { + list.push(i); + } + } + + function verifyNode(current, i) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(i); + + // verify next node + if (i < max) { + expect(current.next).to.not.be.an('undefined'); + // TS strictNullChecks + if (current.next) { + expect(current.next.element).to.equal(i + 1); + } + } else { + expect(current.next).to.be.an('undefined'); + } + + // verify previous node + if (i > min) { + expect(current.prev).to.not.be.an('undefined'); + if (current.prev) { + expect(current.prev.element).to.equal(i - 1); + } + } else { + expect(current.prev).to.be.an('undefined'); + } + } + + function verifyListFromTail() { + let current = list.getTail(); + for (let i = max; i >= min; i--) { + expect(current).to.not.be.an('undefined'); + // TS strictNullChecks + if (current) { + verifyNode(current, i); + current = current.prev; + } + } + } + + function verifyList() { + let current = list.getHead(); + for (let i = min; i <= max; i++) { + expect(current).to.not.be.an('undefined'); + // TS strictNullChecks + if (current) { + verifyNode(current, i); + current = current.next; + } + } + verifyListFromTail(); + } + + it('starts empty', () => { + expect(list.size()).to.equal(0); + expect(list.isEmpty()).to.equal(true); + expect(list.getHead()).to.be.an('undefined'); + expect(list.getTail()).to.be.an('undefined'); + }); + + it('pushes elements', () => { + pushesElements(); + verifyList(); + }); + + it('returns element at specific index: invalid position', () => { + // list is empty + expect(list.getElementAt(3)).to.be.an('undefined'); + }); + + it('returns element at specific index', () => { + let node; + + pushesElements(); + + for (let i = min; i <= max; i++) { + node = list.getElementAt(i - 1); + expect(node).to.not.be.an('undefined'); + if (node) { + expect(node.element).to.equal(i); + } + } + }); + + it('inserts elements first position empty list', () => { + const element = 1; + max = element; + expect(list.insert(element, 0)).to.equal(true); + verifyList(); + }); + + it('inserts elements first position not empty list', () => { + max = 2; + expect(list.insert(max, 0)).to.equal(true); + + expect(list.insert(min, 0)).to.equal(true); + + verifyList(); + }); + + it('inserts elements invalid position empty list', () => { + expect(list.insert(1, 1)).to.equal(false); + }); + + it('inserts elements invalid position not empty list', () => { + const element = 1; + expect(list.insert(element, 0)).to.equal(true); + expect(list.insert(element, 2)).to.equal(false); + }); + + it('inserts elements at the end of list', () => { + max = 5; + + for (let i = min; i <= max; i++) { + expect(list.insert(i, i - 1)).to.equal(true); + } + + verifyList(); + }); + + it('inserts elements in the middle of list', () => { + expect(list.insert(3, 0)).to.equal(true); + expect(list.insert(1, 0)).to.equal(true); + expect(list.insert(2, 1)).to.equal(true); + verifyList(); + }); + + it('returns index of elements', () => { + let index; + + pushesElements(); + + for (let i = min; i <= max; i++) { + index = list.indexOf(i); + expect(index).to.equal(i - 1); + } + + expect(list.indexOf(max + 2)).to.equal(-1); + }); + + it('removes invalid elements', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.remove(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes valid elements', () => { + let element; + + pushesElements(); + + for (let i = min; i <= max; i++) { + element = list.remove(i); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + } + }); + + it('removes element invalid position empty list', () => { + let element; + + for (let i = min; i <= max; i++) { + element = list.removeAt(i - 1); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position not empty list', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.removeAt(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes first element list single element', () => { + const value = 1; + list.push(value); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(value); + + expect(list.getHead()).to.be.an('undefined'); + expect(list.getTail()).to.be.an('undefined'); + expect(list.isEmpty()).to.equal(true); + }); + + it('removes first element list multiple elements', () => { + pushesElements(); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(min); + + min = 2; + verifyList(); + }); + + it('removes element from end of list', () => { + let element; + + pushesElements(); + + const maxIndex = max; + for (let i = maxIndex; i >= min; i--) { + element = list.removeAt(i - 1); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + max--; + verifyList(); + } + }); + + it('removes element from middle of list', () => { + pushesElements(); // 1, 2, 3 + + const element = list.removeAt(1); // element 2 + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(2); + + // list needs to be [1, 3] + let current = list.getHead(); + + // element 1 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(1); + expect(current.prev).to.be.an('undefined'); + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + expect(current.next.element).to.equal(3); + current = current.next; + } + } + + // element 3 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(3); + expect(current.next).to.be.an('undefined'); + expect(current.prev).to.not.be.an('undefined'); + if (current.prev) { + expect(current.prev.element).to.equal(1); + } + } + }); + + it('returns the head of the list', () => { + expect(list.getHead()).to.be.an('undefined'); + + list.push(1); + expect(list.getHead()).to.not.be.an('undefined'); + }); + + it('returns the tail of the list', () => { + expect(list.getTail()).to.be.an('undefined'); + + list.push(1); + expect(list.getTail()).to.not.be.an('undefined'); + }); + + it('returns the correct size', () => { + expect(list.size()).to.equal(0); + + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.size()).to.equal(i); + } + + const size = max; + for (let i = min; i <= max; i++) { + list.remove(i); + expect(list.size()).to.equal(size - i); + } + + expect(list.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(list.isEmpty()).to.equal(true); + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.isEmpty()).to.equal(false); + } + + for (let i = min; i < max; i++) { + list.remove(i); + expect(list.isEmpty()).to.equal(false); + } + list.remove(max); + expect(list.isEmpty()).to.equal(true); + + pushesElements(); + expect(list.isEmpty()).to.equal(false); + + list.clear(); + expect(list.isEmpty()).to.equal(true); + }); + + it('clears the list', () => { + expect(list.size()).to.equal(0); + list.clear(); + expect(list.size()).to.equal(0); + pushesElements(); + expect(list.size()).to.greaterThan(0); + list.clear(); + expect(list.size()).to.equal(0); + }); + + it('returns toString primitive types', () => { + expect(list.toString()).to.equal(''); + + list.push(1); + expect(list.toString()).to.equal('1'); + + list.push(2); + expect(list.toString()).to.equal('1,2'); + + list.clear(); + expect(list.toString()).to.equal(''); + }); + + it('returns toString primitive types: string', () => { + const ds = new DoublyLinkedList(); + ds.push('el1'); + expect(ds.toString()).to.equal('el1'); + + ds.push('el2'); + expect(ds.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + const ds = new DoublyLinkedList(); + expect(ds.toString()).to.equal(''); + + ds.push(new MyObj(1, 2)); + expect(ds.toString()).to.equal('1|2'); + + ds.push(new MyObj(3, 4)); + expect(ds.toString()).to.equal('1|2,3|4'); + }); + + it('returns inverseToString primitive types', () => { + expect(list.inverseToString()).to.equal(''); + + list.push(1); + expect(list.inverseToString()).to.equal('1'); + + list.push(2); + expect(list.inverseToString()).to.equal('2,1'); + + list.clear(); + expect(list.inverseToString()).to.equal(''); + }); + + it('returns inverseToString primitive types: string', () => { + const ds = new DoublyLinkedList(); + ds.push('el1'); + expect(ds.inverseToString()).to.equal('el1'); + + ds.push('el2'); + expect(ds.inverseToString()).to.equal('el2,el1'); + }); + + it('returns inverseToString objects', () => { + const ds = new DoublyLinkedList(); + expect(ds.inverseToString()).to.equal(''); + + ds.push(new MyObj(1, 2)); + expect(ds.inverseToString()).to.equal('1|2'); + + ds.push(new MyObj(3, 4)); + expect(ds.inverseToString()).to.equal('3|4,1|2'); + }); +}); diff --git a/test/js/data-structures/linked-list.spec.js b/test/js/data-structures/linked-list.spec.js new file mode 100644 index 00000000..4d9f19c6 --- /dev/null +++ b/test/js/data-structures/linked-list.spec.js @@ -0,0 +1,330 @@ +import 'mocha'; +import { expect } from 'chai'; +import { LinkedList, util } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('LinkedList', () => { + let list; + let min; + let max; + + beforeEach(() => { + list = new LinkedList(util.defaultEquals); + min = 1; + max = 3; + }); + + function pushesElements() { + for (let i = min; i <= max; i++) { + list.push(i); + } + } + + function verifyList() { + let current = list.getHead(); + for (let i = min; i <= max && current; i++) { + expect(current).to.not.be.an('undefined'); + if (current) { + // TS strictNullChecks + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(i); + if (i < max) { + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + // TS strictNullChecks + expect(current.next.element).to.equal(i + 1); + } + } else { + expect(current.next).to.be.an('undefined'); + } + current = current.next; + } + } + } + + it('starts empty', () => { + expect(list.size()).to.equal(0); + expect(list.isEmpty()).to.equal(true); + expect(list.getHead()).to.be.an('undefined'); + }); + + it('pushes elements', () => { + pushesElements(); + verifyList(); + }); + + it('returns element at specific index: invalid position', () => { + // list is empty + expect(list.getElementAt(3)).to.be.an('undefined'); + }); + + it('returns element at specific index', () => { + let node; + + pushesElements(); + + for (let i = min; i <= max; i++) { + node = list.getElementAt(i - 1); + expect(node).to.not.be.an('undefined'); + if (node) { + expect(node.element).to.equal(i); + } + } + }); + + it('inserts elements first position empty list', () => { + const element = 1; + max = element; + expect(list.insert(element, 0)).to.equal(true); + verifyList(); + }); + + it('inserts elements first position not empty list', () => { + max = 2; + expect(list.insert(max, 0)).to.equal(true); + + expect(list.insert(min, 0)).to.equal(true); + + verifyList(); + }); + + it('inserts elements invalid position empty list', () => { + expect(list.insert(1, 1)).to.equal(false); + }); + + it('inserts elements invalid position not empty list', () => { + const element = 1; + expect(list.insert(element, 0)).to.equal(true); + expect(list.insert(element, 2)).to.equal(false); + }); + + it('inserts elements in the middle of list', () => { + expect(list.insert(3, 0)).to.equal(true); + expect(list.insert(1, 0)).to.equal(true); + expect(list.insert(2, 1)).to.equal(true); + verifyList(); + }); + + it('inserts elements at the end of list', () => { + max = 5; + + for (let i = min; i <= max; i++) { + expect(list.insert(i, i - 1)).to.equal(true); + } + + verifyList(); + }); + + it('returns index of elements', () => { + let index; + + pushesElements(); + + for (let i = min; i <= max; i++) { + index = list.indexOf(i); + expect(index).to.equal(i - 1); + } + + expect(list.indexOf(max + 2)).to.equal(-1); + }); + + it('removes valid elements', () => { + let element; + + pushesElements(); + + for (let i = min; i <= max; i++) { + element = list.remove(i); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + } + }); + + it('removes invalid elements', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.remove(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position empty list', () => { + let element; + + for (let i = min; i <= max; i++) { + element = list.removeAt(i - 1); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position not empty list', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.removeAt(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes first element list single element', () => { + const value = 1; + list.push(value); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(value); + + expect(list.getHead()).to.be.an('undefined'); + expect(list.isEmpty()).to.equal(true); + }); + + it('removes first element list multiple elements', () => { + pushesElements(); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(min); + + min = 2; + verifyList(); + }); + + it('removes element from middle of list', () => { + pushesElements(); // 1, 2, 3 + + const element = list.removeAt(1); // element 2 + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(2); + + // list needs to be [1, 3] + let current = list.getHead(); + + // element 1 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(1); + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + expect(current.next.element).to.equal(3); + current = current.next; + } + } + + // element 3 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(3); + expect(current.next).to.be.an('undefined'); + } + }); + + it('removes element from end of list', () => { + let element; + + pushesElements(); + + const maxIndex = max; + for (let i = maxIndex; i >= min; i--) { + element = list.removeAt(i - 1); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + max--; + verifyList(); + } + }); + + it('returns the head of the list', () => { + expect(list.getHead()).to.be.an('undefined'); + + list.push(1); + expect(list.getHead()).to.not.be.an('undefined'); + }); + + it('returns the correct size', () => { + expect(list.size()).to.equal(0); + + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.size()).to.equal(i); + } + + const size = max; + for (let i = min; i <= max; i++) { + list.remove(i); + expect(list.size()).to.equal(size - i); + } + + expect(list.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(list.isEmpty()).to.equal(true); + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.isEmpty()).to.equal(false); + } + + for (let i = min; i < max; i++) { + list.remove(i); + expect(list.isEmpty()).to.equal(false); + } + list.remove(max); + expect(list.isEmpty()).to.equal(true); + + pushesElements(); + expect(list.isEmpty()).to.equal(false); + + list.clear(); + expect(list.isEmpty()).to.equal(true); + }); + + it('clears the list', () => { + expect(list.size()).to.equal(0); + list.clear(); + expect(list.size()).to.equal(0); + pushesElements(); + expect(list.size()).to.greaterThan(0); + list.clear(); + expect(list.size()).to.equal(0); + }); + + it('returns toString primitive types', () => { + expect(list.toString()).to.equal(''); + + list.push(1); + expect(list.toString()).to.equal('1'); + + list.push(2); + expect(list.toString()).to.equal('1,2'); + + list.clear(); + expect(list.toString()).to.equal(''); + }); + + it('returns toString primitive types: string', () => { + const ds = new LinkedList(); + ds.push('el1'); + expect(ds.toString()).to.equal('el1'); + + ds.push('el2'); + expect(ds.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + const ds = new LinkedList(); + expect(ds.toString()).to.equal(''); + + ds.push(new MyObj(1, 2)); + expect(ds.toString()).to.equal('1|2'); + + ds.push(new MyObj(3, 4)); + expect(ds.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/js/data-structures/my-obj.js b/test/js/data-structures/my-obj.js new file mode 100644 index 00000000..a4d2f5f3 --- /dev/null +++ b/test/js/data-structures/my-obj.js @@ -0,0 +1,9 @@ +export default class MyObj { + constructor(el1, el2) { + this.el1 = el1; + this.el2 = el2; + } + toString() { + return `${this.el1.toString()}|${this.el2.toString()}`; + } +} diff --git a/test/js/data-structures/sorted-linked-list.spec.js b/test/js/data-structures/sorted-linked-list.spec.js new file mode 100644 index 00000000..5ccaaff9 --- /dev/null +++ b/test/js/data-structures/sorted-linked-list.spec.js @@ -0,0 +1,340 @@ +import 'mocha'; +import { expect } from 'chai'; +import { SortedLinkedList, util } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('SortedLinkedList', () => { + let list; + let min; + let max; + + beforeEach(() => { + list = new SortedLinkedList(); + min = 1; + max = 3; + }); + + function pushesElements() { + for (let i = max; i >= min; i--) { + list.push(i); + } + } + + function verifyList() { + let current = list.getHead(); + for (let i = min; i <= max && current; i++) { + expect(current).to.not.be.an('undefined'); + if (current) { + // TS strictNullChecks + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(i); + if (i < max) { + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + // TS strictNullChecks + expect(current.next.element).to.equal(i + 1); + } + } else { + expect(current.next).to.be.an('undefined'); + } + current = current.next; + } + } + } + + it('starts empty', () => { + expect(list.size()).to.equal(0); + expect(list.isEmpty()).to.equal(true); + expect(list.getHead()).to.be.an('undefined'); + }); + + it('pushes elements', () => { + pushesElements(); + verifyList(); + }); + + it('returns element at specific index: invalid position', () => { + // list is empty + expect(list.getElementAt(3)).to.be.an('undefined'); + }); + + it('returns element at specific index', () => { + let node; + + pushesElements(); + + for (let i = min; i <= max; i++) { + node = list.getElementAt(i - 1); + expect(node).to.not.be.an('undefined'); + if (node) { + expect(node.element).to.equal(i); + } + } + }); + + it('inserts elements first position empty list', () => { + const element = 1; + max = element; + expect(list.insert(element, 0)).to.equal(true); + verifyList(); + }); + + it('inserts elements first position not empty list', () => { + max = 2; + expect(list.insert(max)).to.equal(true); + + expect(list.insert(min, 0)).to.equal(true); + + verifyList(); + }); + + it('inserts elements invalid position empty list', () => { + // sorted list will ignore the index position + expect(list.insert(1, 1)).to.equal(true); + }); + + it('inserts elements invalid position not empty list', () => { + // sorted list will ignore the index position + const element = 1; + expect(list.insert(element, 0)).to.equal(true); + expect(list.insert(element, 2)).to.equal(true); + }); + + it('inserts elements in the middle of list', () => { + expect(list.insert(3, 0)).to.equal(true); + expect(list.insert(1, 0)).to.equal(true); + expect(list.insert(2, 1)).to.equal(true); + verifyList(); + }); + + it('inserts elements at the end of list', () => { + max = 5; + + for (let i = min; i <= max; i++) { + expect(list.insert(i, i - 1)).to.equal(true); + } + + verifyList(); + }); + + it('returns index of elements', () => { + let index; + + pushesElements(); + + for (let i = min; i <= max; i++) { + index = list.indexOf(i); + expect(index).to.equal(i - 1); + } + + expect(list.indexOf(max + 2)).to.equal(-1); + }); + + it('removes valid elements', () => { + let element; + + pushesElements(); + + for (let i = min; i <= max; i++) { + element = list.remove(i); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + } + }); + + it('removes invalid elements', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.remove(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position empty list', () => { + let element; + + for (let i = min; i <= max; i++) { + element = list.removeAt(i - 1); + expect(element).to.be.an('undefined'); + } + }); + + it('removes element invalid position not empty list', () => { + let element; + + pushesElements(); + + for (let i = max + 2; i <= max + 4; i++) { + element = list.removeAt(i); + expect(element).to.be.an('undefined'); + } + }); + + it('removes first element list single element', () => { + const value = 1; + list.push(value); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(value); + + expect(list.getHead()).to.be.an('undefined'); + expect(list.isEmpty()).to.equal(true); + }); + + it('removes first element list multiple elements', () => { + pushesElements(); + + const element = list.removeAt(0); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(min); + + min = 2; + verifyList(); + }); + + it('removes element from middle of list', () => { + pushesElements(); // 1, 2, 3 + + const element = list.removeAt(1); // element 2 + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(2); + + // list needs to be [1, 3] + let current = list.getHead(); + + // element 1 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(1); + expect(current.next).to.not.be.an('undefined'); + if (current.next) { + expect(current.next.element).to.equal(3); + current = current.next; + } + } + + // element 3 + expect(current).to.not.be.an('undefined'); + if (current) { + expect(current.element).to.not.be.an('undefined'); + expect(current.element).to.equal(3); + expect(current.next).to.be.an('undefined'); + } + }); + + it('removes element from end of list', () => { + let element; + + pushesElements(); + + const maxIndex = max; + for (let i = maxIndex; i >= min; i--) { + element = list.removeAt(i - 1); + expect(element).to.not.be.an('undefined'); + expect(element).to.equal(i); + max--; + verifyList(); + } + }); + + it('returns the head of the list', () => { + expect(list.getHead()).to.be.an('undefined'); + + list.push(1); + expect(list.getHead()).to.not.be.an('undefined'); + }); + + it('returns the correct size', () => { + expect(list.size()).to.equal(0); + + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.size()).to.equal(i); + } + + const size = max; + for (let i = min; i <= max; i++) { + list.remove(i); + expect(list.size()).to.equal(size - i); + } + + expect(list.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(list.isEmpty()).to.equal(true); + for (let i = min; i <= max; i++) { + list.push(i); + expect(list.isEmpty()).to.equal(false); + } + + for (let i = min; i < max; i++) { + list.remove(i); + expect(list.isEmpty()).to.equal(false); + } + list.remove(max); + expect(list.isEmpty()).to.equal(true); + + pushesElements(); + expect(list.isEmpty()).to.equal(false); + + list.clear(); + expect(list.isEmpty()).to.equal(true); + }); + + it('clears the list', () => { + expect(list.size()).to.equal(0); + list.clear(); + expect(list.size()).to.equal(0); + pushesElements(); + expect(list.size()).to.greaterThan(0); + list.clear(); + expect(list.size()).to.equal(0); + }); + + it('returns toString primitive types', () => { + expect(list.toString()).to.equal(''); + + list.push(1); + expect(list.toString()).to.equal('1'); + + list.push(2); + expect(list.toString()).to.equal('1,2'); + + list.clear(); + expect(list.toString()).to.equal(''); + }); + + function stringCompare(a, b) { + return a.localeCompare(b); + } + + it('returns toString primitive types: string', () => { + const ds = new SortedLinkedList(util.defaultEquals, stringCompare); + ds.push('el2'); + expect(ds.toString()).to.equal('el2'); + + ds.push('el1'); + expect(ds.toString()).to.equal('el1,el2'); + }); + + function myObjCompare(a, b) { + return a.toString().localeCompare(b.toString()); + } + + it('returns toString objects', () => { + const ds = new SortedLinkedList(util.defaultEquals, myObjCompare); + expect(ds.toString()).to.equal(''); + + ds.push(new MyObj(3, 4)); + expect(ds.toString()).to.equal('3|4'); + + ds.push(new MyObj(1, 2)); + expect(ds.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/ts/data-structures/circular-linked-list.spec.ts b/test/ts/data-structures/circular-linked-list.spec.ts index 78ac9a47..78312614 100644 --- a/test/ts/data-structures/circular-linked-list.spec.ts +++ b/test/ts/data-structures/circular-linked-list.spec.ts @@ -8,7 +8,7 @@ describe('CircularLinkedList', () => { let min: number; let max: number; - beforeEach(function() { + beforeEach(() => { list = new CircularLinkedList(); min = 1; max = 3; diff --git a/test/ts/data-structures/doubly-linked-list.spec.ts b/test/ts/data-structures/doubly-linked-list.spec.ts index d5e41556..76abb29a 100644 --- a/test/ts/data-structures/doubly-linked-list.spec.ts +++ b/test/ts/data-structures/doubly-linked-list.spec.ts @@ -8,7 +8,7 @@ describe('DoublyLinkedList', () => { let min: number; let max: number; - beforeEach(function() { + beforeEach(() => { list = new DoublyLinkedList(); min = 1; max = 3; diff --git a/test/ts/data-structures/linked-list.spec.ts b/test/ts/data-structures/linked-list.spec.ts index 32665364..116abbd9 100644 --- a/test/ts/data-structures/linked-list.spec.ts +++ b/test/ts/data-structures/linked-list.spec.ts @@ -8,7 +8,7 @@ describe('LinkedList', () => { let min: number; let max: number; - beforeEach(function() { + beforeEach(() => { list = new LinkedList(util.defaultEquals); min = 1; max = 3; diff --git a/test/ts/data-structures/sorted-linked-list.spec.ts b/test/ts/data-structures/sorted-linked-list.spec.ts index 6d05333f..02634f72 100644 --- a/test/ts/data-structures/sorted-linked-list.spec.ts +++ b/test/ts/data-structures/sorted-linked-list.spec.ts @@ -8,7 +8,7 @@ describe('SortedLinkedList', () => { let min: number; let max: number; - beforeEach(function() { + beforeEach(() => { list = new SortedLinkedList(); min = 1; max = 3; From 438f96ecd6c3d8d1d15e035894cc4300c44592b5 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 15 Oct 2017 13:12:10 -0200 Subject: [PATCH 013/188] chapter 03: [Stacks] --- test/ts/data-structures/stack-array.spec.ts | 2 +- test/ts/data-structures/stack.spec.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/ts/data-structures/stack-array.spec.ts b/test/ts/data-structures/stack-array.spec.ts index f41f2429..0894d7de 100644 --- a/test/ts/data-structures/stack-array.spec.ts +++ b/test/ts/data-structures/stack-array.spec.ts @@ -5,7 +5,7 @@ import StackArray from '../../../src/ts/data-structures/stack-array'; describe('StackArray', () => { let stack: StackArray; - beforeEach(function() { + beforeEach(() => { stack = new StackArray(); }); diff --git a/test/ts/data-structures/stack.spec.ts b/test/ts/data-structures/stack.spec.ts index f1cc8a61..731e586c 100644 --- a/test/ts/data-structures/stack.spec.ts +++ b/test/ts/data-structures/stack.spec.ts @@ -5,7 +5,7 @@ import Stack from '../../../src/ts/data-structures/stack'; describe('Stack', () => { let stack: Stack; - beforeEach(function() { + beforeEach(() => { stack = new Stack(); }); From 77219d34aa5a01b94c23824d48491ac2743f5d56 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 15 Oct 2017 13:34:25 -0200 Subject: [PATCH 014/188] chapter 05: [LinkedLists] --- README.md | 3 + examples/PacktDataStructuresAlgorithms.min.js | 2 +- src/js/data-structures/stack-linked-list.js | 35 ++++ src/js/index.js | 5 +- src/ts/data-structures/doubly-linked-list.ts | 1 - src/ts/data-structures/stack-linked-list.ts | 44 +++++ src/ts/index.ts | 6 +- .../data-structures/stack-linked-list.spec.js | 157 +++++++++++++++++ .../data-structures/stack-linked-list.spec.ts | 159 ++++++++++++++++++ 9 files changed, 406 insertions(+), 6 deletions(-) create mode 100644 src/js/data-structures/stack-linked-list.js create mode 100644 src/ts/data-structures/stack-linked-list.ts create mode 100644 test/js/data-structures/stack-linked-list.spec.js create mode 100644 test/ts/data-structures/stack-linked-list.spec.ts diff --git a/README.md b/README.md index 4c01adb2..0aa18220 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,9 @@ Work in Progress. ### Third Edition Updates * Algorithms using ES2015+ +* All chapters reviewed and rewritten +* New data structures and algorithms +* Three (3) new chapters * Creation of a Data Structures and Algorithms library that can be used in the browser or with Node.js * Algorithms tested with Mocha + Chai (test code available in `test` directory) * TypeScript version of the source code included diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index ff1b255b..1fb34787 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=6)}([function(t,e,n){var i,o,r;!function(n,u){o=[e],i=u,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t){"use strict";function e(t,e){return t===e?0:t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t),this.equalsFn=e,this.count=0}return r(t,[{key:"push",value:function(t){var e=new i.Node(t),n=void 0;if(null==this.head)this.head=e;else{for(n=this.head;null!=n.next;)n=n.next;n.next=e}this.count++}},{key:"getElementAt",value:function(t){if(t>=0&&t<=this.count){for(var e=this.head,n=0;n=0&&e<=this.count){var n=new i.Node(t),o=this.head;if(0===e)n.next=o,this.head=n;else{var r=this.getElementAt(e-1);n.next=r.next,r.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return r(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),l(e,[{key:"getLastElement",value:function(){for(var t=this.head,e=2;e<=this.size()&&null!=t;e++)t=t.next;return t}},{key:"push",value:function(t){var e=new o.Node(t),n=void 0;null==this.head?this.head=e:(n=this.getLastElement(),n.next=e),e.next=this.head,this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new o.Node(t),i=this.head;if(0===e)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getLastElement(),this.head=n,i.next=this.head);else{var r=this.getElementAt(e-1);n.next=r.next,r.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return r(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),l(e,[{key:"push",value:function(t){var e=new o.DoublyNode(t);null==this.head?(this.head=e,this.tail=e):(this.tail.next=e,e.prev=this.tail,this.tail=e),this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new o.DoublyNode(t),i=this.head;if(0===e)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(e===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var r=this.getElementAt(e-1);i=r.next,n.next=i,r.next=n,i.prev=n,n.prev=r}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;o(this,e);var u=r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return u.equalsFn=t,u.compareFn=i,u}return u(e,t),a(e,[{key:"push",value:function(t){if(this.isEmpty())l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"push",this).call(this,t);else{var n=this.getIndexNextSortedElement(t);l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,n)}}},{key:"insert",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,0===n?n:0);var i=this.getIndexNextSortedElement(t);return l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,i)}},{key:"getIndexNextSortedElement",value:function(t){for(var e=this.head,i=0;i1;){for(var u=0;u1&&o;)r=e.removeFront(),u=e.removeBack(),r!==u&&(o=!1);return o}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(u,s){o=[e,n(2)],i=s,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t,e,i,o,r,u,s){var a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){o.push(e.pop());var l={};l[r]=e.toString(),l[u]=i.toString(),l[s]=o.toString(),a.push(l)}else{n(t-1,e,o,i,r,s,u,a),o.push(e.pop());var f={};f[r]=e.toString(),f[u]=i.toString(),f[s]=o.toString(),a.push(f),n(t-1,i,e,o,u,r,s,a)}return a}function i(t){for(var e=new r.default,i=new r.default,o=new r.default,u=t;u>0;u--)e.push(u);return n(t,e,o,i,"source","helper","dest")}function o(t,e,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?r:(1===t?r.push([e,i]):(o(t-1,e,i,n,r),r.push([e,i]),o(t-1,n,e,i,r)),r)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=o;var r=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(u,s){o=[e,n(2)],i=s,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t){for(var e=new o.default,n=t,i=void 0,r="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)r+=e.pop().toString();return r}function i(t,e){var n=new o.default,i=t,r=void 0,u="";if(!(e>=2&&e<=36))return"";for(;i>0;)r=Math.floor(i%e),n.push(r),i=Math.floor(i/e);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(n,u){o=[t,e],i=u,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?r=!1:(a=e.pop(),n.indexOf(a)!==o.indexOf(s)&&(r=!1)),u++;return!(!r||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=7)}([function(t,e,n){var i,r,o;!function(n,u){r=[e],i=u,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t){"use strict";function e(t,e){return t===e?0:t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,t),this.equalsFn=e,this.count=0}return o(t,[{key:"push",value:function(t){var e=new i.Node(t),n=void 0;if(null==this.head)this.head=e;else{for(n=this.head;null!=n.next;)n=n.next;n.next=e}this.count++}},{key:"getElementAt",value:function(t){if(t>=0&&t<=this.count){for(var e=this.head,n=0;n=0&&e<=this.count){var n=new i.Node(t),r=this.head;if(0===e)n.next=r,this.head=n;else{var o=this.getElementAt(e-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),f(e,[{key:"push",value:function(t){var e=new r.DoublyNode(t);null==this.head?(this.head=e,this.tail=e):(this.tail.next=e,e.prev=this.tail,this.tail=e),this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new r.DoublyNode(t),i=this.head;if(0===e)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(e===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var o=this.getElementAt(e-1);i=o.next,n.next=i,o.next=n,i.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),f(e,[{key:"getLastElement",value:function(){for(var t=this.head,e=2;e<=this.size()&&null!=t;e++)t=t.next;return t}},{key:"push",value:function(t){var e=new r.Node(t),n=void 0;null==this.head?this.head=e:(n=this.getLastElement(),n.next=e),e.next=this.head,this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new r.Node(t),i=this.head;if(0===e)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getLastElement(),this.head=n,i.next=this.head);else{var o=this.getElementAt(e-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;r(this,e);var u=o(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return u.equalsFn=t,u.compareFn=i,u}return u(e,t),a(e,[{key:"push",value:function(t){if(this.isEmpty())f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"push",this).call(this,t);else{var n=this.getIndexNextSortedElement(t);f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,n)}}},{key:"insert",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,0===n?n:0);var i=this.getIndexNextSortedElement(t);return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,i)}},{key:"getIndexNextSortedElement",value:function(t){for(var e=this.head,i=0;i1;){for(var u=0;u1&&r;)o=e.removeFront(),u=e.removeBack(),o!==u&&(r=!1);return r}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(u,s){r=[e,n(2)],i=s,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t,e,i,r,o,u,s){var a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){r.push(e.pop());var f={};f[o]=e.toString(),f[u]=i.toString(),f[s]=r.toString(),a.push(f)}else{n(t-1,e,r,i,o,s,u,a),r.push(e.pop());var l={};l[o]=e.toString(),l[u]=i.toString(),l[s]=r.toString(),a.push(l),n(t-1,i,e,r,u,o,s,a)}return a}function i(t){for(var e=new o.default,i=new o.default,r=new o.default,u=t;u>0;u--)e.push(u);return n(t,e,r,i,"source","helper","dest")}function r(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([e,i]):(r(t-1,e,i,n,o),o.push([e,i]),r(t-1,n,e,i,o)),o)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=r;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(u,s){r=[e,n(2)],i=s,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t){for(var e=new r.default,n=t,i=void 0,o="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)o+=e.pop().toString();return o}function i(t,e){var n=new r.default,i=t,o=void 0,u="";if(!(e>=2&&e<=36))return"";for(;i>0;)o=Math.floor(i%e),n.push(o),i=Math.floor(i/e);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var r=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(n,u){r=[t,e],i=u,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?o=!1:(a=e.pop(),n.indexOf(a)!==r.indexOf(s)&&(o=!1)),u++;return!(!o||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file diff --git a/src/js/data-structures/stack-linked-list.js b/src/js/data-structures/stack-linked-list.js new file mode 100644 index 00000000..cab8c5d5 --- /dev/null +++ b/src/js/data-structures/stack-linked-list.js @@ -0,0 +1,35 @@ +import DoublyLinkedList from './doubly-linked-list'; + +export default class StackLinkedList { + constructor() { + this.items = new DoublyLinkedList(); + } + push(element) { + this.items.push(element); + } + pop() { + if (this.isEmpty()) { + return undefined; + } + const result = this.items.removeAt(this.size() - 1); + return result; + } + peek() { + if (this.isEmpty()) { + return undefined; + } + return this.items.getElementAt(this.size() - 1).element; + } + isEmpty() { + return this.items.isEmpty(); + } + size() { + return this.items.size(); + } + clear() { + this.items.clear(); + } + toString() { + return this.items.toString(); + } +} diff --git a/src/js/index.js b/src/js/index.js index ac0187bf..c2d5d99c 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -10,10 +10,11 @@ import { parenthesesChecker } from './others/balanced-symbols'; import * as _util from './util'; -export { default as CircularLinkedList } from './data-structures/circular-linked-list'; -export { default as DoublyLinkedList } from './data-structures/doubly-linked-list'; export { default as LinkedList } from './data-structures/linked-list'; +export { default as DoublyLinkedList } from './data-structures/doubly-linked-list'; +export { default as CircularLinkedList } from './data-structures/circular-linked-list'; export { default as SortedLinkedList } from './data-structures/sorted-linked-list'; +export { default as StackLinkedList } from './data-structures/stack-linked-list'; export const util = _util; diff --git a/src/ts/data-structures/doubly-linked-list.ts b/src/ts/data-structures/doubly-linked-list.ts index 07ac834a..a2d16e72 100644 --- a/src/ts/data-structures/doubly-linked-list.ts +++ b/src/ts/data-structures/doubly-linked-list.ts @@ -42,7 +42,6 @@ export default class DoublyLinkedList extends LinkedList { } } else if (index === this.count) { // last item // NEW - current = this.tail; // {2} current.next = node; node.prev = current; diff --git a/src/ts/data-structures/stack-linked-list.ts b/src/ts/data-structures/stack-linked-list.ts new file mode 100644 index 00000000..fa39023b --- /dev/null +++ b/src/ts/data-structures/stack-linked-list.ts @@ -0,0 +1,44 @@ +import DoublyLinkedList from './doubly-linked-list'; + +export default class StackLinkedList { + private items: DoublyLinkedList; + + constructor() { + this.items = new DoublyLinkedList(); + } + + push(element: T) { + this.items.push(element); + } + + pop() { + if (this.isEmpty()) { + return undefined; + } + const result = this.items.removeAt(this.size() - 1); + return result; + } + + peek() { + if (this.isEmpty()) { + return undefined; + } + return this.items.getElementAt(this.size() - 1).element; + } + + isEmpty() { + return this.items.isEmpty(); + } + + size() { + return this.items.size(); + } + + clear() { + this.items.clear(); + } + + toString() { + return this.items.toString(); + } +} diff --git a/src/ts/index.ts b/src/ts/index.ts index 8699d96a..04662277 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -1,12 +1,14 @@ import * as _util from './util'; -export { default as CircularLinkedList } from './data-structures/circular-linked-list'; -export { default as DoublyLinkedList } from './data-structures/doubly-linked-list'; export { default as LinkedList } from './data-structures/linked-list'; +export { default as DoublyLinkedList } from './data-structures/doubly-linked-list'; +export { default as CircularLinkedList } from './data-structures/circular-linked-list'; export { default as SortedLinkedList } from './data-structures/sorted-linked-list'; +export { default as StackLinkedList } from './data-structures/stack-linked-list'; export const util = _util; + /* import { hotPotato } from './others/hot-potato'; import { palindromeChecker } from './others/palindrome-checker'; import Deque from './data-structures/deque'; diff --git a/test/js/data-structures/stack-linked-list.spec.js b/test/js/data-structures/stack-linked-list.spec.js new file mode 100644 index 00000000..19549713 --- /dev/null +++ b/test/js/data-structures/stack-linked-list.spec.js @@ -0,0 +1,157 @@ +import 'mocha'; +import { expect } from 'chai'; +import { StackLinkedList } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('StackLinkedList', () => { + let stack; + + beforeEach(() => { + stack = new StackLinkedList(); + }); + + it('starts empty', () => { + expect(stack.size()).to.equal(0); + expect(stack.isEmpty()).to.equal(true); + }); + + it('pushes elements', () => { + stack.push(1); + expect(stack.size()).to.equal(1); + stack.push(2); + expect(stack.size()).to.equal(2); + stack.push(3); + expect(stack.size()).to.equal(3); + + expect(stack.isEmpty()).to.equal(false); + }); + + it('pops elements', () => { + stack.push(1); + stack.push(2); + stack.push(3); + + expect(stack.pop()).to.equal(3); + expect(stack.pop()).to.equal(2); + expect(stack.pop()).to.equal(1); + expect(stack.pop()).to.equal(undefined); + }); + + it('implements LIFO logic', () => { + stack.push(1); + stack.push(2); + stack.push(3); + + expect(stack.pop()).to.equal(3); + expect(stack.pop()).to.equal(2); + expect(stack.pop()).to.equal(1); + expect(stack.pop()).to.equal(undefined); + }); + + it('allows to peek at the top element in he stack without popping it', () => { + expect(stack.peek()).to.equal(undefined); + + stack.push(1); + expect(stack.peek()).to.equal(1); + + stack.push(2); + expect(stack.peek()).to.equal(2); + + stack.pop(); + expect(stack.peek()).to.equal(1); + }); + + it('returns the correct size', () => { + expect(stack.size()).to.equal(0); + stack.push(1); + expect(stack.size()).to.equal(1); + stack.push(2); + expect(stack.size()).to.equal(2); + stack.push(3); + expect(stack.size()).to.equal(3); + + stack.clear(); + expect(stack.isEmpty()).to.equal(true); + + stack.push(1); + stack.push(2); + stack.push(3); + + stack.pop(); + expect(stack.size()).to.equal(2); + stack.pop(); + expect(stack.size()).to.equal(1); + stack.pop(); + expect(stack.size()).to.equal(0); + stack.pop(); + expect(stack.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(stack.isEmpty()).to.equal(true); + stack.push(1); + expect(stack.isEmpty()).to.equal(false); + stack.push(2); + expect(stack.isEmpty()).to.equal(false); + stack.push(3); + expect(stack.isEmpty()).to.equal(false); + + stack.clear(); + expect(stack.isEmpty()).to.equal(true); + + stack.push(1); + stack.push(2); + stack.push(3); + + stack.pop(); + expect(stack.isEmpty()).to.equal(false); + stack.pop(); + expect(stack.isEmpty()).to.equal(false); + stack.pop(); + expect(stack.isEmpty()).to.equal(true); + stack.pop(); + expect(stack.isEmpty()).to.equal(true); + }); + + it('clears the stack', () => { + stack.clear(); + expect(stack.isEmpty()).to.equal(true); + + stack.push(1); + stack.push(2); + + stack.clear(); + expect(stack.isEmpty()).to.equal(true); + }); + + it('returns toString primitive types', () => { + expect(stack.toString()).to.equal(''); + + stack.push(1); + expect(stack.toString()).to.equal('1'); + + stack.push(2); + expect(stack.toString()).to.equal('1,2'); + + stack.clear(); + expect(stack.toString()).to.equal(''); + + const stackString = new StackLinkedList(); + stackString.push('el1'); + expect(stackString.toString()).to.equal('el1'); + + stackString.push('el2'); + expect(stackString.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + const stackMyObj = new StackLinkedList(); + expect(stackMyObj.toString()).to.equal(''); + + stackMyObj.push(new MyObj(1, 2)); + expect(stackMyObj.toString()).to.equal('1|2'); + + stackMyObj.push(new MyObj(3, 4)); + expect(stackMyObj.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/ts/data-structures/stack-linked-list.spec.ts b/test/ts/data-structures/stack-linked-list.spec.ts new file mode 100644 index 00000000..9889fb17 --- /dev/null +++ b/test/ts/data-structures/stack-linked-list.spec.ts @@ -0,0 +1,159 @@ +import 'mocha'; +import { expect } from 'chai'; +import { StackLinkedList } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('StackLinkedList', () => { + let stack: StackLinkedList; + + beforeEach(() => { + stack = new StackLinkedList(); + }); + + it('starts empty', () => { + expect(stack.size()).to.equal(0); + expect(stack.isEmpty()).to.equal(true); + }); + + it('pushes elements', () => { + stack.push(1); + expect(stack.size()).to.equal(1); + stack.push(2); + expect(stack.size()).to.equal(2); + stack.push(3); + expect(stack.size()).to.equal(3); + + expect(stack.isEmpty()).to.equal(false); + }); + + it('pops elements', () => { + stack.push(1); + stack.push(2); + stack.push(3); + + expect(stack.pop()).to.equal(3); + expect(stack.pop()).to.equal(2); + expect(stack.pop()).to.equal(1); + expect(stack.pop()).to.equal(undefined); + }); + + it('implements LIFO logic', () => { + stack.push(1); + stack.push(2); + stack.push(3); + + expect(stack.pop()).to.equal(3); + expect(stack.pop()).to.equal(2); + expect(stack.pop()).to.equal(1); + expect(stack.pop()).to.equal(undefined); + }); + + it('allows to peek at the top element in he stack without popping it', () => { + expect(stack.peek()).to.equal(undefined); + + stack.push(1); + expect(stack.peek()).to.equal(1); + + stack.push(2); + expect(stack.peek()).to.equal(2); + + stack.pop(); + expect(stack.peek()).to.equal(1); + }); + + it('returns the correct size', () => { + expect(stack.size()).to.equal(0); + stack.push(1); + expect(stack.size()).to.equal(1); + stack.push(2); + expect(stack.size()).to.equal(2); + stack.push(3); + expect(stack.size()).to.equal(3); + + stack.clear(); + expect(stack.isEmpty()).to.equal(true); + + stack.push(1); + stack.push(2); + stack.push(3); + + stack.pop(); + expect(stack.size()).to.equal(2); + stack.pop(); + expect(stack.size()).to.equal(1); + stack.pop(); + expect(stack.size()).to.equal(0); + stack.pop(); + expect(stack.size()).to.equal(0); + }); + + it('returns if it is empty', () => { + expect(stack.isEmpty()).to.equal(true); + stack.push(1); + expect(stack.isEmpty()).to.equal(false); + stack.push(2); + expect(stack.isEmpty()).to.equal(false); + stack.push(3); + expect(stack.isEmpty()).to.equal(false); + + stack.clear(); + expect(stack.isEmpty()).to.equal(true); + + stack.push(1); + stack.push(2); + stack.push(3); + + stack.pop(); + expect(stack.isEmpty()).to.equal(false); + stack.pop(); + expect(stack.isEmpty()).to.equal(false); + stack.pop(); + expect(stack.isEmpty()).to.equal(true); + stack.pop(); + expect(stack.isEmpty()).to.equal(true); + }); + + it('clears the stack', () => { + stack.clear(); + expect(stack.isEmpty()).to.equal(true); + + stack.push(1); + stack.push(2); + + stack.clear(); + expect(stack.isEmpty()).to.equal(true); + }); + + + it('returns toString primitive types', () => { + expect(stack.toString()).to.equal(''); + + stack.push(1); + expect(stack.toString()).to.equal('1'); + + stack.push(2); + expect(stack.toString()).to.equal('1,2'); + + stack.clear(); + expect(stack.toString()).to.equal(''); + + const stackString = new StackLinkedList(); + stackString.push('el1'); + expect(stackString.toString()).to.equal('el1'); + + stackString.push('el2'); + expect(stackString.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + + const stackMyObj = new StackLinkedList(); + expect(stackMyObj.toString()).to.equal(''); + + stackMyObj.push(new MyObj(1, 2)); + expect(stackMyObj.toString()).to.equal('1|2'); + + stackMyObj.push(new MyObj(3, 4)); + expect(stackMyObj.toString()).to.equal('1|2,3|4'); + }); +}); From 1dd6a4cc1747d513fc7447992aea18e3281598aa Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 15 Oct 2017 14:52:28 -0200 Subject: [PATCH 015/188] chapter 05: [LinkedLists] --- README.md | 2 + examples/chapter05/01-LinkedList.html | 11 ++++ examples/chapter05/01-LinkedList.js | 48 ++++++++++++++++ examples/chapter05/02-DoublyLinkedList.html | 11 ++++ examples/chapter05/02-DoublyLinkedList.js | 54 ++++++++++++++++++ examples/chapter05/03-CircularLinkedList.html | 11 ++++ examples/chapter05/03-CircularLinkedList.js | 32 +++++++++++ examples/chapter05/04-SortedLinkedList.html | 11 ++++ examples/chapter05/04-SortedLinkedList.js | 53 +++++++++++++++++ examples/chapter05/05-StackLinkedList.html | 11 ++++ examples/chapter05/05-StackLinkedList.js | 24 ++++++++ examples/examples-screenshot.png | Bin 0 -> 572747 bytes examples/index.html | 29 +++++++++- 13 files changed, 295 insertions(+), 2 deletions(-) create mode 100644 examples/chapter05/01-LinkedList.html create mode 100644 examples/chapter05/01-LinkedList.js create mode 100644 examples/chapter05/02-DoublyLinkedList.html create mode 100644 examples/chapter05/02-DoublyLinkedList.js create mode 100644 examples/chapter05/03-CircularLinkedList.html create mode 100644 examples/chapter05/03-CircularLinkedList.js create mode 100644 examples/chapter05/04-SortedLinkedList.html create mode 100644 examples/chapter05/04-SortedLinkedList.js create mode 100644 examples/chapter05/05-StackLinkedList.html create mode 100644 examples/chapter05/05-StackLinkedList.js create mode 100644 examples/examples-screenshot.png diff --git a/README.md b/README.md index 0aa18220..ee5f4583 100644 --- a/README.md +++ b/README.md @@ -38,4 +38,6 @@ Work in Progress. * Right click on the html file you would like to see the examples, right click and 'Open with Chrome (or any other browser)' + + Happy Coding! diff --git a/examples/chapter05/01-LinkedList.html b/examples/chapter05/01-LinkedList.html new file mode 100644 index 00000000..df7c5591 --- /dev/null +++ b/examples/chapter05/01-LinkedList.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter05/01-LinkedList.js b/examples/chapter05/01-LinkedList.js new file mode 100644 index 00000000..8d7c6e49 --- /dev/null +++ b/examples/chapter05/01-LinkedList.js @@ -0,0 +1,48 @@ +const { LinkedList } = PacktDataStructuresAlgorithms; + +const list = new LinkedList(); + +console.log('push element 15'); +list.push(15); + +console.log('list.indexOf(15) => ', list.indexOf(15)); + +console.log('push element 10'); +list.push(10); + +console.log('list.toString() => ', list.toString()); +console.log('list.indexOf(10) => ', list.indexOf(10)); + +console.log('push element 13'); +list.push(13); + +console.log('list.toString() => ', list.toString()); +console.log('list.indexOf(13) => ', list.indexOf(13)); +console.log('list.indexOf(10) => ', list.indexOf(10)); + +console.log('push elements 11 and 12'); +list.push(11); +list.push(12); + +console.log('list.toString() => ', list.toString()); +console.log('list.removeAt(1) => ', list.removeAt(1)); +console.log('list.toString() => ', list.toString()); +console.log('list.removeAt(3) => ', list.removeAt(3)); +console.log('list.toString() => ', list.toString()); + +console.log('push element 14'); +list.push(14); + +console.log('list.toString() => ', list.toString()); +console.log('insert element 16 pos 0 => ', list.insert(16, 0)); +console.log('list.toString() => ', list.toString()); +console.log('insert element 17 pos 1 => ', list.insert(17, 1)); +console.log('list.toString() => ', list.toString()); +console.log('insert element 18 pos list.size() => ', list.insert(18, list.size())); +console.log('list.toString() => ', list.toString()); +console.log('remove element 16 => ', list.remove(16)); +console.log('list.toString() => ', list.toString()); +console.log('remove element 11 => ', list.remove(11)); +console.log('list.toString() => ', list.toString()); +console.log('remove element 18 => ', list.remove(18)); +console.log('list.toString() => ', list.toString()); diff --git a/examples/chapter05/02-DoublyLinkedList.html b/examples/chapter05/02-DoublyLinkedList.html new file mode 100644 index 00000000..1aea7c24 --- /dev/null +++ b/examples/chapter05/02-DoublyLinkedList.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter05/02-DoublyLinkedList.js b/examples/chapter05/02-DoublyLinkedList.js new file mode 100644 index 00000000..333f701c --- /dev/null +++ b/examples/chapter05/02-DoublyLinkedList.js @@ -0,0 +1,54 @@ +const { DoublyLinkedList } = PacktDataStructuresAlgorithms; + +const list = new DoublyLinkedList(); + +console.log('push element 15'); +list.push(15); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('push element 16'); +list.push(16); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('push element 17'); +list.push(17); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('insert element 13 pos 0 => ', list.insert(13, 0)); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('insert element 18 pos 4 => ', list.insert(18, 4)); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('insert element 14 pos 1 => ', list.insert(14, 1)); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('list.removeAt(0) => ', list.removeAt(0)); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('list.removeAt(list.size() - 1) => ', list.removeAt(list.size() - 1)); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('list.removeAt(1) => ', list.removeAt(1)); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('remove element 16 => ', list.remove(16)); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('remove element 14 => ', list.remove(14)); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); + +console.log('remove element 17 => ', list.remove(17)); +console.log('list.toString() => ', list.toString()); +console.log('list.inverseToString() => ', list.inverseToString()); diff --git a/examples/chapter05/03-CircularLinkedList.html b/examples/chapter05/03-CircularLinkedList.html new file mode 100644 index 00000000..10fbd6b6 --- /dev/null +++ b/examples/chapter05/03-CircularLinkedList.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter05/03-CircularLinkedList.js b/examples/chapter05/03-CircularLinkedList.js new file mode 100644 index 00000000..05178956 --- /dev/null +++ b/examples/chapter05/03-CircularLinkedList.js @@ -0,0 +1,32 @@ +const { CircularLinkedList } = PacktDataStructuresAlgorithms; + +const list = new CircularLinkedList(); + +console.log('push element 15'); +list.push(15); +console.log('list.toString() => ', list.toString()); + +console.log('push element 16'); +list.push(16); +console.log('list.toString() => ', list.toString()); + +console.log('insert element 14 pos 0 => ', list.insert(14, 0)); +console.log('list.toString() => ', list.toString()); + +console.log('insert element 14.5 pos 1 => ', list.insert(14.5, 1)); +console.log('list.toString() => ', list.toString()); + +console.log('insert element 17 pos 4 => ', list.insert(17, 4)); +console.log('list.toString() => ', list.toString()); + +console.log('list.removeAt(0) => ', list.removeAt(0)); +console.log('list.toString() => ', list.toString()); + +console.log('list.removeAt(1) => ', list.removeAt(1)); +console.log('list.toString() => ', list.toString()); + +console.log('list.removeAt(2) => ', list.removeAt(2)); +console.log('list.toString() => ', list.toString()); + +console.log('list.indexOf(14.5) => ', list.indexOf(14.5)); +console.log('list.indexOf(16) => ', list.indexOf(16)); diff --git a/examples/chapter05/04-SortedLinkedList.html b/examples/chapter05/04-SortedLinkedList.html new file mode 100644 index 00000000..9feb1a70 --- /dev/null +++ b/examples/chapter05/04-SortedLinkedList.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter05/04-SortedLinkedList.js b/examples/chapter05/04-SortedLinkedList.js new file mode 100644 index 00000000..c6351f8f --- /dev/null +++ b/examples/chapter05/04-SortedLinkedList.js @@ -0,0 +1,53 @@ +const { SortedLinkedList } = PacktDataStructuresAlgorithms; +const { util } = PacktDataStructuresAlgorithms; + +const list = new SortedLinkedList(); + +console.log(''); +for (let i = 5; i > 0; i--) { + list.push(i); +} + +console.log('list after pushing 5, 4, 3, 2, and 1 => ', list.toString()); + +console.log('list.removeAt(1) => ', list.removeAt(1)); + +console.log('remove element 16 => ', list.remove(5)); + +console.log('list.toString() => ', list.toString()); + +// ------- Example 02 + +class MyObj { + constructor(el1, el2) { + this.el1 = el1; + this.el2 = el2; + } + toString() { + return `${this.el1.toString()}|${this.el2.toString()}`; + } +} + +function myObjCompare(a, b) { + return a.toString().localeCompare(b.toString()); +} + +const ds = new SortedLinkedList(util.defaultEquals, myObjCompare); + +console.log('*** SortedLinkedList with custom sorting function'); + +ds.push(new MyObj(3, 4)); +console.log('push MyObj(3, 4)'); +console.log('list.toString() => ', ds.toString()); + +ds.push(new MyObj(1, 2)); +console.log('push MyObj(1, 2)'); +console.log('list.toString() => ', ds.toString()); + +ds.push(new MyObj(5, 6)); +console.log('push MyObj(5, 6)'); +console.log('list.toString() => ', ds.toString()); + +ds.insert(new MyObj(0, 0), 4); +console.log('insert MyObj(0, 0) pos 4 (pos ignored)'); +console.log('list.toString() => ', ds.toString()); diff --git a/examples/chapter05/05-StackLinkedList.html b/examples/chapter05/05-StackLinkedList.html new file mode 100644 index 00000000..c511e977 --- /dev/null +++ b/examples/chapter05/05-StackLinkedList.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter05/05-StackLinkedList.js b/examples/chapter05/05-StackLinkedList.js new file mode 100644 index 00000000..866e7f91 --- /dev/null +++ b/examples/chapter05/05-StackLinkedList.js @@ -0,0 +1,24 @@ +const { StackLinkedList } = PacktDataStructuresAlgorithms; + +const stack = new StackLinkedList(); + +console.log('stack.isEmpty() => ', stack.isEmpty()); // outputs true + +stack.push(5); +stack.push(8); + +console.log('stack after push 5 and 8 => ', stack.toString()); + +console.log('stack.peek() => ', stack.peek()); // outputs 8 + +stack.push(11); + +console.log('stack.size() after push 11 => ', stack.size()); // outputs 3 +console.log('stack.isEmpty() => ', stack.isEmpty()); // outputs false + +stack.push(15); + +stack.pop(); +stack.pop(); + +console.log('stack.size() after push 15 and pop twice => ', stack.size()); // outputs 2 diff --git a/examples/examples-screenshot.png b/examples/examples-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..a264d1428c9f49fccb65c2fa63ee23ac07bf8ef0 GIT binary patch literal 572747 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≤lFzXB| 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 literal 0 HcmV?d00001 diff --git a/examples/index.html b/examples/index.html index 3a7ccc7d..44c70170 100644 --- a/examples/index.html +++ b/examples/index.html @@ -3,7 +3,7 @@ - DataStructures and Algorithms with JavaScript + Data Structures and Algorithms with JavaScript @@ -43,7 +43,7 @@ 03 04 05 - 06 + 06

@@ -127,6 +127,31 @@
+ +
+
+
+ Soon. +
+
+
+
+ Soon. +
+
+
Soon.
From b099b8c50354c64303a4da6400c7b09399e8d0e7 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 15 Oct 2017 14:58:03 -0200 Subject: [PATCH 016/188] chapter 05: [LinkedLists] --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ee5f4583..4bc4c925 100644 --- a/README.md +++ b/README.md @@ -18,13 +18,13 @@ Work in Progress. ### Third Edition Updates -* Algorithms using ES2015+ -* All chapters reviewed and rewritten +* Algorithms using ES2015+ (ES6+) * New data structures and algorithms +* All chapters rewritten and reviewed * Three (3) new chapters * Creation of a Data Structures and Algorithms library that can be used in the browser or with Node.js * Algorithms tested with Mocha + Chai (test code available in `test` directory) -* TypeScript version of the source code included +* **TypeScript** version of the source code included (library and tests) ## Installing and running the book examples With Node From 1d40fd4e939b54ce3793d0990137c774d062ccd4 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 15 Oct 2017 15:00:34 -0200 Subject: [PATCH 017/188] chapter 05: [LinkedLists] --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4bc4c925..9d2fa730 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ Work in Progress. * Right click on the html file you would like to see the examples, right click and 'Open with Chrome (or any other browser)' +* Or open the `examples/index.html` file to easily nagivate through all examples: + Happy Coding! From 3dcc88e8ec38063cf1197daa655549e9d5f6f0ef Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 15 Oct 2017 20:59:58 -0200 Subject: [PATCH 018/188] chapter 05: [LinkedLists] --- src/js/data-structures/linked-list.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/js/data-structures/linked-list.js b/src/js/data-structures/linked-list.js index 83fa3c16..829a58ed 100644 --- a/src/js/data-structures/linked-list.js +++ b/src/js/data-structures/linked-list.js @@ -5,6 +5,7 @@ export default class LinkedList { constructor(equalsFn = defaultEquals) { this.equalsFn = equalsFn; this.count = 0; + this.head = undefined; } push(element) { const node = new Node(element); From 806f16a1a3f2b6e906ccb9e084015e43c0327ab7 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 10:42:04 -0200 Subject: [PATCH 019/188] chapter 05: [LinkedLists] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- .../data-structures/circular-linked-list.js | 15 ++++----------- src/js/data-structures/doubly-linked-list.js | 19 +++++++++---------- src/js/data-structures/linked-list.js | 2 +- .../data-structures/circular-linked-list.ts | 17 ++++------------- src/ts/data-structures/linked-list.ts | 2 +- 6 files changed, 20 insertions(+), 37 deletions(-) diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index 1fb34787..9383a984 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=7)}([function(t,e,n){var i,r,o;!function(n,u){r=[e],i=u,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t){"use strict";function e(t,e){return t===e?0:t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,t),this.equalsFn=e,this.count=0}return o(t,[{key:"push",value:function(t){var e=new i.Node(t),n=void 0;if(null==this.head)this.head=e;else{for(n=this.head;null!=n.next;)n=n.next;n.next=e}this.count++}},{key:"getElementAt",value:function(t){if(t>=0&&t<=this.count){for(var e=this.head,n=0;n=0&&e<=this.count){var n=new i.Node(t),r=this.head;if(0===e)n.next=r,this.head=n;else{var o=this.getElementAt(e-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),f(e,[{key:"push",value:function(t){var e=new r.DoublyNode(t);null==this.head?(this.head=e,this.tail=e):(this.tail.next=e,e.prev=this.tail,this.tail=e),this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new r.DoublyNode(t),i=this.head;if(0===e)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(e===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var o=this.getElementAt(e-1);i=o.next,n.next=i,o.next=n,i.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),f(e,[{key:"getLastElement",value:function(){for(var t=this.head,e=2;e<=this.size()&&null!=t;e++)t=t.next;return t}},{key:"push",value:function(t){var e=new r.Node(t),n=void 0;null==this.head?this.head=e:(n=this.getLastElement(),n.next=e),e.next=this.head,this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new r.Node(t),i=this.head;if(0===e)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getLastElement(),this.head=n,i.next=this.head);else{var o=this.getElementAt(e-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;r(this,e);var u=o(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return u.equalsFn=t,u.compareFn=i,u}return u(e,t),a(e,[{key:"push",value:function(t){if(this.isEmpty())f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"push",this).call(this,t);else{var n=this.getIndexNextSortedElement(t);f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,n)}}},{key:"insert",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,0===n?n:0);var i=this.getIndexNextSortedElement(t);return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,i)}},{key:"getIndexNextSortedElement",value:function(t){for(var e=this.head,i=0;i1;){for(var u=0;u1&&r;)o=e.removeFront(),u=e.removeBack(),o!==u&&(r=!1);return r}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(u,s){r=[e,n(2)],i=s,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t,e,i,r,o,u,s){var a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){r.push(e.pop());var f={};f[o]=e.toString(),f[u]=i.toString(),f[s]=r.toString(),a.push(f)}else{n(t-1,e,r,i,o,s,u,a),r.push(e.pop());var l={};l[o]=e.toString(),l[u]=i.toString(),l[s]=r.toString(),a.push(l),n(t-1,i,e,r,u,o,s,a)}return a}function i(t){for(var e=new o.default,i=new o.default,r=new o.default,u=t;u>0;u--)e.push(u);return n(t,e,r,i,"source","helper","dest")}function r(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([e,i]):(r(t-1,e,i,n,o),o.push([e,i]),r(t-1,n,e,i,o)),o)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=r;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(u,s){r=[e,n(2)],i=s,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t){for(var e=new r.default,n=t,i=void 0,o="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)o+=e.pop().toString();return o}function i(t,e){var n=new r.default,i=t,o=void 0,u="";if(!(e>=2&&e<=36))return"";for(;i>0;)o=Math.floor(i%e),n.push(o),i=Math.floor(i/e);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var r=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(n,u){r=[t,e],i=u,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?o=!1:(a=e.pop(),n.indexOf(a)!==r.indexOf(s)&&(o=!1)),u++;return!(!o||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=7)}([function(t,e,n){var i,o,r;!function(n,u){o=[e],i=u,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t){"use strict";function e(t,e){return t===e?0:t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t),this.equalsFn=e,this.count=0,this.head=void 0}return r(t,[{key:"push",value:function(t){var e=new i.Node(t),n=void 0;if(null==this.head)this.head=e;else{for(n=this.head;null!=n.next;)n=n.next;n.next=e}this.count++}},{key:"getElementAt",value:function(t){if(t>=0&&t<=this.count){for(var e=this.head,n=0;n=0&&e<=this.count){var n=new i.Node(t);if(0===e){var o=this.head;n.next=o,this.head=n}else{var r=this.getElementAt(e-1);n.next=r.next,r.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,e);var i=u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.tail=void 0,i}return s(e,t),f(e,[{key:"push",value:function(t){var e=new o.DoublyNode(t);null==this.head?(this.head=e,this.tail=e):(this.tail.next=e,e.prev=this.tail,this.tail=e),this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new o.DoublyNode(t),i=this.head;if(0===e)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(e===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var r=this.getElementAt(e-1);i=r.next,n.next=i,r.next=n,i.prev=n,n.prev=r}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return r(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),f(e,[{key:"push",value:function(t){var e=new o.Node(t),n=void 0;null==this.head?this.head=e:(n=this.getElementAt(this.size()-1),n.next=e),e.next=this.head,this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new o.Node(t),i=this.head;if(0===e)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getElementAt(this.size()),this.head=n,i.next=this.head);else{var r=this.getElementAt(e-1);n.next=r.next,r.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;o(this,e);var u=r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return u.equalsFn=t,u.compareFn=i,u}return u(e,t),a(e,[{key:"push",value:function(t){if(this.isEmpty())f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"push",this).call(this,t);else{var n=this.getIndexNextSortedElement(t);f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,n)}}},{key:"insert",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,0===n?n:0);var i=this.getIndexNextSortedElement(t);return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,i)}},{key:"getIndexNextSortedElement",value:function(t){for(var e=this.head,i=0;i1;){for(var u=0;u1&&o;)r=e.removeFront(),u=e.removeBack(),r!==u&&(o=!1);return o}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(u,s){o=[e,n(2)],i=s,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t,e,i,o,r,u,s){var a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){o.push(e.pop());var f={};f[r]=e.toString(),f[u]=i.toString(),f[s]=o.toString(),a.push(f)}else{n(t-1,e,o,i,r,s,u,a),o.push(e.pop());var l={};l[r]=e.toString(),l[u]=i.toString(),l[s]=o.toString(),a.push(l),n(t-1,i,e,o,u,r,s,a)}return a}function i(t){for(var e=new r.default,i=new r.default,o=new r.default,u=t;u>0;u--)e.push(u);return n(t,e,o,i,"source","helper","dest")}function o(t,e,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?r:(1===t?r.push([e,i]):(o(t-1,e,i,n,r),r.push([e,i]),o(t-1,n,e,i,r)),r)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=o;var r=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(u,s){o=[e,n(2)],i=s,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t){for(var e=new o.default,n=t,i=void 0,r="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)r+=e.pop().toString();return r}function i(t,e){var n=new o.default,i=t,r=void 0,u="";if(!(e>=2&&e<=36))return"";for(;i>0;)r=Math.floor(i%e),n.push(r),i=Math.floor(i/e);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(n,u){o=[t,e],i=u,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?r=!1:(a=e.pop(),n.indexOf(a)!==o.indexOf(s)&&(r=!1)),u++;return!(!r||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file diff --git a/src/js/data-structures/circular-linked-list.js b/src/js/data-structures/circular-linked-list.js index b7e5f240..cc565558 100644 --- a/src/js/data-structures/circular-linked-list.js +++ b/src/js/data-structures/circular-linked-list.js @@ -6,20 +6,13 @@ export default class CircularLinkedList extends LinkedList { constructor(equalsFn = defaultEquals) { super(equalsFn); } - getLastElement() { - let current = this.head; - for (let i = 2; i <= this.size() && current != null; i++) { - current = current.next; - } - return current; - } push(element) { const node = new Node(element); let current; if (this.head == null) { this.head = node; } else { - current = this.getLastElement(); + current = this.getElementAt(this.size() - 1); current.next = node; } // set node.next to head - to have circular list @@ -37,7 +30,7 @@ export default class CircularLinkedList extends LinkedList { node.next = this.head; } else { node.next = current; - current = this.getLastElement(); + current = this.getElementAt(this.size()); // update last element this.head = node; current.next = this.head; @@ -56,11 +49,11 @@ export default class CircularLinkedList extends LinkedList { if (index >= 0 && index < this.count) { let current = this.head; if (index === 0) { - const removed = this.head; if (this.size() === 1) { this.head = undefined; } else { - current = this.getLastElement(); + const removed = this.head; + current = this.getElementAt(this.size() - 1); this.head = this.head.next; current.next = this.head; current = removed; diff --git a/src/js/data-structures/doubly-linked-list.js b/src/js/data-structures/doubly-linked-list.js index cd6aaad8..8960e173 100644 --- a/src/js/data-structures/doubly-linked-list.js +++ b/src/js/data-structures/doubly-linked-list.js @@ -5,6 +5,7 @@ import { DoublyNode } from './models/linked-list-models'; export default class DoublyLinkedList extends LinkedList { constructor(equalsFn = defaultEquals) { super(equalsFn); + this.tail = undefined; } push(element) { const node = new DoublyNode(element); @@ -24,18 +25,16 @@ export default class DoublyLinkedList extends LinkedList { const node = new DoublyNode(element); let current = this.head; if (index === 0) { - if (this.head == null) { - // NEW + if (this.head == null) { // NEW this.head = node; - this.tail = node; + this.tail = node; // NEW } else { node.next = this.head; this.head.prev = node; // NEW this.head = node; } - } else if (index === this.count) { - // last item // NEW - current = this.tail; // {2} + } else if (index === this.count) { // last item NEW + current = this.tail; current.next = node; node.prev = current; this.tail = node; @@ -56,24 +55,24 @@ export default class DoublyLinkedList extends LinkedList { if (index >= 0 && index < this.count) { let current = this.head; if (index === 0) { - this.head = this.head.next; // {1} + this.head = this.head.next; // if there is only one item, then we update tail as well //NEW if (this.count === 1) { // {2} this.tail = undefined; } else { - this.head.prev = undefined; // {3} + this.head.prev = undefined; } } else if (index === this.count - 1) { // last item //NEW - current = this.tail; // {4} + current = this.tail; this.tail = current.prev; this.tail.next = undefined; } else { current = this.getElementAt(index); const previous = current.prev; // link previous with current's next - skip it to remove - previous.next = current.next; // {6} + previous.next = current.next; current.next.prev = previous; // NEW } this.count--; diff --git a/src/js/data-structures/linked-list.js b/src/js/data-structures/linked-list.js index 829a58ed..e9b2e16b 100644 --- a/src/js/data-structures/linked-list.js +++ b/src/js/data-structures/linked-list.js @@ -35,8 +35,8 @@ export default class LinkedList { insert(element, index) { if (index >= 0 && index <= this.count) { const node = new Node(element); - const current = this.head; if (index === 0) { + const current = this.head; node.next = current; this.head = node; } else { diff --git a/src/ts/data-structures/circular-linked-list.ts b/src/ts/data-structures/circular-linked-list.ts index 95c0b470..f422d276 100644 --- a/src/ts/data-structures/circular-linked-list.ts +++ b/src/ts/data-structures/circular-linked-list.ts @@ -7,14 +7,6 @@ export default class CircularLinkedList extends LinkedList { super(equalsFn); } - private getLastElement() { - let current = this.head; - for (let i = 2; i <= this.size() && current != null; i++) { - current = current.next; - } - return current; - } - push(element: T) { const node = new Node(element); let current; @@ -22,7 +14,7 @@ export default class CircularLinkedList extends LinkedList { if (this.head == null) { this.head = node; } else { - current = this.getLastElement(); + current = this.getElementAt(this.size() - 1); current.next = node; } @@ -44,7 +36,7 @@ export default class CircularLinkedList extends LinkedList { node.next = this.head; } else { node.next = current; - current = this.getLastElement(); + current = this.getElementAt(this.size()); // update last element this.head = node; current.next = this.head; @@ -65,12 +57,11 @@ export default class CircularLinkedList extends LinkedList { let current = this.head; if (index === 0) { - const removed = this.head; - if (this.size() === 1) { this.head = undefined; } else { - current = this.getLastElement(); + const removed = this.head; + current = this.getElementAt(this.size() - 1); this.head = this.head.next; current.next = this.head; current = removed; diff --git a/src/ts/data-structures/linked-list.ts b/src/ts/data-structures/linked-list.ts index e256b208..f0460c90 100644 --- a/src/ts/data-structures/linked-list.ts +++ b/src/ts/data-structures/linked-list.ts @@ -40,9 +40,9 @@ export default class LinkedList { insert(element: T, index: number) { if (index >= 0 && index <= this.count) { const node = new Node(element); - const current = this.head; if (index === 0) { + const current = this.head; node.next = current; this.head = node; } else { From 98c96f5c411ffad87a1503148b56eb31e330b77b Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 14:45:42 -0200 Subject: [PATCH 020/188] added example from #31. Closes #31 --- examples/chapter01/04-TruthyFalsy.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/chapter01/04-TruthyFalsy.js b/examples/chapter01/04-TruthyFalsy.js index 96264875..c64fa3e1 100644 --- a/examples/chapter01/04-TruthyFalsy.js +++ b/examples/chapter01/04-TruthyFalsy.js @@ -10,6 +10,7 @@ testTruthy(false); // false testTruthy(new Boolean(false)); // true (object is always true) testTruthy(''); // false +testTruthy('a'); // true testTruthy('Packt'); // true testTruthy(new String('')); // true (object is always true) From b4b1780a5c810a5b84d5f59bc1c8c51dafce472e Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 15:02:53 -0200 Subject: [PATCH 021/188] added firebase deploy for examples --- .firebaserc | 5 +++++ .travis.yml | 3 +++ firebase.json | 11 +++++++++++ 3 files changed, 19 insertions(+) create mode 100644 .firebaserc create mode 100644 firebase.json diff --git a/.firebaserc b/.firebaserc new file mode 100644 index 00000000..d33152ab --- /dev/null +++ b/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "javascript-ds-algorithms-book" + } +} diff --git a/.travis.yml b/.travis.yml index 2cd47824..9eaa1bac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,15 @@ language: node_js node_js: - node +before_script: + - npm install -g --silent firebase-tools install: - npm install script: - npm run go after_success: - npm run coverage + - test $TRAVIS_BRANCH = "master" && firebase deploy --token $FIREBASE_TOKEN --non-interactive notifications: email: on_failure: change diff --git a/firebase.json b/firebase.json new file mode 100644 index 00000000..f90fd865 --- /dev/null +++ b/firebase.json @@ -0,0 +1,11 @@ +{ + "hosting": { + "public": "examples", + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ] + } +} From f62d2cfff032d4c0cbd32807ddb0c992e65b8ec0 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 15:08:16 -0200 Subject: [PATCH 022/188] added firebase deploy for examples --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9eaa1bac..65552b8d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ script: - npm run go after_success: - npm run coverage - - test $TRAVIS_BRANCH = "master" && firebase deploy --token $FIREBASE_TOKEN --non-interactive + - test $TRAVIS_BRANCH = "third-edition" && firebase deploy --token $FIREBASE_TOKEN --non-interactive notifications: email: on_failure: change From 4ee46b1f6952e44690cfff167157f6c4e237da6a Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 15:49:08 -0200 Subject: [PATCH 023/188] added TS support to ES2017 --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index d9ecc6d6..4de2f168 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ /* Basic Options */ "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ - // "lib": [], /* Specify library files to be included in the compilation: */ + "lib": ["es2017"], /* Specify library files to be included in the compilation: */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ From 5961185e976382a3d9f47d54505b3dcabcad1ad2 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 15:49:18 -0200 Subject: [PATCH 024/188] chapter 06: [Sets] --- README.md | 3 + examples/PacktDataStructuresAlgorithms.min.js | 2 +- examples/chapter06/01-Set.html | 11 + examples/chapter06/01-Set.js | 19 + examples/chapter06/02-SetOperations.html | 11 + examples/chapter06/02-SetOperations.js | 66 ++++ examples/chapter06/03-ES2015Set.html | 11 + examples/chapter06/03-ES2015Set.js | 66 ++++ examples/index.html | 10 +- src/js/data-structures/set.js | 91 +++++ src/js/index.js | 1 + src/ts/data-structures/set.ts | 117 ++++++ src/ts/index.ts | 1 + test/js/data-structures/set.spec.js | 352 ++++++++++++++++++ test/ts/data-structures/set.spec.ts | 352 ++++++++++++++++++ 15 files changed, 1111 insertions(+), 2 deletions(-) create mode 100755 examples/chapter06/01-Set.html create mode 100755 examples/chapter06/01-Set.js create mode 100755 examples/chapter06/02-SetOperations.html create mode 100755 examples/chapter06/02-SetOperations.js create mode 100755 examples/chapter06/03-ES2015Set.html create mode 100755 examples/chapter06/03-ES2015Set.js create mode 100644 src/js/data-structures/set.js create mode 100644 src/ts/data-structures/set.ts create mode 100644 test/js/data-structures/set.spec.js create mode 100644 test/ts/data-structures/set.spec.ts diff --git a/README.md b/README.md index 9d2fa730..59d96a55 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ Work in Progress. * 03: [Stacks](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter03) * 04: [Queues and Deques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter04) * 05: [LinkedLists](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter05) +* 06: [Sets](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter06) ### Third Edition Updates @@ -40,6 +41,8 @@ Work in Progress. * Or open the `examples/index.html` file to easily nagivate through all examples: +* Demo: [https://javascript-ds-algorithms-book.firebaseapp.com](https://javascript-ds-algorithms-book.firebaseapp.com) + Happy Coding! diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index 9383a984..2535c693 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=7)}([function(t,e,n){var i,o,r;!function(n,u){o=[e],i=u,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t){"use strict";function e(t,e){return t===e?0:t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t),this.equalsFn=e,this.count=0,this.head=void 0}return r(t,[{key:"push",value:function(t){var e=new i.Node(t),n=void 0;if(null==this.head)this.head=e;else{for(n=this.head;null!=n.next;)n=n.next;n.next=e}this.count++}},{key:"getElementAt",value:function(t){if(t>=0&&t<=this.count){for(var e=this.head,n=0;n=0&&e<=this.count){var n=new i.Node(t);if(0===e){var o=this.head;n.next=o,this.head=n}else{var r=this.getElementAt(e-1);n.next=r.next,r.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,e);var i=u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.tail=void 0,i}return s(e,t),f(e,[{key:"push",value:function(t){var e=new o.DoublyNode(t);null==this.head?(this.head=e,this.tail=e):(this.tail.next=e,e.prev=this.tail,this.tail=e),this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new o.DoublyNode(t),i=this.head;if(0===e)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(e===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var r=this.getElementAt(e-1);i=r.next,n.next=i,r.next=n,i.prev=n,n.prev=r}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return r(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),f(e,[{key:"push",value:function(t){var e=new o.Node(t),n=void 0;null==this.head?this.head=e:(n=this.getElementAt(this.size()-1),n.next=e),e.next=this.head,this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new o.Node(t),i=this.head;if(0===e)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getElementAt(this.size()),this.head=n,i.next=this.head);else{var r=this.getElementAt(e-1);n.next=r.next,r.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;o(this,e);var u=r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return u.equalsFn=t,u.compareFn=i,u}return u(e,t),a(e,[{key:"push",value:function(t){if(this.isEmpty())f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"push",this).call(this,t);else{var n=this.getIndexNextSortedElement(t);f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,n)}}},{key:"insert",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,0===n?n:0);var i=this.getIndexNextSortedElement(t);return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,i)}},{key:"getIndexNextSortedElement",value:function(t){for(var e=this.head,i=0;i1;){for(var u=0;u1&&o;)r=e.removeFront(),u=e.removeBack(),r!==u&&(o=!1);return o}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(u,s){o=[e,n(2)],i=s,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t,e,i,o,r,u,s){var a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){o.push(e.pop());var f={};f[r]=e.toString(),f[u]=i.toString(),f[s]=o.toString(),a.push(f)}else{n(t-1,e,o,i,r,s,u,a),o.push(e.pop());var l={};l[r]=e.toString(),l[u]=i.toString(),l[s]=o.toString(),a.push(l),n(t-1,i,e,o,u,r,s,a)}return a}function i(t){for(var e=new r.default,i=new r.default,o=new r.default,u=t;u>0;u--)e.push(u);return n(t,e,o,i,"source","helper","dest")}function o(t,e,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?r:(1===t?r.push([e,i]):(o(t-1,e,i,n,r),r.push([e,i]),o(t-1,n,e,i,r)),r)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=o;var r=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(u,s){o=[e,n(2)],i=s,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t){for(var e=new o.default,n=t,i=void 0,r="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)r+=e.pop().toString();return r}function i(t,e){var n=new o.default,i=t,r=void 0,u="";if(!(e>=2&&e<=36))return"";for(;i>0;)r=Math.floor(i%e),n.push(r),i=Math.floor(i/e);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,o,r;!function(n,u){o=[t,e],i=u,void 0!==(r="function"==typeof i?i.apply(e,o):i)&&(t.exports=r)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?r=!1:(a=e.pop(),n.indexOf(a)!==o.indexOf(s)&&(r=!1)),u++;return!(!r||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=7)}([function(t,e,n){var i,r,o;!function(n,u){r=[e],i=u,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t){"use strict";function e(t,e){return t===e?0:t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,t),this.equalsFn=e,this.count=0,this.head=void 0}return o(t,[{key:"push",value:function(t){var e=new i.Node(t),n=void 0;if(null==this.head)this.head=e;else{for(n=this.head;null!=n.next;)n=n.next;n.next=e}this.count++}},{key:"getElementAt",value:function(t){if(t>=0&&t<=this.count){for(var e=this.head,n=0;n=0&&e<=this.count){var n=new i.Node(t);if(0===e){var r=this.head;n.next=r,this.head=n}else{var o=this.getElementAt(e-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,e);var i=u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.tail=void 0,i}return s(e,t),f(e,[{key:"push",value:function(t){var e=new r.DoublyNode(t);null==this.head?(this.head=e,this.tail=e):(this.tail.next=e,e.prev=this.tail,this.tail=e),this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new r.DoublyNode(t),i=this.head;if(0===e)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(e===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var o=this.getElementAt(e-1);i=o.next,n.next=i,o.next=n,i.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),f(e,[{key:"push",value:function(t){var e=new r.Node(t),n=void 0;null==this.head?this.head=e:(n=this.getElementAt(this.size()-1),n.next=e),e.next=this.head,this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new r.Node(t),i=this.head;if(0===e)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getElementAt(this.size()),this.head=n,i.next=this.head);else{var o=this.getElementAt(e-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;r(this,e);var u=o(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return u.equalsFn=t,u.compareFn=i,u}return u(e,t),a(e,[{key:"push",value:function(t){if(this.isEmpty())f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"push",this).call(this,t);else{var n=this.getIndexNextSortedElement(t);f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,n)}}},{key:"insert",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,0===n?n:0);var i=this.getIndexNextSortedElement(t);return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,i)}},{key:"getIndexNextSortedElement",value:function(t){for(var e=this.head,i=0;i0&&(o=r,u=i),u.forEach(function(t){o.includes(t)&&n.add(t)}),n}},{key:"difference",value:function(e){var n=new t;return this.values().forEach(function(t){e.has(t)||n.add(t)}),n}},{key:"isSubsetOf",value:function(t){if(this.size()>t.size())return!1;var e=!0;return this.values().every(function(n){return!!t.has(n)||(e=!1,!1)}),e}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=this.values(),e=""+t[0],n=1;n1;){for(var u=0;u7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){r.push(e.pop());var f={};f[o]=e.toString(),f[u]=i.toString(),f[s]=r.toString(),a.push(f)}else{n(t-1,e,r,i,o,s,u,a),r.push(e.pop());var l={};l[o]=e.toString(),l[u]=i.toString(),l[s]=r.toString(),a.push(l),n(t-1,i,e,r,u,o,s,a)}return a}function i(t){for(var e=new o.default,i=new o.default,r=new o.default,u=t;u>0;u--)e.push(u);return n(t,e,r,i,"source","helper","dest")}function r(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([e,i]):(r(t-1,e,i,n,o),o.push([e,i]),r(t-1,n,e,i,o)),o)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=r;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(u,s){r=[e,n(2)],i=s,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t){for(var e=new r.default,n=t,i=void 0,o="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)o+=e.pop().toString();return o}function i(t,e){var n=new r.default,i=t,o=void 0,u="";if(!(e>=2&&e<=36))return"";for(;i>0;)o=Math.floor(i%e),n.push(o),i=Math.floor(i/e);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var r=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(n,u){r=[t,e],i=u,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?o=!1:(a=e.pop(),n.indexOf(a)!==r.indexOf(s)&&(o=!1)),u++;return!(!o||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(u,s){r=[e,n(6)],i=s,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t){if(void 0===t||null===t||null!==t&&0===t.length)return!1;for(var e=new i.default,n=t.toLocaleLowerCase().split(" ").join(""),r=!0,o=void 0,u=void 0,s=0;s1&&r;)o=e.removeFront(),u=e.removeBack(),o!==u&&(r=!1);return r}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file diff --git a/examples/chapter06/01-Set.html b/examples/chapter06/01-Set.html new file mode 100755 index 00000000..cf2f575b --- /dev/null +++ b/examples/chapter06/01-Set.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter06/01-Set.js b/examples/chapter06/01-Set.js new file mode 100755 index 00000000..e893c2c8 --- /dev/null +++ b/examples/chapter06/01-Set.js @@ -0,0 +1,19 @@ +const { Set } = PacktDataStructuresAlgorithms; + +const set = new Set(); + +set.add(1); +console.log(set.values()); // outputs [1] +console.log(set.has(1)); // outputs true +console.log(set.size()); // outputs 1 + +set.add(2); +console.log(set.values()); // outputs [1, 2] +console.log(set.has(2)); // true +console.log(set.size()); // 2 + +set.delete(1); +console.log(set.values()); // outputs [2] + +set.delete(2); +console.log(set.values()); // outputs [] diff --git a/examples/chapter06/02-SetOperations.html b/examples/chapter06/02-SetOperations.html new file mode 100755 index 00000000..b55d7e0d --- /dev/null +++ b/examples/chapter06/02-SetOperations.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter06/02-SetOperations.js b/examples/chapter06/02-SetOperations.js new file mode 100755 index 00000000..2608c7ef --- /dev/null +++ b/examples/chapter06/02-SetOperations.js @@ -0,0 +1,66 @@ +const { Set } = PacktDataStructuresAlgorithms; + +// --------- Union ---------- + +let setA = new Set(); +setA.add(1); +setA.add(2); +setA.add(3); + +let setB = new Set(); +setB.add(3); +setB.add(4); +setB.add(5); +setB.add(6); + +const unionAB = setA.union(setB); +console.log(unionAB.values()); // [1, 2, 3, 4, 5, 6] + +// --------- Intersection ---------- + +setA = new Set(); +setA.add(1); +setA.add(2); +setA.add(3); + +setB = new Set(); +setB.add(2); +setB.add(3); +setB.add(4); + +const intersectionAB = setA.intersection(setB); +console.log(intersectionAB.values()); // [2, 3] + +// --------- Difference ---------- + +setA = new Set(); +setA.add(1); +setA.add(2); +setA.add(3); + +setB = new Set(); +setB.add(2); +setB.add(3); +setB.add(4); + +const differenceAB = setA.difference(setB); +console.log(differenceAB.values()); // [1] + +// --------- Subset ---------- + +setA = new Set(); +setA.add(1); +setA.add(2); + +setB = new Set(); +setB.add(1); +setB.add(2); +setB.add(3); + +const setC = new Set(); +setC.add(2); +setC.add(3); +setC.add(4); + +console.log(setA.isSubsetOf(setB)); // true +console.log(setA.isSubsetOf(setC)); // false diff --git a/examples/chapter06/03-ES2015Set.html b/examples/chapter06/03-ES2015Set.html new file mode 100755 index 00000000..7fe40e1b --- /dev/null +++ b/examples/chapter06/03-ES2015Set.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter06/03-ES2015Set.js b/examples/chapter06/03-ES2015Set.js new file mode 100755 index 00000000..38de9fc9 --- /dev/null +++ b/examples/chapter06/03-ES2015Set.js @@ -0,0 +1,66 @@ +const set = new Set(); + +set.add(1); +console.log(set.values()); // outputs @Iterator +console.log(set.has(1)); // outputs true +console.log(set.size); // outputs 1 + +set.add(2); +console.log(set.values()); // outputs [1, 2] +console.log(set.has(2)); // true +console.log(set.size); // 2 + +set.delete(1); +console.log(set.values()); // outputs [2] + +set.delete(2); +console.log(set.values()); // outputs [] + +const setA = new Set(); +setA.add(1); +setA.add(2); +setA.add(3); + +const setB = new Set(); +setB.add(2); +setB.add(3); +setB.add(4); + +// --------- Union ---------- +const union = (set1, set2) => { + const unionAb = new Set(); + set1.forEach(value => unionAb.add(value)); + set2.forEach(value => unionAb.add(value)); + return unionAb; +}; +console.log(union(setA, setB)); + +// --------- Intersection ---------- +const intersection = (set1, set2) => { + const intersectionSet = new Set(); + set1.forEach(value => { + if (set2.has(value)) { + intersectionSet.add(value); + } + }); + return intersectionSet; +}; +console.log(intersection(setA, setB)); + +// alternative - works on FF only +// console.log(new Set([x for (x of setA) if (setB.has(x))])); + +// --------- Difference ---------- +const difference = (set1, set2) => { + const differenceSet = new Set(); + set1.forEach(value => { + if (!set2.has(value)) { + differenceSet.add(value); + } + }); + return differenceSet; +}; +console.log(difference(setA, setB)); + +// alternative - works on FF only +// console.log(new Set([x for (x of setA) if (!setB.has(x))])); diff --git a/examples/index.html b/examples/index.html index 44c70170..d2eaa698 100644 --- a/examples/index.html +++ b/examples/index.html @@ -143,7 +143,15 @@
- Soon. +
diff --git a/src/js/data-structures/set.js b/src/js/data-structures/set.js new file mode 100644 index 00000000..07816bb5 --- /dev/null +++ b/src/js/data-structures/set.js @@ -0,0 +1,91 @@ +export default class Set { + constructor() { + this.items = {}; + } + add(value) { + if (!this.has(value)) { + this.items[value] = value; + return true; + } + return false; + } + delete(value) { + if (this.has(value)) { + delete this.items[value]; + return true; + } + return false; + } + has(value) { + return Object.prototype.hasOwnProperty.call(this.items, value); + } + values() { + return Object.values(this.items); + } + union(otherSet) { + const unionSet = new Set(); + this.values().forEach(value => unionSet.add(value)); + otherSet.values().forEach(value => unionSet.add(value)); + return unionSet; + } + intersection(otherSet) { + const intersectionSet = new Set(); + const values = this.values(); + const otherValues = otherSet.values(); + let biggerSet = values; + let smallerSet = otherValues; + if (otherValues.length - values.length > 0) { + biggerSet = otherValues; + smallerSet = values; + } + smallerSet.forEach(value => { + if (biggerSet.includes(value)) { + intersectionSet.add(value); + } + }); + return intersectionSet; + } + difference(otherSet) { + const differenceSet = new Set(); + this.values().forEach(value => { + if (!otherSet.has(value)) { + differenceSet.add(value); + } + }); + return differenceSet; + } + isSubsetOf(otherSet) { + if (this.size() > otherSet.size()) { + return false; + } + let isSubset = true; + this.values().every(value => { + if (!otherSet.has(value)) { + isSubset = false; + return false; + } + return true; + }); + return isSubset; + } + isEmpty() { + return this.size() === 0; + } + size() { + return Object.keys(this.items).length; + } + clear() { + this.items = {}; + } + toString() { + if (this.isEmpty()) { + return ''; + } + const values = this.values(); + let objString = `${values[0]}`; + for (let i = 1; i < values.length; i++) { + objString = `${objString},${values[i].toString()}`; + } + return objString; + } +} diff --git a/src/js/index.js b/src/js/index.js index c2d5d99c..74d45af1 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -15,6 +15,7 @@ export { default as DoublyLinkedList } from './data-structures/doubly-linked-lis export { default as CircularLinkedList } from './data-structures/circular-linked-list'; export { default as SortedLinkedList } from './data-structures/sorted-linked-list'; export { default as StackLinkedList } from './data-structures/stack-linked-list'; +export { default as Set } from './data-structures/set'; export const util = _util; diff --git a/src/ts/data-structures/set.ts b/src/ts/data-structures/set.ts new file mode 100644 index 00000000..61c62a26 --- /dev/null +++ b/src/ts/data-structures/set.ts @@ -0,0 +1,117 @@ +export default class Set { + private items: any; + + constructor() { + this.items = {}; + } + + add(value: T) { + if (!this.has(value)) { + this.items[value] = value; + return true; + } + return false; + } + + delete(value: T) { + if (this.has(value)) { + delete this.items[value]; + return true; + } + return false; + } + + has(value: T) { + // return this.items.hasOwnProperty(value); + return Object.prototype.hasOwnProperty.call(this.items, value); + } + + values(): T[] { + return Object.values(this.items); + } + + union(otherSet: Set) { + const unionSet = new Set(); + + this.values().forEach(value => unionSet.add(value)); + otherSet.values().forEach(value => unionSet.add(value)); + + return unionSet; + } + + intersection(otherSet: Set) { + const intersectionSet = new Set(); + + const values = this.values(); + const otherValues = otherSet.values(); + + let biggerSet = values; + let smallerSet = otherValues; + + if (otherValues.length - values.length > 0) { + biggerSet = otherValues; + smallerSet = values; + } + + smallerSet.forEach(value => { + if (biggerSet.includes(value)) { + intersectionSet.add(value); + } + }); + + return intersectionSet; + } + + difference(otherSet: Set) { + const differenceSet = new Set(); + + this.values().forEach(value => { + if (!otherSet.has(value)) { + differenceSet.add(value); + } + }); + + return differenceSet; + } + + isSubsetOf(otherSet: Set) { + if (this.size() > otherSet.size()) { + return false; + } + + let isSubset = true; + this.values().every(value => { + if (!otherSet.has(value)) { + isSubset = false; + return false; + } + return true; + }); + + return isSubset; + } + + isEmpty() { + return this.size() === 0; + } + + size() { + return Object.keys(this.items).length; + } + + clear() { + this.items = {}; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + const values = this.values(); + let objString = `${values[0]}`; + for (let i = 1; i < values.length; i++) { + objString = `${objString},${values[i].toString()}`; + } + return objString; + } +} diff --git a/src/ts/index.ts b/src/ts/index.ts index 04662277..80dcba31 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -5,6 +5,7 @@ export { default as DoublyLinkedList } from './data-structures/doubly-linked-lis export { default as CircularLinkedList } from './data-structures/circular-linked-list'; export { default as SortedLinkedList } from './data-structures/sorted-linked-list'; export { default as StackLinkedList } from './data-structures/stack-linked-list'; +export { default as Set } from './data-structures/set'; export const util = _util; diff --git a/test/js/data-structures/set.spec.js b/test/js/data-structures/set.spec.js new file mode 100644 index 00000000..f8e2bac1 --- /dev/null +++ b/test/js/data-structures/set.spec.js @@ -0,0 +1,352 @@ +import 'mocha'; +import { expect } from 'chai'; +import { Set } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('Set', () => { + let set; + + beforeEach(() => { + set = new Set(); + }); + + it('starts empty', () => { + expect(set.size()).to.equal(0); + expect(set.isEmpty()).to.equal(true); + }); + + it('adds elements', () => { + for (let i = 1; i < 5; i++) { + set.add(i); + expect(set.size()).to.equal(i); + } + + expect(set.isEmpty()).to.equal(false); + }); + + it('does not allow duplicated elements', () => { + let expected = true; + for (let i = 1; i < 5; i++) { + expect(set.add(i)).to.equal(expected); + } + + expected = false; + for (let i = 1; i < 5; i++) { + expect(set.add(i)).to.equal(expected); + } + }); + + it('deletes elements', () => { + for (let i = 1; i < 5; i++) { + set.add(i); + } + + for (let i = 1; i < 5; i++) { + expect(set.delete(i)).to.equal(true); + } + + // elements do not exist + for (let i = 1; i < 5; i++) { + expect(set.delete(i)).to.equal(false); + } + + expect(set.isEmpty()).to.equal(true); + }); + + it('returns if element exists', () => { + for (let i = 1; i < 5; i++) { + set.add(i); + expect(set.has(i)).to.equal(true); + } + + for (let i = 1; i < 5; i++) { + expect(set.delete(i)).to.equal(true); + expect(set.has(i)).to.equal(false); + } + }); + + it('returns the correct size', () => { + expect(set.size()).to.equal(0); + + for (let i = 1; i < 5; i++) { + set.add(i); + expect(set.size()).to.equal(i); + } + + const max = 5; + for (let i = 1; i < max; i++) { + set.delete(i); + expect(set.size()).to.equal(max - i - 1); + } + + expect(set.size()).to.equal(0); + expect(set.isEmpty()).to.equal(true); + }); + + it('returns if it is empty', () => { + expect(set.isEmpty()).to.equal(true); + + for (let i = 1; i < 5; i++) { + set.add(i); + expect(set.isEmpty()).to.equal(false); + } + + for (let i = 1; i < 5; i++) { + set.delete(i); + expect(set.isEmpty()).to.equal(!(i < 4)); + } + + expect(set.size()).to.equal(0); + expect(set.isEmpty()).to.equal(true); + }); + + it('clears the set', () => { + set.clear(); + expect(set.isEmpty()).to.equal(true); + + set.add(1); + set.add(2); + + set.clear(); + expect(set.isEmpty()).to.equal(true); + }); + + function addValues(min, max) { + set = new Set(); + + for (let i = min; i <= max; i++) { + set.add(i); + } + + return set; + } + + it('union between empty sets', () => { + const set1 = new Set(); + const set2 = new Set(); + + let setResult = set1.union(set2); + expect(setResult.isEmpty()).to.equal(true); + + setResult = set2.union(set1); + expect(setResult.isEmpty()).to.equal(true); + }); + + it('union between equal sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(1, 5); + + let setResult = set1.union(set2); + for (let i = 1; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.union(set1); + for (let i = 1; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('union between different sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(6, 10); + + let setResult = set1.union(set2); + for (let i = 1; i <= 10; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.union(set1); + for (let i = 1; i <= 10; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('union between sets with common values', () => { + const set1 = addValues(1, 5); + const set2 = addValues(3, 6); + + let setResult = set1.union(set2); + for (let i = 1; i <= 6; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.union(set1); + for (let i = 1; i <= 6; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('intersection between empty sets', () => { + const set1 = new Set(); + const set2 = new Set(); + + let setResult = set1.intersection(set2); + expect(setResult.isEmpty()).to.equal(true); + + setResult = set2.intersection(set1); + expect(setResult.isEmpty()).to.equal(true); + }); + + it('intersection between equal sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(1, 5); + + let setResult = set1.intersection(set2); + for (let i = 1; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.intersection(set1); + for (let i = 1; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('intersection different sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(6, 10); + + let setResult = set1.intersection(set2); + expect(setResult.isEmpty()).to.equal(true); + + setResult = set2.intersection(set1); + expect(setResult.isEmpty()).to.equal(true); + }); + + it('intersection between sets with common values', () => { + const set1 = addValues(1, 5); + const set2 = addValues(3, 6); + + let setResult = set1.intersection(set2); + for (let i = 3; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.intersection(set1); + for (let i = 3; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('difference between empty sets', () => { + const set1 = new Set(); + const set2 = new Set(); + + let setResult = set1.difference(set2); + expect(setResult.isEmpty()).to.equal(true); + + setResult = set2.difference(set1); + expect(setResult.isEmpty()).to.equal(true); + }); + + it('difference between equal sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(1, 5); + + let setResult = set1.difference(set2); + expect(setResult.isEmpty()).to.equal(true); + + setResult = set2.difference(set1); + expect(setResult.isEmpty()).to.equal(true); + }); + + it('difference different sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(6, 10); + + let setResult = set1.difference(set2); + for (let i = 1; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.difference(set1); + for (let i = 6; i <= 10; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('difference between sets with common values', () => { + const set1 = addValues(1, 5); + const set2 = addValues(3, 6); + + let setResult = set1.difference(set2); + for (let i = 1; i <= 2; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.difference(set1); + for (let i = 6; i <= 6; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('isSubsetOf between empty sets', () => { + const set1 = new Set(); + const set2 = new Set(); + + expect(set1.isSubsetOf(set2)).to.equal(true); + expect(set2.isSubsetOf(set1)).to.equal(true); + }); + + it('isSubsetOf between equal sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(1, 5); + + expect(set1.isSubsetOf(set2)).to.equal(true); + expect(set2.isSubsetOf(set1)).to.equal(true); + }); + + it('isSubsetOf different sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(6, 10); + + expect(set1.isSubsetOf(set2)).to.equal(false); + expect(set2.isSubsetOf(set1)).to.equal(false); + }); + + it('isSubsetOf between sets with common values', () => { + const set1 = addValues(1, 8); + const set2 = addValues(3, 6); + expect(set1.isSubsetOf(set2)).to.equal(false); + expect(set2.isSubsetOf(set1)).to.equal(true); + + const set3 = addValues(1, 5); + const set4 = addValues(3, 6); + expect(set3.isSubsetOf(set4)).to.equal(false); + expect(set4.isSubsetOf(set3)).to.equal(false); + }); + + it('returns toString primitive types', () => { + expect(set.toString()).to.equal(''); + + set.add(1); + expect(set.toString()).to.equal('1'); + + set.add(2); + expect(set.toString()).to.equal('1,2'); + + set.clear(); + expect(set.toString()).to.equal(''); + }); + + it('returns toString primitive types: string', () => { + const ds = new Set(); + ds.add('el1'); + expect(ds.toString()).to.equal('el1'); + + ds.add('el2'); + expect(ds.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + const ds = new Set(); + expect(ds.toString()).to.equal(''); + + ds.add(new MyObj(1, 2)); + expect(ds.toString()).to.equal('1|2'); + + ds.add(new MyObj(3, 4)); + expect(ds.toString()).to.equal('1|2,3|4'); + }); +}); diff --git a/test/ts/data-structures/set.spec.ts b/test/ts/data-structures/set.spec.ts new file mode 100644 index 00000000..7320cdfc --- /dev/null +++ b/test/ts/data-structures/set.spec.ts @@ -0,0 +1,352 @@ +import 'mocha'; +import { expect } from 'chai'; +import { Set } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('Set', () => { + let set: Set; + + beforeEach(() => { + set = new Set(); + }); + + it('starts empty', () => { + expect(set.size()).to.equal(0); + expect(set.isEmpty()).to.equal(true); + }); + + it('adds elements', () => { + for (let i = 1; i < 5; i++) { + set.add(i); + expect(set.size()).to.equal(i); + } + + expect(set.isEmpty()).to.equal(false); + }); + + it('does not allow duplicated elements', () => { + let expected = true; + for (let i = 1; i < 5; i++) { + expect(set.add(i)).to.equal(expected); + } + + expected = false; + for (let i = 1; i < 5; i++) { + expect(set.add(i)).to.equal(expected); + } + }); + + it('deletes elements', () => { + for (let i = 1; i < 5; i++) { + set.add(i); + } + + for (let i = 1; i < 5; i++) { + expect(set.delete(i)).to.equal(true); + } + + // elements do not exist + for (let i = 1; i < 5; i++) { + expect(set.delete(i)).to.equal(false); + } + + expect(set.isEmpty()).to.equal(true); + }); + + it('returns if element exists', () => { + for (let i = 1; i < 5; i++) { + set.add(i); + expect(set.has(i)).to.equal(true); + } + + for (let i = 1; i < 5; i++) { + expect(set.delete(i)).to.equal(true); + expect(set.has(i)).to.equal(false); + } + }); + + it('returns the correct size', () => { + expect(set.size()).to.equal(0); + + for (let i = 1; i < 5; i++) { + set.add(i); + expect(set.size()).to.equal(i); + } + + const max = 5; + for (let i = 1; i < max; i++) { + set.delete(i); + expect(set.size()).to.equal(max - i - 1); + } + + expect(set.size()).to.equal(0); + expect(set.isEmpty()).to.equal(true); + }); + + it('returns if it is empty', () => { + expect(set.isEmpty()).to.equal(true); + + for (let i = 1; i < 5; i++) { + set.add(i); + expect(set.isEmpty()).to.equal(false); + } + + for (let i = 1; i < 5; i++) { + set.delete(i); + expect(set.isEmpty()).to.equal(!(i < 4)); + } + + expect(set.size()).to.equal(0); + expect(set.isEmpty()).to.equal(true); + }); + + it('clears the set', () => { + set.clear(); + expect(set.isEmpty()).to.equal(true); + + set.add(1); + set.add(2); + + set.clear(); + expect(set.isEmpty()).to.equal(true); + }); + + function addValues(min: number, max: number) { + set = new Set(); + + for (let i = min; i <= max; i++) { + set.add(i); + } + + return set; + } + + it('union between empty sets', () => { + const set1 = new Set(); + const set2 = new Set(); + + let setResult = set1.union(set2); + expect(setResult.isEmpty()).to.equal(true); + + setResult = set2.union(set1); + expect(setResult.isEmpty()).to.equal(true); + }); + + it('union between equal sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(1, 5); + + let setResult = set1.union(set2); + for (let i = 1; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.union(set1); + for (let i = 1; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('union between different sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(6, 10); + + let setResult = set1.union(set2); + for (let i = 1; i <= 10; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.union(set1); + for (let i = 1; i <= 10; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('union between sets with common values', () => { + const set1 = addValues(1, 5); + const set2 = addValues(3, 6); + + let setResult = set1.union(set2); + for (let i = 1; i <= 6; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.union(set1); + for (let i = 1; i <= 6; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('intersection between empty sets', () => { + const set1 = new Set(); + const set2 = new Set(); + + let setResult = set1.intersection(set2); + expect(setResult.isEmpty()).to.equal(true); + + setResult = set2.intersection(set1); + expect(setResult.isEmpty()).to.equal(true); + }); + + it('intersection between equal sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(1, 5); + + let setResult = set1.intersection(set2); + for (let i = 1; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.intersection(set1); + for (let i = 1; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('intersection different sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(6, 10); + + let setResult = set1.intersection(set2); + expect(setResult.isEmpty()).to.equal(true); + + setResult = set2.intersection(set1); + expect(setResult.isEmpty()).to.equal(true); + }); + + it('intersection between sets with common values', () => { + const set1 = addValues(1, 5); + const set2 = addValues(3, 6); + + let setResult = set1.intersection(set2); + for (let i = 3; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.intersection(set1); + for (let i = 3; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('difference between empty sets', () => { + const set1 = new Set(); + const set2 = new Set(); + + let setResult = set1.difference(set2); + expect(setResult.isEmpty()).to.equal(true); + + setResult = set2.difference(set1); + expect(setResult.isEmpty()).to.equal(true); + }); + + it('difference between equal sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(1, 5); + + let setResult = set1.difference(set2); + expect(setResult.isEmpty()).to.equal(true); + + setResult = set2.difference(set1); + expect(setResult.isEmpty()).to.equal(true); + }); + + it('difference different sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(6, 10); + + let setResult = set1.difference(set2); + for (let i = 1; i <= 5; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.difference(set1); + for (let i = 6; i <= 10; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('difference between sets with common values', () => { + const set1 = addValues(1, 5); + const set2 = addValues(3, 6); + + let setResult = set1.difference(set2); + for (let i = 1; i <= 2; i++) { + expect(setResult.has(i)).to.equal(true); + } + + setResult = set2.difference(set1); + for (let i = 6; i <= 6; i++) { + expect(setResult.has(i)).to.equal(true); + } + }); + + it('isSubsetOf between empty sets', () => { + const set1 = new Set(); + const set2 = new Set(); + + expect(set1.isSubsetOf(set2)).to.equal(true); + expect(set2.isSubsetOf(set1)).to.equal(true); + }); + + it('isSubsetOf between equal sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(1, 5); + + expect(set1.isSubsetOf(set2)).to.equal(true); + expect(set2.isSubsetOf(set1)).to.equal(true); + }); + + it('isSubsetOf different sets', () => { + const set1 = addValues(1, 5); + const set2 = addValues(6, 10); + + expect(set1.isSubsetOf(set2)).to.equal(false); + expect(set2.isSubsetOf(set1)).to.equal(false); + }); + + it('isSubsetOf between sets with common values', () => { + const set1 = addValues(1, 8); + const set2 = addValues(3, 6); + expect(set1.isSubsetOf(set2)).to.equal(false); + expect(set2.isSubsetOf(set1)).to.equal(true); + + const set3 = addValues(1, 5); + const set4 = addValues(3, 6); + expect(set3.isSubsetOf(set4)).to.equal(false); + expect(set4.isSubsetOf(set3)).to.equal(false); + }); + + it('returns toString primitive types', () => { + expect(set.toString()).to.equal(''); + + set.add(1); + expect(set.toString()).to.equal('1'); + + set.add(2); + expect(set.toString()).to.equal('1,2'); + + set.clear(); + expect(set.toString()).to.equal(''); + }); + + it('returns toString primitive types: string', () => { + const ds = new Set(); + ds.add('el1'); + expect(ds.toString()).to.equal('el1'); + + ds.add('el2'); + expect(ds.toString()).to.equal('el1,el2'); + }); + + it('returns toString objects', () => { + const ds = new Set(); + expect(ds.toString()).to.equal(''); + + ds.add(new MyObj(1, 2)); + expect(ds.toString()).to.equal('1|2'); + + ds.add(new MyObj(3, 4)); + expect(ds.toString()).to.equal('1|2,3|4'); + }); +}); From 79abb9a402acfdfa00f6e9e8a9e86a2d02d0529b Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 16:02:13 -0200 Subject: [PATCH 025/188] updated package versions --- package.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 25097717..d521cf35 100644 --- a/package.json +++ b/package.json @@ -52,27 +52,27 @@ }, "devDependencies": { "@types/chai": "^4.0.4", - "@types/mocha": "^2.2.42", + "@types/mocha": "^2.2.43", "babel-cli": "^6.26.0", "babel-core": "^6.26.0", "babel-eslint": "^8.0.1", "babel-loader": "^7.1.2", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-es2015-modules-umd": "^6.24.1", - "babel-preset-env": "^1.6.0", + "babel-preset-env": "^1.6.1", "chai": "^4.1.2", - "codecov": "^2.3.0", - "eslint": "^4.8.0", - "eslint-config-airbnb-base": "^12.0.2", - "eslint-plugin-import": "^2.7.0", + "codecov": "^2.3.1", + "eslint": "^4.9.0", + "eslint-config-airbnb-base": "^12.1.0", + "eslint-plugin-import": "^2.8.0", "istanbul": "^v1.1.0-alpha.1", "mocha": "^4.0.1", "mochawesome": "^2.3.1", "nyc": "^11.2.1", "ts-node": "^3.3.0", - "tslint": "^5.7.0", + "tslint": "^5.8.0", "typescript": "^2.5.3", - "webpack": "^3.7.1", + "webpack": "^3.8.1", "yargs": "^9.0.1" } } From 8fc164323b409a7d7f92d6ce5ee7edad6204eb0b Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 16:09:26 -0200 Subject: [PATCH 026/188] chapter 03: [Stacks] --- examples/chapter03/01-Stack.js | 3 ++- examples/chapter03/02-BalancedSymbols.js | 2 +- examples/chapter03/03-DecimalToBinary.js | 4 ++-- examples/chapter03/04-TowerOfHanoi.js | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/examples/chapter03/01-Stack.js b/examples/chapter03/01-Stack.js index 972793b2..d3994b08 100755 --- a/examples/chapter03/01-Stack.js +++ b/examples/chapter03/01-Stack.js @@ -1,7 +1,8 @@ -import Stack from './../../src/js/data-structures/stack.js'; // ES2015 modules +// import Stack from './../../src/js/data-structures/stack.js'; // ES2015 modules // import StackArray from './../../src/js/data-structures/stack-array.js'; // ES2015 modules // const Stack = require('../../dist/js/data-structures/stack'); // for node // const Stack = stack; // older browsers - remove from html script import: type="module" +const { Stack } = PacktDataStructuresAlgorithms; const stack = new Stack(); // new StackArray(); diff --git a/examples/chapter03/02-BalancedSymbols.js b/examples/chapter03/02-BalancedSymbols.js index 5084f479..614f44e7 100755 --- a/examples/chapter03/02-BalancedSymbols.js +++ b/examples/chapter03/02-BalancedSymbols.js @@ -1,4 +1,4 @@ -const parenthesesChecker = PacktDataStructuresAlgorithms.parenthesesChecker; +const { parenthesesChecker } = PacktDataStructuresAlgorithms; console.log('{([])}', parenthesesChecker('{([])}')); // true console.log('{{([][])}()}', parenthesesChecker('{{([][])}()}')); // true diff --git a/examples/chapter03/03-DecimalToBinary.js b/examples/chapter03/03-DecimalToBinary.js index eebdf916..f39fcb1d 100755 --- a/examples/chapter03/03-DecimalToBinary.js +++ b/examples/chapter03/03-DecimalToBinary.js @@ -1,5 +1,5 @@ -const decimalToBinary = PacktDataStructuresAlgorithms.parenthesesChecker; -const baseConverter = PacktDataStructuresAlgorithms.baseConverter; +const { decimalToBinary } = PacktDataStructuresAlgorithms; +const { baseConverter } = PacktDataStructuresAlgorithms; // 233 == 11101001 // 2x(10x10) + 3x(10) + 3x(1) diff --git a/examples/chapter03/04-TowerOfHanoi.js b/examples/chapter03/04-TowerOfHanoi.js index e611aef6..f5d85cf7 100755 --- a/examples/chapter03/04-TowerOfHanoi.js +++ b/examples/chapter03/04-TowerOfHanoi.js @@ -1,5 +1,5 @@ -const hanoiStack = PacktDataStructuresAlgorithms.hanoiStack; -const hanoi = PacktDataStructuresAlgorithms.hanoi; +const { hanoiStack } = PacktDataStructuresAlgorithms; +const { hanoi } = PacktDataStructuresAlgorithms; console.log(hanoiStack(3)); From 4201d4b016612b614282ca48ef57e045f52a19dc Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 16:09:35 -0200 Subject: [PATCH 027/188] chapter 06: [Sets] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- src/js/index.js | 42 +++++++------------ 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index 2535c693..ef6fa6ec 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],e):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=e():t.PacktDataStructuresAlgorithms=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=7)}([function(t,e,n){var i,r,o;!function(n,u){r=[e],i=u,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t){"use strict";function e(t,e){return t===e?0:t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,t),this.equalsFn=e,this.count=0,this.head=void 0}return o(t,[{key:"push",value:function(t){var e=new i.Node(t),n=void 0;if(null==this.head)this.head=e;else{for(n=this.head;null!=n.next;)n=n.next;n.next=e}this.count++}},{key:"getElementAt",value:function(t){if(t>=0&&t<=this.count){for(var e=this.head,n=0;n=0&&e<=this.count){var n=new i.Node(t);if(0===e){var r=this.head;n.next=r,this.head=n}else{var o=this.getElementAt(e-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,e);var i=u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.tail=void 0,i}return s(e,t),f(e,[{key:"push",value:function(t){var e=new r.DoublyNode(t);null==this.head?(this.head=e,this.tail=e):(this.tail.next=e,e.prev=this.tail,this.tail=e),this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new r.DoublyNode(t),i=this.head;if(0===e)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(e===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var o=this.getElementAt(e-1);i=o.next,n.next=i,o.next=n,i.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0)this.lowestCount--,this.items[this.lowestCount]=t;else{for(var e=this.count;e>0;e--)this.items[e]=this.items[e-1];this.count++,this.items[0]=t}}},{key:"addBack",value:function(t){this.items[this.count]=t,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var t=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,t}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var t=this.items[this.count];return delete this.items[this.count],t}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=""+this.items[this.lowestCount],e=this.lowestCount+1;e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,e),u(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t))}return s(e,t),f(e,[{key:"push",value:function(t){var e=new r.Node(t),n=void 0;null==this.head?this.head=e:(n=this.getElementAt(this.size()-1),n.next=e),e.next=this.head,this.count++}},{key:"insert",value:function(t,e){if(e>=0&&e<=this.count){var n=new r.Node(t),i=this.head;if(0===e)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getElementAt(this.size()),this.head=n,i.next=this.head);else{var o=this.getElementAt(e-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(t){if(t>=0&&t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;r(this,e);var u=o(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return u.equalsFn=t,u.compareFn=i,u}return u(e,t),a(e,[{key:"push",value:function(t){if(this.isEmpty())f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"push",this).call(this,t);else{var n=this.getIndexNextSortedElement(t);f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,n)}}},{key:"insert",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,0===n?n:0);var i=this.getIndexNextSortedElement(t);return f(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insert",this).call(this,t,i)}},{key:"getIndexNextSortedElement",value:function(t){for(var e=this.head,i=0;i0&&(o=r,u=i),u.forEach(function(t){o.includes(t)&&n.add(t)}),n}},{key:"difference",value:function(e){var n=new t;return this.values().forEach(function(t){e.has(t)||n.add(t)}),n}},{key:"isSubsetOf",value:function(t){if(this.size()>t.size())return!1;var e=!0;return this.values().every(function(n){return!!t.has(n)||(e=!1,!1)}),e}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var t=this.values(),e=""+t[0],n=1;n1;){for(var u=0;u7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return a;if(1===t){r.push(e.pop());var f={};f[o]=e.toString(),f[u]=i.toString(),f[s]=r.toString(),a.push(f)}else{n(t-1,e,r,i,o,s,u,a),r.push(e.pop());var l={};l[o]=e.toString(),l[u]=i.toString(),l[s]=r.toString(),a.push(l),n(t-1,i,e,r,u,o,s,a)}return a}function i(t){for(var e=new o.default,i=new o.default,r=new o.default,u=t;u>0;u--)e.push(u);return n(t,e,r,i,"source","helper","dest")}function r(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([e,i]):(r(t-1,e,i,n,o),o.push([e,i]),r(t-1,n,e,i,o)),o)}Object.defineProperty(t,"__esModule",{value:!0}),t.hanoiStack=i,t.hanoi=r;var o=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(u,s){r=[e,n(2)],i=s,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t){for(var e=new r.default,n=t,i=void 0,o="";n>0;)i=Math.floor(n%2),e.push(i),n=Math.floor(n/2);for(;!e.isEmpty();)o+=e.pop().toString();return o}function i(t,e){var n=new r.default,i=t,o=void 0,u="";if(!(e>=2&&e<=36))return"";for(;i>0;)o=Math.floor(i%e),n.push(o),i=Math.floor(i/e);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(t,"__esModule",{value:!0}),t.decimalToBinary=n,t.baseConverter=i;var r=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(n,u){r=[t,e],i=u,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0?e.push(s):e.isEmpty()?o=!1:(a=e.pop(),n.indexOf(a)!==r.indexOf(s)&&(o=!1)),u++;return!(!o||!e.isEmpty())}Object.defineProperty(t,"__esModule",{value:!0}),t.parenthesesChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})},function(t,e,n){var i,r,o;!function(u,s){r=[e,n(6)],i=s,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(t,e){"use strict";function n(t){if(void 0===t||null===t||null!==t&&0===t.length)return!1;for(var e=new i.default,n=t.toLocaleLowerCase().split(" ").join(""),r=!0,o=void 0,u=void 0,s=0;s1&&r;)o=e.removeFront(),u=e.removeBack(),o!==u&&(r=!1);return r}Object.defineProperty(t,"__esModule",{value:!0}),t.palindromeChecker=n;var i=function(t){return t&&t.__esModule?t:{default:t}}(e)})}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=7)}([function(e,t,n){var i,r,o;!function(n,u){r=[t],i=u,void 0!==(o="function"==typeof i?i.apply(t,r):i)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new i.Node(e);if(0===t){var r=this.head;n.next=r,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var i=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.tail=void 0,i}return s(t,e),f(t,[{key:"push",value:function(e){var t=new r.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.DoublyNode(e),i=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var o=this.getElementAt(t-1);i=o.next,n.next=i,o.next=n,i.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return a;if(1===e){r.push(t.pop());var f={};f[o]=t.toString(),f[u]=i.toString(),f[s]=r.toString(),a.push(f)}else{n(e-1,t,r,i,o,s,u,a),r.push(t.pop());var l={};l[o]=t.toString(),l[u]=i.toString(),l[s]=r.toString(),a.push(l),n(e-1,i,t,r,u,o,s,a)}return a}function i(e){for(var t=new o.default,i=new o.default,r=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,r,i,"source","helper","dest")}function r(e,t,n,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,i]):(r(e-1,t,i,n,o),o.push([t,i]),r(e-1,n,t,i,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=i,e.hanoi=r;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,o;!function(u,s){r=[t,n(1)],i=s,void 0!==(o="function"==typeof i?i.apply(t,r):i)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function i(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=i;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,o;!function(u,s){r=[t,n(1)],i=s,void 0!==(o="function"==typeof i?i.apply(t,r):i)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n="([{",r=")]}",o=!0,u=0,s=void 0,a=void 0;u=0?t.push(s):t.isEmpty()?o=!1:(a=t.pop(),n.indexOf(a)!==r.indexOf(s)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,o;!function(u,s){r=[t,n(5)],i=s,void 0!==(o="function"==typeof i?i.apply(t,r):i)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){if(void 0===e||null===e||null!==e&&0===e.length)return!1;for(var t=new i.default,n=e.toLocaleLowerCase().split(" ").join(""),r=!0,o=void 0,u=void 0,s=0;s1&&r;)o=t.removeFront(),u=t.removeBack(),o!==u&&(r=!1);return r}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,o;!function(u,s){r=[e,t,n(0),n(2),n(3)],i=s,void 0!==(o="function"==typeof i?i.apply(t,r):i)&&(e.exports=o)}(0,function(e,t,n,i,r){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(e){return e&&e.__esModule?e:{default:e}}(i),f=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return s(t,e),f(t,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.Node(e),i=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getElementAt(this.size()),this.head=n,i.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;r(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=i,u}return u(t,e),a(t,[{key:"push",value:function(e){if(this.isEmpty())f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var i=this.getIndexNextSortedElement(e);return f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,i)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,i=0;i0&&(o=r,u=i),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n1;){for(var u=0;u Date: Sun, 22 Oct 2017 16:17:17 -0200 Subject: [PATCH 028/188] chapter 03: [Stacks] --- examples/chapter03/01-Stack.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/chapter03/01-Stack.html b/examples/chapter03/01-Stack.html index c322ded8..3025a012 100755 --- a/examples/chapter03/01-Stack.html +++ b/examples/chapter03/01-Stack.html @@ -5,8 +5,9 @@ - - - + + + From 44c54ca0346de430fa7b514b7f0e32a55e9a902a Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 18:04:07 -0200 Subject: [PATCH 029/188] chapter 06: [Sets] --- src/js/data-structures/set.js | 16 ++++++++-------- src/ts/data-structures/set.ts | 18 +++++++++--------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/js/data-structures/set.js b/src/js/data-structures/set.js index 07816bb5..0203bb8b 100644 --- a/src/js/data-structures/set.js +++ b/src/js/data-structures/set.js @@ -2,22 +2,22 @@ export default class Set { constructor() { this.items = {}; } - add(value) { - if (!this.has(value)) { - this.items[value] = value; + add(element) { + if (!this.has(element)) { + this.items[element] = element; return true; } return false; } - delete(value) { - if (this.has(value)) { - delete this.items[value]; + delete(element) { + if (this.has(element)) { + delete this.items[element]; return true; } return false; } - has(value) { - return Object.prototype.hasOwnProperty.call(this.items, value); + has(element) { + return Object.prototype.hasOwnProperty.call(this.items, element); } values() { return Object.values(this.items); diff --git a/src/ts/data-structures/set.ts b/src/ts/data-structures/set.ts index 61c62a26..c67faf75 100644 --- a/src/ts/data-structures/set.ts +++ b/src/ts/data-structures/set.ts @@ -5,25 +5,25 @@ export default class Set { this.items = {}; } - add(value: T) { - if (!this.has(value)) { - this.items[value] = value; + add(element: T) { + if (!this.has(element)) { + this.items[element] = element; return true; } return false; } - delete(value: T) { - if (this.has(value)) { - delete this.items[value]; + delete(element: T) { + if (this.has(element)) { + delete this.items[element]; return true; } return false; } - has(value: T) { - // return this.items.hasOwnProperty(value); - return Object.prototype.hasOwnProperty.call(this.items, value); + has(element: T) { + // return this.items.hasOwnProperty(element); + return Object.prototype.hasOwnProperty.call(this.items, element); } values(): T[] { From 342c568fcab73fd7b22ae75ba285ca7b12bfd03e Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 22 Oct 2017 18:41:13 -0200 Subject: [PATCH 030/188] chapter 06: [Sets] --- examples/chapter06/03-ES2015Set.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/chapter06/03-ES2015Set.js b/examples/chapter06/03-ES2015Set.js index 38de9fc9..721ea4d1 100755 --- a/examples/chapter06/03-ES2015Set.js +++ b/examples/chapter06/03-ES2015Set.js @@ -35,6 +35,8 @@ const union = (set1, set2) => { }; console.log(union(setA, setB)); +console.log(new Set([...setA, ...setB])); + // --------- Intersection ---------- const intersection = (set1, set2) => { const intersectionSet = new Set(); @@ -47,6 +49,8 @@ const intersection = (set1, set2) => { }; console.log(intersection(setA, setB)); +console.log(new Set([...setA].filter(x => setB.has(x)))); + // alternative - works on FF only // console.log(new Set([x for (x of setA) if (setB.has(x))])); @@ -62,5 +66,7 @@ const difference = (set1, set2) => { }; console.log(difference(setA, setB)); +console.log(new Set([...setA].filter(x => !setB.has(x)))); + // alternative - works on FF only // console.log(new Set([x for (x of setA) if (!setB.has(x))])); From c63f7c82bbbdd855adbde76de3704799e9b8cc4a Mon Sep 17 00:00:00 2001 From: loiane Date: Mon, 23 Oct 2017 11:41:43 -0200 Subject: [PATCH 031/188] merged 2nd ed --- chapter01/01-HelloWorld.html | 14 ++ chapter01/01-HelloWorld.js | 8 + chapter01/02-Variables.html | 10 + chapter01/03-Operators.html | 10 + chapter01/03-Operators.js | 68 +++++++ chapter01/04-TruthyFalsy.html | 10 + chapter01/04-TruthyFalsy.js | 23 +++ chapter01/05-EqualsOperators.html | 10 + chapter01/05-EqualsOperators.js | 36 ++++ chapter01/06-ConditionalStatements.html | 10 + chapter01/06-ConditionalStatements.js | 51 +++++ chapter01/07-Loops.html | 10 + chapter01/07-Loops.js | 23 +++ chapter01/08-Functions.html | 10 + chapter02/01-Introduction.html | 10 + chapter02/01-Introduction.js | 12 ++ chapter02/02-CreatingAndInitialingArrays.html | 10 + chapter02/02-CreatingAndInitialingArrays.js | 34 ++++ chapter02/03-AddingRemovingElements.html | 10 + chapter02/03-AddingRemovingElements.js | 73 +++++++ .../04-TwoDimensionalMultiDimensional.html | 10 + .../04-TwoDimensionalMultiDimensional.js | 62 ++++++ chapter02/05-ArrayMethods.html | 10 + chapter02/05-ArrayMethods.js | 113 +++++++++++ chapter03/01-Stack.html | 10 + chapter03/03-BalancedSymbols.html | 11 ++ chapter03/04-DecimalToBinary.html | 11 ++ chapter03/04-DecimalToBinary.js | 52 +++++ chapter03/05-TowerOfHanoi.html | 11 ++ chapter04/01-Queue.html | 10 + chapter04/03-PriorityQueue.html | 10 + chapter04/04-HotPotato.html | 11 ++ chapter06/03-Operations.html | 11 ++ chapter07/02-UsingDictionaries.html | 11 ++ chapter07/03-HashTable.js | 46 +++++ chapter07/04-UsingHash.html | 11 ++ chapter07/04-UsingHash.js | 29 +++ .../06-UsingHashCollisionSeparateChaining.js | 40 ++++ .../08-UsingHashCollisionLinearProbing.html | 11 ++ chapter08/01-BinarySearchTree.js | 187 ++++++++++++++++++ chapter09/02-UsingGraphs.html | 14 ++ chapter09/02-UsingGraphs.js | 97 +++++++++ chapter10/02-UsingSortingAlgorithms.html | 11 ++ chapter10/03-UsingSearchingAlgorithms.html | 11 ++ chapter10/03-UsingSearchingAlgorithms.js | 33 ++++ chapter11/01-Recursion.html | 10 + chapter11/01-Recursion.js | 25 +++ chapter11/02-InfiniteRecursion.html | 10 + chapter11/02-InfiniteRecursion.js | 15 ++ chapter11/03-MinCoinChangeDP.html | 10 + chapter11/04-MinCoinChangeGreedy.html | 10 + 51 files changed, 1355 insertions(+) create mode 100755 chapter01/01-HelloWorld.html create mode 100755 chapter01/01-HelloWorld.js create mode 100755 chapter01/02-Variables.html create mode 100755 chapter01/03-Operators.html create mode 100755 chapter01/03-Operators.js create mode 100755 chapter01/04-TruthyFalsy.html create mode 100755 chapter01/04-TruthyFalsy.js create mode 100755 chapter01/05-EqualsOperators.html create mode 100755 chapter01/05-EqualsOperators.js create mode 100755 chapter01/06-ConditionalStatements.html create mode 100755 chapter01/06-ConditionalStatements.js create mode 100755 chapter01/07-Loops.html create mode 100755 chapter01/07-Loops.js create mode 100755 chapter01/08-Functions.html create mode 100755 chapter02/01-Introduction.html create mode 100755 chapter02/01-Introduction.js create mode 100755 chapter02/02-CreatingAndInitialingArrays.html create mode 100755 chapter02/02-CreatingAndInitialingArrays.js create mode 100755 chapter02/03-AddingRemovingElements.html create mode 100755 chapter02/03-AddingRemovingElements.js create mode 100755 chapter02/04-TwoDimensionalMultiDimensional.html create mode 100755 chapter02/04-TwoDimensionalMultiDimensional.js create mode 100755 chapter02/05-ArrayMethods.html create mode 100755 chapter02/05-ArrayMethods.js create mode 100755 chapter03/01-Stack.html create mode 100755 chapter03/03-BalancedSymbols.html create mode 100755 chapter03/04-DecimalToBinary.html create mode 100755 chapter03/04-DecimalToBinary.js create mode 100755 chapter03/05-TowerOfHanoi.html create mode 100755 chapter04/01-Queue.html create mode 100755 chapter04/03-PriorityQueue.html create mode 100755 chapter04/04-HotPotato.html create mode 100755 chapter06/03-Operations.html create mode 100755 chapter07/02-UsingDictionaries.html create mode 100755 chapter07/03-HashTable.js create mode 100755 chapter07/04-UsingHash.html create mode 100755 chapter07/04-UsingHash.js create mode 100755 chapter07/06-UsingHashCollisionSeparateChaining.js create mode 100755 chapter07/08-UsingHashCollisionLinearProbing.html create mode 100755 chapter08/01-BinarySearchTree.js create mode 100755 chapter09/02-UsingGraphs.html create mode 100755 chapter09/02-UsingGraphs.js create mode 100755 chapter10/02-UsingSortingAlgorithms.html create mode 100755 chapter10/03-UsingSearchingAlgorithms.html create mode 100755 chapter10/03-UsingSearchingAlgorithms.js create mode 100755 chapter11/01-Recursion.html create mode 100755 chapter11/01-Recursion.js create mode 100755 chapter11/02-InfiniteRecursion.html create mode 100755 chapter11/02-InfiniteRecursion.js create mode 100755 chapter11/03-MinCoinChangeDP.html create mode 100755 chapter11/04-MinCoinChangeGreedy.html diff --git a/chapter01/01-HelloWorld.html b/chapter01/01-HelloWorld.html new file mode 100755 index 00000000..f7eca1bf --- /dev/null +++ b/chapter01/01-HelloWorld.html @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter01/01-HelloWorld.js b/chapter01/01-HelloWorld.js new file mode 100755 index 00000000..89833849 --- /dev/null +++ b/chapter01/01-HelloWorld.js @@ -0,0 +1,8 @@ +function output(t) { + document.write('

' + t + '

'); + return; +} + +alert('Hello, World!'); +console.log('Hello, World!'); +output('Hello, World!'); \ No newline at end of file diff --git a/chapter01/02-Variables.html b/chapter01/02-Variables.html new file mode 100755 index 00000000..f093a684 --- /dev/null +++ b/chapter01/02-Variables.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter01/03-Operators.html b/chapter01/03-Operators.html new file mode 100755 index 00000000..2502aa78 --- /dev/null +++ b/chapter01/03-Operators.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter01/03-Operators.js b/chapter01/03-Operators.js new file mode 100755 index 00000000..d1044b92 --- /dev/null +++ b/chapter01/03-Operators.js @@ -0,0 +1,68 @@ +/* Arithmetic operators */ +var num = 0; + +console.log('num value is ' + num); + +num = num + 2; + +console.log('New num value is ' + num); + +num = num * 3; + +console.log('New num value is ' + num); + +num = num / 2; + +console.log('New num value is ' + num); + +num++; + +num--; + +console.log('New num value is ' + num); + +console.log('num mod 2 value is ' + (num % 2)); + + +/* Assignment operators */ +num += 1; +num -= 2; +num *= 3; +num /= 2; +num %= 3; + +console.log('New num value is ' + num); + +/* Assignment operators */ +console.log('num == 1 : ' + (num == 1)); +console.log('num === 1 : ' + (num === 1)); +console.log('num != 1 : ' + (num != 1)); +console.log('num > 1 : ' + (num > 1)); +console.log('num < 1 : ' + (num < 1)); +console.log('num >= 1 : ' + (num >= 1)); +console.log('num <= 1 : ' + (num <= 1)); + +/* Logical operators */ +console.log('true && false : ' + (true && false)); +console.log('true || false : ' + (true || false)); +console.log('!true : ' + (!true)); + +/* Bitwise operators */ +console.log('5 & 1:', (5 & 1)); //same as 0101 & 0001 (result 0001 / 1) +console.log('5 | 1:', (5 | 1)); //same as 0101 | 0001 (result 0101 / 5) +console.log('~ 5:', (~5)); //same as ~0101 (result 1010 / 10) +console.log('5 ^ 1:', (5 ^ 1)); //same as 0101 ^ 0001 (result 0100 / 4) +console.log('5 << 1:', (5 << 1)); //same as 0101 << 1 (result 1010 / 10) +console.log('5 >> 1:', (5 >> 1)); //same as 0101 >> 1 (result 0010 / 2) + +/* typeOf */ +console.log('typeof num:', typeof num); +console.log('typeof Packt:', typeof 'Packt'); +console.log('typeof true:', typeof true); +console.log('typeof [1,2,3]:', typeof [1,2,3]); +console.log('typeof {name:John}:', typeof {name:'John'}); + +/* delete */ +var myObj = {name: 'John', age: 21}; +delete myObj.age; +console.log(myObj); //Object {name: "John"} \ No newline at end of file diff --git a/chapter01/04-TruthyFalsy.html b/chapter01/04-TruthyFalsy.html new file mode 100755 index 00000000..9b20f161 --- /dev/null +++ b/chapter01/04-TruthyFalsy.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter01/04-TruthyFalsy.js b/chapter01/04-TruthyFalsy.js new file mode 100755 index 00000000..d700cd2c --- /dev/null +++ b/chapter01/04-TruthyFalsy.js @@ -0,0 +1,23 @@ +function testTruthy(val){ + return val ? console.log('truthy') : console.log('falsy'); +} + +testTruthy(true); //true +testTruthy(false); //false +testTruthy(new Boolean(false)); //true (object is always true) + +testTruthy(''); //false +testTruthy('Packt'); //true +testTruthy(new String('')); //true (object is always true) + +testTruthy(1); //true +testTruthy(-1); //true +testTruthy(NaN); //false +testTruthy(new Number(NaN)); //true (object is always true) + +testTruthy({}); //true (object is always true) + +var obj = {name:'John'}; +testTruthy(obj); //true +testTruthy(obj.name); //true +testTruthy(obj.age); //age (prop does not exist) \ No newline at end of file diff --git a/chapter01/05-EqualsOperators.html b/chapter01/05-EqualsOperators.html new file mode 100755 index 00000000..bf26fbf3 --- /dev/null +++ b/chapter01/05-EqualsOperators.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter01/05-EqualsOperators.js b/chapter01/05-EqualsOperators.js new file mode 100755 index 00000000..253c21b9 --- /dev/null +++ b/chapter01/05-EqualsOperators.js @@ -0,0 +1,36 @@ +//Packt == true + +console.log('packt' ? true : false); +//outputs true + +console.log('packt' == true); +//1 - converts Boolean using toNumber +//'packt' == 1 +//2 - converts String using toNumber +//NaN == 1 +//outputs false + +console.log('packt' == false); +//1 - converts Boolean using toNumber +//'packt' == 0 +//2 - converts String using toNumber +//NaN == 0 +//outputs false + +console.log([0] == true); +//1 - converts Boolean using toNumber +//[0] == 1 +//2 - converts Object using toPrimitive +//2.1 - [0].valueOf() is not primitive +//2.2 - [0].toString is 0 +//0 == 1 +//outputs false + +//******************************* === +console.log('packt' === true); //false + +console.log('packt' === 'packt'); //true + +var person1 = {name:'John'}; +var person2 = {name:'John'}; +console.log(person1 === person2); //false, different objects \ No newline at end of file diff --git a/chapter01/06-ConditionalStatements.html b/chapter01/06-ConditionalStatements.html new file mode 100755 index 00000000..885a409b --- /dev/null +++ b/chapter01/06-ConditionalStatements.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter01/06-ConditionalStatements.js b/chapter01/06-ConditionalStatements.js new file mode 100755 index 00000000..c7256c80 --- /dev/null +++ b/chapter01/06-ConditionalStatements.js @@ -0,0 +1,51 @@ +/* Example 01 - if */ +var num = 1; +if (num === 1) { + console.log("num is equal to 1"); +} + +/* Example 02 - if-else */ +var num = 0; +if (num === 1) { + console.log("num is equal to 1"); +} else { + console.log("num is not equal to 1, the value of num is " + num); +} + +/* Example 03 - if-else-if-else... */ +var month = 5; +if (month === 1) { + console.log("January"); +} else if (month === 2){ + console.log("February"); +} else if (month === 3){ + console.log("March"); +} else { + console.log("Month is not January, February or March"); +} + +/* Example 04 - switch */ +var month = 5; +switch(month) { + case 1: + console.log("January"); + break; + case 2: + console.log("February"); + break; + case 3: + console.log("March"); + break; + default: + console.log("Month is not January, February or March"); +} + +/* Example 05 - ternary operator - if..else */ +if (num === 1){ + num--; +} else { + num++; +} + +//is the same as +(num === 1) ? num-- : num++; \ No newline at end of file diff --git a/chapter01/07-Loops.html b/chapter01/07-Loops.html new file mode 100755 index 00000000..e87a478f --- /dev/null +++ b/chapter01/07-Loops.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter01/07-Loops.js b/chapter01/07-Loops.js new file mode 100755 index 00000000..61cf20cb --- /dev/null +++ b/chapter01/07-Loops.js @@ -0,0 +1,23 @@ +console.log('**** for example ****'); + +/* for - example */ +for (var i=0; i<10; i++) { + console.log(i); +} + +console.log('**** while example ****'); +/* while - example */ +var i = 0; +while(i<10) +{ + console.log(i); + i++; +} + +console.log('**** do-while example ****'); +/* do-while - example */ +var i = 0; +do { + console.log(i); + i++; +} while (i<10) \ No newline at end of file diff --git a/chapter01/08-Functions.html b/chapter01/08-Functions.html new file mode 100755 index 00000000..cde89bcf --- /dev/null +++ b/chapter01/08-Functions.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter02/01-Introduction.html b/chapter02/01-Introduction.html new file mode 100755 index 00000000..86731b13 --- /dev/null +++ b/chapter02/01-Introduction.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter02/01-Introduction.js b/chapter02/01-Introduction.js new file mode 100755 index 00000000..93d80a8d --- /dev/null +++ b/chapter02/01-Introduction.js @@ -0,0 +1,12 @@ +var averageTempJan = 31.9; +var averageTempFeb = 35.3; +var averageTempMar = 42.4; +var averageTempApr = 52; +var averageTempMay = 60.8; + +var averageTemp = []; +averageTemp[0] = 31.9; +averageTemp[1] = 35.3; +averageTemp[2] = 42.4; +averageTemp[3] = 52; +averageTemp[4] = 60.8; diff --git a/chapter02/02-CreatingAndInitialingArrays.html b/chapter02/02-CreatingAndInitialingArrays.html new file mode 100755 index 00000000..7a51f1c9 --- /dev/null +++ b/chapter02/02-CreatingAndInitialingArrays.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter02/02-CreatingAndInitialingArrays.js b/chapter02/02-CreatingAndInitialingArrays.js new file mode 100755 index 00000000..1b20431e --- /dev/null +++ b/chapter02/02-CreatingAndInitialingArrays.js @@ -0,0 +1,34 @@ +var daysOfWeek = []; + +var daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; + +var daysOfWeek = new Array(); //{1} + +var daysOfWeek = new Array(7); //{2} + +console.log(daysOfWeek.length); + +var daysOfWeek = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); //{3} + +for (var i=0; i + + + + + + + + + \ No newline at end of file diff --git a/chapter02/03-AddingRemovingElements.js b/chapter02/03-AddingRemovingElements.js new file mode 100755 index 00000000..d19aa555 --- /dev/null +++ b/chapter02/03-AddingRemovingElements.js @@ -0,0 +1,73 @@ +function printArray(myArray) { + for (var i=0; i=0; i--){ + numbers[i] = numbers[i-1]; +} + +numbers[0] = -1; + +//printArray(numbers); + +//using method unshift +numbers.unshift(-2); + +//printArray(numbers); + +numbers.unshift(-4, -3); + +//printArray(numbers); + +//**** Removing elements + +numbers.pop(); + +//remove first position manually +/*for (var i=0; i + + + + + + + + + \ No newline at end of file diff --git a/chapter02/04-TwoDimensionalMultiDimensional.js b/chapter02/04-TwoDimensionalMultiDimensional.js new file mode 100755 index 00000000..7830e4d1 --- /dev/null +++ b/chapter02/04-TwoDimensionalMultiDimensional.js @@ -0,0 +1,62 @@ +var averageTempDay1 = [72,75,79,79,81,81]; +var averageTempDay2 = [81,79,75,75,73,72]; + +var averageTemp = []; + +//same as +averageTemp[0] = [72,75,79,79,81,81]; +averageTemp[1] = [81,79,75,75,73,72]; + +function printMatrix(myMatrix) { + for (var i=0; i + + + + + + + + + \ No newline at end of file diff --git a/chapter02/05-ArrayMethods.js b/chapter02/05-ArrayMethods.js new file mode 100755 index 00000000..7b59b8c0 --- /dev/null +++ b/chapter02/05-ArrayMethods.js @@ -0,0 +1,113 @@ +//*** contact +var zero = 0; +var positiveNumbers = [1,2,3]; +var negativeNumbers = [-3,-2,-1]; +var numbers = negativeNumbers.concat(zero, positiveNumbers); + +console.log(numbers); + +//console.log(numbers); + +//*** every and some +var isEven = function (x) { + // returns true if x is a multiple of 2. + console.log(x); + return (x % 2 == 0) ? true : false; +}; +var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; + +numbers.every(isEven); //is going to execute the function only once + +console.log('---'); + +numbers.some(isEven); //is going to execute the function twice + +numbers.forEach(function(x){ + console.log((x % 2 == 0)); +}); + +console.log(numbers.reverse()); + +//console.log('*** filter ***'); + +var evenNumbers = numbers.filter(isEven); + +//console.log(evenNumbers); + +console.log('*** map ***'); + +//console.log(numbers.map(isEven)); + +console.log(numbers.reduce(function(previous, current, index){ + return previous + current; +})); + +console.log(numbers.sort()); + +console.log(numbers.sort(function(a,b){ + return a-b; +})); + +function compare(a, b) { + if (a < b) { + return -1; + } + if (a > b) { + return 1; + } + // a must be equal to b + return 0; +} + +console.log(numbers.sort(compare)); + +//Sorting objects + +var friends = [ + {name: 'John', age: 30}, + {name: 'Ana', age: 20}, + {name: 'Chris', age: 25} +]; + +function comparePerson(a, b){ + if (a.age < b.age){ + return -1 + } + if (a.age > b.age){ + return 1 + } + return 0; +} + +console.log(friends.sort(comparePerson)); + +var names =['Ana', 'ana', 'john', 'John']; +console.log(names.sort()); + +console.log(names.sort(function(a, b){ + if (a.toLowerCase() < b.toLowerCase()){ + return -1 + } + if (a.toLowerCase() > b.toLowerCase()){ + return 1 + } + return 0; +})); + +var names2 = ['Maève', 'Maeve']; +console.log(names2.sort(function(a, b){ + return a.localeCompare(b); +})); + +//*** toString +console.log(numbers.toString()); + +console.log(numbers.indexOf(10)); +console.log(numbers.indexOf(100)); + +numbers.push(10); +console.log(numbers.lastIndexOf(10)); +console.log(numbers.lastIndexOf(100)); + +var numbersString = numbers.join('-'); +console.log(numbersString); \ No newline at end of file diff --git a/chapter03/01-Stack.html b/chapter03/01-Stack.html new file mode 100755 index 00000000..e936b4e1 --- /dev/null +++ b/chapter03/01-Stack.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter03/03-BalancedSymbols.html b/chapter03/03-BalancedSymbols.html new file mode 100755 index 00000000..d347fe2e --- /dev/null +++ b/chapter03/03-BalancedSymbols.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter03/04-DecimalToBinary.html b/chapter03/04-DecimalToBinary.html new file mode 100755 index 00000000..a178b773 --- /dev/null +++ b/chapter03/04-DecimalToBinary.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter03/04-DecimalToBinary.js b/chapter03/04-DecimalToBinary.js new file mode 100755 index 00000000..d4695b51 --- /dev/null +++ b/chapter03/04-DecimalToBinary.js @@ -0,0 +1,52 @@ +//233 == 11101001 +//2x(10x10) + 3x(10) + 3x(1) + +function divideBy2(decNumber){ + + var remStack = new Stack(), + rem, + binaryString = ''; + + while (decNumber > 0){ + rem = Math.floor(decNumber % 2); + remStack.push(rem); + decNumber = Math.floor(decNumber / 2); + } + + while (!remStack.isEmpty()){ + binaryString += remStack.pop().toString(); + } + + return binaryString; +} + +console.log(divideBy2(233)); +console.log(divideBy2(10)); +console.log(divideBy2(1000)); + +/* + The folow algorithm converts from base 10 to any base + */ +function baseConverter(decNumber, base){ + + var remStack = new Stack(), + rem, + baseString = '', + digits = '0123456789ABCDEF'; + + while (decNumber > 0){ + rem = Math.floor(decNumber % base); + remStack.push(rem); + decNumber = Math.floor(decNumber / base); + } + + while (!remStack.isEmpty()){ + baseString += digits[remStack.pop()]; + } + + return baseString; +} + +console.log(baseConverter(100345, 2)); +console.log(baseConverter(100345, 8)); +console.log(baseConverter(100345, 16)); \ No newline at end of file diff --git a/chapter03/05-TowerOfHanoi.html b/chapter03/05-TowerOfHanoi.html new file mode 100755 index 00000000..8e11f147 --- /dev/null +++ b/chapter03/05-TowerOfHanoi.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter04/01-Queue.html b/chapter04/01-Queue.html new file mode 100755 index 00000000..4220c419 --- /dev/null +++ b/chapter04/01-Queue.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter04/03-PriorityQueue.html b/chapter04/03-PriorityQueue.html new file mode 100755 index 00000000..924bf7c4 --- /dev/null +++ b/chapter04/03-PriorityQueue.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter04/04-HotPotato.html b/chapter04/04-HotPotato.html new file mode 100755 index 00000000..1efd71c5 --- /dev/null +++ b/chapter04/04-HotPotato.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter06/03-Operations.html b/chapter06/03-Operations.html new file mode 100755 index 00000000..ff01c7ae --- /dev/null +++ b/chapter06/03-Operations.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter07/02-UsingDictionaries.html b/chapter07/02-UsingDictionaries.html new file mode 100755 index 00000000..f0f8e0eb --- /dev/null +++ b/chapter07/02-UsingDictionaries.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter07/03-HashTable.js b/chapter07/03-HashTable.js new file mode 100755 index 00000000..c72783aa --- /dev/null +++ b/chapter07/03-HashTable.js @@ -0,0 +1,46 @@ +function HashTable() { + + var table = []; + + var loseloseHashCode = function (key) { + var hash = 0; + for (var i = 0; i < key.length; i++) { + hash += key.charCodeAt(i); + } + return hash % 37; + }; + + var djb2HashCode = function (key) { + var hash = 5381; + for (var i = 0; i < key.length; i++) { + hash = hash * 33 + key.charCodeAt(i); + } + return hash % 1013; + }; + + var hashCode = function (key) { + return loseloseHashCode(key); + }; + + this.put = function (key, value) { + var position = hashCode(key); + console.log(position + ' - ' + key); + table[position] = value; + }; + + this.get = function (key) { + return table[hashCode(key)]; + }; + + this.remove = function(key){ + table[hashCode(key)] = undefined; + }; + + this.print = function () { + for (var i = 0; i < table.length; ++i) { + if (table[i] !== undefined) { + console.log(i + ": " + table[i]); + } + } + }; +} \ No newline at end of file diff --git a/chapter07/04-UsingHash.html b/chapter07/04-UsingHash.html new file mode 100755 index 00000000..104be603 --- /dev/null +++ b/chapter07/04-UsingHash.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter07/04-UsingHash.js b/chapter07/04-UsingHash.js new file mode 100755 index 00000000..d0735eeb --- /dev/null +++ b/chapter07/04-UsingHash.js @@ -0,0 +1,29 @@ +var hash = new HashTable(); + +hash.put('Gandalf', 'gandalf@email.com'); +hash.put('John', 'johnsnow@email.com'); +hash.put('Tyrion', 'tyrion@email.com'); +hash.put('Aaron', 'aaron@email.com'); +hash.put('Donnie', 'donnie@email.com'); +hash.put('Ana', 'ana@email.com'); +hash.put('Jonathan', 'jonathan@email.com'); +hash.put('Jamie', 'jamie@email.com'); +hash.put('Sue', 'sue@email.com'); +hash.put('Mindy', 'mindy@email.com'); +hash.put('Paul', 'paul@email.com'); +hash.put('Nathan', 'nathan@email.com'); + +console.log('**** Printing Hash **** '); + +hash.print(); + +console.log('**** Get **** '); + +console.log(hash.get('Gandalf')); +console.log(hash.get('Loiane')); + +console.log('**** Remove **** '); + +hash.remove('Gandalf'); +console.log(hash.get('Gandalf')); +hash.print(); \ No newline at end of file diff --git a/chapter07/06-UsingHashCollisionSeparateChaining.js b/chapter07/06-UsingHashCollisionSeparateChaining.js new file mode 100755 index 00000000..2a0d3c37 --- /dev/null +++ b/chapter07/06-UsingHashCollisionSeparateChaining.js @@ -0,0 +1,40 @@ +var hashTableSeparateChaining = new HashTableSeparateChaining(); + +hashTableSeparateChaining.put('Gandalf', 'gandalf@email.com'); +hashTableSeparateChaining.put('John', 'johnsnow@email.com'); +hashTableSeparateChaining.put('Tyrion', 'tyrion@email.com'); +hashTableSeparateChaining.put('Aaron', 'aaron@email.com'); +hashTableSeparateChaining.put('Donnie', 'donnie@email.com'); +hashTableSeparateChaining.put('Ana', 'ana@email.com'); +hashTableSeparateChaining.put('Jonathan', 'jonathan@email.com'); +hashTableSeparateChaining.put('Jamie', 'jamie@email.com'); +hashTableSeparateChaining.put('Sue', 'sue@email.com'); +hashTableSeparateChaining.put('Mindy', 'mindy@email.com'); +hashTableSeparateChaining.put('Paul', 'paul@email.com'); +hashTableSeparateChaining.put('Nathan', 'nathan@email.com'); + +console.log('**** Printing Hash **** '); + +hashTableSeparateChaining.print(); + +console.log('**** Get **** '); + +console.log(hashTableSeparateChaining.get('Jamie')); +console.log(hashTableSeparateChaining.get('Sue')); +console.log(hashTableSeparateChaining.get('Jonathan')); +console.log(hashTableSeparateChaining.get('Loiane')); + +console.log('**** Remove **** '); + +console.log(hashTableSeparateChaining.remove('Gandalf')); +console.log(hashTableSeparateChaining.get('Gandalf')); +hashTableSeparateChaining.print(); + +console.log(hashTableSeparateChaining.remove('Sue')); +hashTableSeparateChaining.print(); + +console.log(hashTableSeparateChaining.remove('Jamie')); +hashTableSeparateChaining.print(); + +console.log(hashTableSeparateChaining.remove('Donnie')); +hashTableSeparateChaining.print(); \ No newline at end of file diff --git a/chapter07/08-UsingHashCollisionLinearProbing.html b/chapter07/08-UsingHashCollisionLinearProbing.html new file mode 100755 index 00000000..f5fd9ad5 --- /dev/null +++ b/chapter07/08-UsingHashCollisionLinearProbing.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter08/01-BinarySearchTree.js b/chapter08/01-BinarySearchTree.js new file mode 100755 index 00000000..ae813fce --- /dev/null +++ b/chapter08/01-BinarySearchTree.js @@ -0,0 +1,187 @@ +function BinarySearchTree() { + + var Node = function(key){ + this.key = key; + this.left = null; + this.right = null; + }; + + var root = null; + + this.insert = function(key){ + + var newNode = new Node(key); + + //special case - first element + if (root === null){ + root = newNode; + } else { + insertNode(root,newNode); + } + }; + + var insertNode = function(node, newNode){ + if (newNode.key < node.key){ + if (node.left === null){ + node.left = newNode; + } else { + insertNode(node.left, newNode); + } + } else { + if (node.right === null){ + node.right = newNode; + } else { + insertNode(node.right, newNode); + } + } + }; + + this.getRoot = function(){ + return root; + }; + + this.search = function(key){ + + return searchNode(root, key); + }; + + var searchNode = function(node, key){ + + if (node === null){ + return false; + } + + if (key < node.key){ + return searchNode(node.left, key); + + } else if (key > node.key){ + return searchNode(node.right, key); + + } else { //element is equal to node.item + return true; + } + }; + + this.inOrderTraverse = function(callback){ + inOrderTraverseNode(root, callback); + }; + + var inOrderTraverseNode = function (node, callback) { + if (node !== null) { + inOrderTraverseNode(node.left, callback); + callback(node.key); + inOrderTraverseNode(node.right, callback); + } + }; + + this.preOrderTraverse = function(callback){ + preOrderTraverseNode(root, callback); + }; + + var preOrderTraverseNode = function (node, callback) { + if (node !== null) { + callback(node.key); + preOrderTraverseNode(node.left, callback); + preOrderTraverseNode(node.right, callback); + } + }; + + this.postOrderTraverse = function(callback){ + postOrderTraverseNode(root, callback); + }; + + var postOrderTraverseNode = function (node, callback) { + if (node !== null) { + postOrderTraverseNode(node.left, callback); + postOrderTraverseNode(node.right, callback); + callback(node.key); + } + }; + + this.min = function() { + return minNode(root); + }; + + var minNode = function (node) { + if (node){ + while (node && node.left !== null) { + node = node.left; + } + + return node.key; + } + return null; + }; + + this.max = function() { + return maxNode(root); + }; + + var maxNode = function (node) { + if (node){ + while (node && node.right !== null) { + node = node.right; + } + + return node.key; + } + return null; + }; + + this.remove = function(element){ + root = removeNode(root, element); + }; + + var findMinNode = function(node){ + while (node && node.left !== null) { + node = node.left; + } + + return node; + }; + + var removeNode = function(node, element){ + + if (node === null){ + return null; + } + + if (element < node.key){ + node.left = removeNode(node.left, element); + return node; + + } else if (element > node.key){ + node.right = removeNode(node.right, element); + return node; + + } else { //element is equal to node.item + + //handle 3 special conditions + //1 - a leaf node + //2 - a node with only 1 child + //3 - a node with 2 children + + //case 1 + if (node.left === null && node.right === null){ + node = null; + return node; + } + + //case 2 + if (node.left === null){ + node = node.right; + return node; + + } else if (node.right === null){ + node = node.left; + return node; + } + + //case 3 + var aux = findMinNode(node.right); + node.key = aux.key; + node.right = removeNode(node.right, aux.key); + return node; + } + }; +} \ No newline at end of file diff --git a/chapter09/02-UsingGraphs.html b/chapter09/02-UsingGraphs.html new file mode 100755 index 00000000..75722d85 --- /dev/null +++ b/chapter09/02-UsingGraphs.html @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/chapter09/02-UsingGraphs.js b/chapter09/02-UsingGraphs.js new file mode 100755 index 00000000..3f143525 --- /dev/null +++ b/chapter09/02-UsingGraphs.js @@ -0,0 +1,97 @@ +var graph = new Graph(); + +var myVertices = ['A','B','C','D','E','F','G','H','I']; + +for (var i=0; i max){ + max = fTimes[myVertices[i]]; + maxName = myVertices[i]; + } + } + s += ' - ' + maxName; + delete fTimes[maxName]; +} +console.log(s); diff --git a/chapter10/02-UsingSortingAlgorithms.html b/chapter10/02-UsingSortingAlgorithms.html new file mode 100755 index 00000000..7a666fdb --- /dev/null +++ b/chapter10/02-UsingSortingAlgorithms.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter10/03-UsingSearchingAlgorithms.html b/chapter10/03-UsingSearchingAlgorithms.html new file mode 100755 index 00000000..a4e4b6a3 --- /dev/null +++ b/chapter10/03-UsingSearchingAlgorithms.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chapter10/03-UsingSearchingAlgorithms.js b/chapter10/03-UsingSearchingAlgorithms.js new file mode 100755 index 00000000..62201e80 --- /dev/null +++ b/chapter10/03-UsingSearchingAlgorithms.js @@ -0,0 +1,33 @@ +function createNonSortedArray(items){ + var array = new ArrayList(); + + for (var i = items; i> 0; i--){ + array.insert(i); + } + + return array; +} + +var array = createNonSortedArray(5); + +console.log('********** Sequential Sort #3 **********'); + +console.log(array.sequentialSearch(3)); + +console.log('********** Min **********'); + +console.log(array.findMinValue()); + +console.log('********** Max **********'); + +console.log(array.findMaxValue()); + +console.log('********** Binary Search #3 **********'); + +console.log(array.binarySearch(3)); + +console.log('********** Binary Search #2 **********'); + +var array = createNonSortedArray(8); + +console.log(array.binarySearch(2)); \ No newline at end of file diff --git a/chapter11/01-Recursion.html b/chapter11/01-Recursion.html new file mode 100755 index 00000000..5961583b --- /dev/null +++ b/chapter11/01-Recursion.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter11/01-Recursion.js b/chapter11/01-Recursion.js new file mode 100755 index 00000000..bd16253d --- /dev/null +++ b/chapter11/01-Recursion.js @@ -0,0 +1,25 @@ +//Recursive solution - DP +function fibonacci(num){ + if (num === 1 || num === 2){ + return 1; + } + if (num > 2){ + return fibonacci(num - 1) + fibonacci(num - 2); + } +} + +//Non Recursive solution +function fib(num){ + var n1 = 1, + n2 = 1, + n = 1; + for (var i = 3; i<=num; i++){ + n = n1 + n2; + n1 = n2; + n2 = n; + } + return n; +} + +console.log(fibonacci(6)); +console.log(fib(6)); \ No newline at end of file diff --git a/chapter11/02-InfiniteRecursion.html b/chapter11/02-InfiniteRecursion.html new file mode 100755 index 00000000..e51a8132 --- /dev/null +++ b/chapter11/02-InfiniteRecursion.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter11/02-InfiniteRecursion.js b/chapter11/02-InfiniteRecursion.js new file mode 100755 index 00000000..2ca26d33 --- /dev/null +++ b/chapter11/02-InfiniteRecursion.js @@ -0,0 +1,15 @@ +var i = 0; + +function recursiveFn () { + i++; + recursiveFn(); +} + +try { + recursiveFn(); +} catch (ex) { + alert('i = ' + i + ' error: ' + ex); +} + +//chrome 37 = 20955 RangeError: Maximum call stack size exceeded +//ff 27 = 343429 InternalError: too much recursion \ No newline at end of file diff --git a/chapter11/03-MinCoinChangeDP.html b/chapter11/03-MinCoinChangeDP.html new file mode 100755 index 00000000..c4171470 --- /dev/null +++ b/chapter11/03-MinCoinChangeDP.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/chapter11/04-MinCoinChangeGreedy.html b/chapter11/04-MinCoinChangeGreedy.html new file mode 100755 index 00000000..cc01ddc2 --- /dev/null +++ b/chapter11/04-MinCoinChangeGreedy.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file From 9c22abb1ce7b0b4f88c8b9b2d4081b2ee3daf291 Mon Sep 17 00:00:00 2001 From: loiane Date: Mon, 23 Oct 2017 13:09:32 -0200 Subject: [PATCH 032/188] added bithound --- .bithoundrc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .bithoundrc diff --git a/.bithoundrc b/.bithoundrc new file mode 100644 index 00000000..801d7ae7 --- /dev/null +++ b/.bithoundrc @@ -0,0 +1,19 @@ +{ + "ignore": [ + "**/.vscode/**", + "**/node_modules/**", + "**/dist/**" + "**/examples/**" + ], + "test": [ + "**/test/**" + ], + "critics": { + "lint": { + "engine": "eslint" + }, + "wc": { + "limit": 1000 + } + } +} From 01a6b0813c8ff77c262aaf110e1333a41bfc075e Mon Sep 17 00:00:00 2001 From: loiane Date: Mon, 23 Oct 2017 13:09:46 -0200 Subject: [PATCH 033/188] added changelog file --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..ade741a9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Change Log +All notable changes to the "javascript-datastructures-algorithms" third edition source code bundle will be documented in this file. + +Based on [Keep a Changelog](http://keepachangelog.com/). + +## [Unreleased] +- Initial release diff --git a/package.json b/package.json index d521cf35..059a1dc4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-datastructures-algorithms", - "version": "1.0.0", + "version": "0.0.1", "description": "Learning JavaScript Data Structures and Algorithms", "repository": { "type": "git", From 6ade16e8f18c31ca6874d5aeac6104950802cff9 Mon Sep 17 00:00:00 2001 From: loiane Date: Mon, 23 Oct 2017 13:21:05 -0200 Subject: [PATCH 034/188] fixed bithoundrc --- .bithoundrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bithoundrc b/.bithoundrc index 801d7ae7..46722b1d 100644 --- a/.bithoundrc +++ b/.bithoundrc @@ -2,7 +2,7 @@ "ignore": [ "**/.vscode/**", "**/node_modules/**", - "**/dist/**" + "**/dist/**", "**/examples/**" ], "test": [ From 188bbc2cdbbea7db2d9d240e81ddba9335bf9d0e Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 28 Oct 2017 10:40:02 -0200 Subject: [PATCH 035/188] added dev script without coverage table --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 059a1dc4..ef6d2cd1 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,10 @@ "test:js": "mocha --compilers js:babel-core/register ./test/js/**/*.spec.js --reporter mochawesome", "test:ts": "mocha -r ts-node/register --recursive ./test/ts/**/*.spec.ts", "test": "npm run test:js && npm run test:ts", - "dev": "npm run clean && npm run lint && npm run webpack && npm run generate-report", + "dev": "npm run clean && npm run lint && npm run webpack && npm run generate-report2", "coverage": "npm run generate-report && nyc report --reporter=text-lcov > coverage.lcov && codecov", "generate-report": "nyc --report-dir coverage npm run test && nyc report --reporter=text", + "generate-report2": "nyc --report-dir coverage npm run test", "go": "npm run clean && npm run lint && npm run build && npm run test", "webpack": "webpack --env build" }, From 5ec12875ae64d6364f23630c68d9c429a58e43e9 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 29 Oct 2017 12:43:15 -0200 Subject: [PATCH 036/188] chapter 07: [Dictionaries and Hashes] --- .eslintrc.json | 3 +- README.md | 21 + examples/PacktDataStructuresAlgorithms.min.js | 2 +- examples/chapter07/01-Dictionaries.html | 11 + examples/chapter07/01-Dictionaries.js | 22 + examples/chapter07/02-HashTable.html | 11 + examples/chapter07/02-HashTable.js | 34 ++ .../03-HashCollisionSeparateChaining.html | 11 + .../03-HashCollisionSeparateChaining.js | 47 +++ .../04-HashCollisionLinearProbing.html | 11 + .../04-HashCollisionLinearProbing.js | 44 ++ examples/chapter07/05-ES2015Map.html | 10 + examples/chapter07/05-ES2015Map.js | 17 + examples/chapter07/06-ES2015WeakMap.html | 10 + examples/chapter07/06-ES2015WeakMap.js | 18 + examples/chapter07/07-ES2015WeakSet.html | 10 + examples/chapter07/07-ES2015WeakSet.js | 16 + examples/index.html | 15 +- package.json | 11 +- src/js/data-structures/dictionary.js | 69 ++++ .../hash-table-linear-probing-lazy.js | 122 ++++++ .../hash-table-linear-probing.js | 113 +++++ .../hash-table-separate-chaining.js | 96 +++++ src/js/data-structures/hash-table.js | 77 ++++ .../data-structures/models/value-pair-lazy.js | 10 + src/js/data-structures/models/value-pair.js | 9 + src/js/index.js | 12 + src/js/util.js | 11 + src/ts/data-structures/dictionary.ts | 86 ++++ .../hash-table-linear-probing-lazy.ts | 136 ++++++ .../hash-table-linear-probing.ts | 128 ++++++ .../hash-table-separate-chaining.ts | 106 +++++ src/ts/data-structures/hash-table.ts | 87 ++++ .../data-structures/models/value-pair-lazy.ts | 7 + src/ts/data-structures/models/value-pair.ts | 7 + src/ts/index.ts | 5 + src/ts/util.ts | 11 + test/js/data-structures/dictionary.spec.js | 266 ++++++++++++ .../hash-table-linear-probing-lazy.spec.js | 300 ++++++++++++++ .../hash-table-linear-probing.spec.js | 300 ++++++++++++++ .../hash-table-separate-chaining.spec.js | 269 ++++++++++++ test/js/data-structures/hash-table.spec.js | 161 ++++++++ test/ts/data-structures/dictionary.spec.ts | 335 +++++++++++++++ .../hash-table-linear-probing-lazy.spec.ts | 388 ++++++++++++++++++ .../hash-table-linear-probing.spec.ts | 388 ++++++++++++++++++ .../hash-table-separate-chaining.spec.ts | 343 ++++++++++++++++ test/ts/data-structures/hash-table.spec.ts | 211 ++++++++++ tsconfig.json | 1 + 48 files changed, 4370 insertions(+), 8 deletions(-) create mode 100755 examples/chapter07/01-Dictionaries.html create mode 100755 examples/chapter07/01-Dictionaries.js create mode 100755 examples/chapter07/02-HashTable.html create mode 100755 examples/chapter07/02-HashTable.js create mode 100755 examples/chapter07/03-HashCollisionSeparateChaining.html create mode 100755 examples/chapter07/03-HashCollisionSeparateChaining.js create mode 100755 examples/chapter07/04-HashCollisionLinearProbing.html create mode 100755 examples/chapter07/04-HashCollisionLinearProbing.js create mode 100755 examples/chapter07/05-ES2015Map.html create mode 100755 examples/chapter07/05-ES2015Map.js create mode 100755 examples/chapter07/06-ES2015WeakMap.html create mode 100755 examples/chapter07/06-ES2015WeakMap.js create mode 100755 examples/chapter07/07-ES2015WeakSet.html create mode 100755 examples/chapter07/07-ES2015WeakSet.js create mode 100644 src/js/data-structures/dictionary.js create mode 100644 src/js/data-structures/hash-table-linear-probing-lazy.js create mode 100644 src/js/data-structures/hash-table-linear-probing.js create mode 100644 src/js/data-structures/hash-table-separate-chaining.js create mode 100644 src/js/data-structures/hash-table.js create mode 100644 src/js/data-structures/models/value-pair-lazy.js create mode 100644 src/js/data-structures/models/value-pair.js create mode 100644 src/ts/data-structures/dictionary.ts create mode 100644 src/ts/data-structures/hash-table-linear-probing-lazy.ts create mode 100644 src/ts/data-structures/hash-table-linear-probing.ts create mode 100644 src/ts/data-structures/hash-table-separate-chaining.ts create mode 100644 src/ts/data-structures/hash-table.ts create mode 100644 src/ts/data-structures/models/value-pair-lazy.ts create mode 100644 src/ts/data-structures/models/value-pair.ts create mode 100644 test/js/data-structures/dictionary.spec.js create mode 100644 test/js/data-structures/hash-table-linear-probing-lazy.spec.js create mode 100644 test/js/data-structures/hash-table-linear-probing.spec.js create mode 100644 test/js/data-structures/hash-table-separate-chaining.spec.js create mode 100644 test/js/data-structures/hash-table.spec.js create mode 100644 test/ts/data-structures/dictionary.spec.ts create mode 100644 test/ts/data-structures/hash-table-linear-probing-lazy.spec.ts create mode 100644 test/ts/data-structures/hash-table-linear-probing.spec.ts create mode 100644 test/ts/data-structures/hash-table-separate-chaining.spec.ts create mode 100644 test/ts/data-structures/hash-table.spec.ts diff --git a/.eslintrc.json b/.eslintrc.json index 8c4a28cc..ef7aee0d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -24,6 +24,7 @@ "no-console": 0, "import/prefer-default-export": 0, "comma-dangle": 0, - "no-underscore-dangle": 0 + "no-underscore-dangle": 0, + "no-param-reassign": 0 } } diff --git a/README.md b/README.md index 59d96a55..fe72f7e4 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ Work in Progress. * 04: [Queues and Deques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter04) * 05: [LinkedLists](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter05) * 06: [Sets](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter06) +* 07: [Dictionaries and Hashes](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter07) ### Third Edition Updates @@ -27,6 +28,26 @@ Work in Progress. * Algorithms tested with Mocha + Chai (test code available in `test` directory) * **TypeScript** version of the source code included (library and tests) +## Project Structure + +`src/js/index.js` file contains all the data structures and algorithms listed by chapter. + +``` +|_examples (how to use each data structure and algorithm, organized by chapter) +|_src +|___js (source code: JavaScript version) +|_____data-structures +|_______models (classes used by DS: Node, ValuePair, ...) +|_____others (other algorithms such as palindome checker, hanoi tower) +|___ts (source code: TypeScript version) +|_____data-structures +|_______models +|_____others +|_test (unit tests with Mocha and Chai for src) +|___js (tests for JavaScript code) +|___ts (tests for TypeScript code) +``` + ## Installing and running the book examples With Node * Install [Node](https://nodejs.org) diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index ef6fa6ec..6b18a066 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=7)}([function(e,t,n){var i,r,o;!function(n,u){r=[t],i=u,void 0!==(o="function"==typeof i?i.apply(t,r):i)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new i.Node(e);if(0===t){var r=this.head;n.next=r,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var i=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.tail=void 0,i}return s(t,e),f(t,[{key:"push",value:function(e){var t=new r.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.DoublyNode(e),i=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var o=this.getElementAt(t-1);i=o.next,n.next=i,o.next=n,i.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return a;if(1===e){r.push(t.pop());var f={};f[o]=t.toString(),f[u]=i.toString(),f[s]=r.toString(),a.push(f)}else{n(e-1,t,r,i,o,s,u,a),r.push(t.pop());var l={};l[o]=t.toString(),l[u]=i.toString(),l[s]=r.toString(),a.push(l),n(e-1,i,t,r,u,o,s,a)}return a}function i(e){for(var t=new o.default,i=new o.default,r=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,r,i,"source","helper","dest")}function r(e,t,n,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,i]):(r(e-1,t,i,n,o),o.push([t,i]),r(e-1,n,t,i,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=i,e.hanoi=r;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,o;!function(u,s){r=[t,n(1)],i=s,void 0!==(o="function"==typeof i?i.apply(t,r):i)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function i(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=i;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,o;!function(u,s){r=[t,n(1)],i=s,void 0!==(o="function"==typeof i?i.apply(t,r):i)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n="([{",r=")]}",o=!0,u=0,s=void 0,a=void 0;u=0?t.push(s):t.isEmpty()?o=!1:(a=t.pop(),n.indexOf(a)!==r.indexOf(s)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,o;!function(u,s){r=[t,n(5)],i=s,void 0!==(o="function"==typeof i?i.apply(t,r):i)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){if(void 0===e||null===e||null!==e&&0===e.length)return!1;for(var t=new i.default,n=e.toLocaleLowerCase().split(" ").join(""),r=!0,o=void 0,u=void 0,s=0;s1&&r;)o=t.removeFront(),u=t.removeBack(),o!==u&&(r=!1);return r}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,o;!function(u,s){r=[e,t,n(0),n(2),n(3)],i=s,void 0!==(o="function"==typeof i?i.apply(t,r):i)&&(e.exports=o)}(0,function(e,t,n,i,r){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(e){return e&&e.__esModule?e:{default:e}}(i),f=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return s(t,e),f(t,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.Node(e),i=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getElementAt(this.size()),this.head=n,i.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;r(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=i,u}return u(t,e),a(t,[{key:"push",value:function(e){if(this.isEmpty())f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var i=this.getIndexNextSortedElement(e);return f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,i)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,i=0;i0&&(o=r,u=i),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n1;){for(var u=0;u0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return u(e,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new i.Node(e);if(0===t){var r=this.head;n.next=r,this.head=n}else{var u=this.getElementAt(t-1);n.next=u.next,u.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;u(this,t);var i=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.tail=void 0,i}return a(t,e),s(t,[{key:"push",value:function(e){var t=new r.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.DoublyNode(e),i=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var u=this.getElementAt(t-1);i=u.next,n.next=i,u.next=n,i.prev=n,n.prev=u}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return l;if(1===e){r.push(t.pop());var s={};s[u]=t.toString(),s[o]=i.toString(),s[a]=r.toString(),l.push(s)}else{n(e-1,t,r,i,u,a,o,l),r.push(t.pop());var f={};f[u]=t.toString(),f[o]=i.toString(),f[a]=r.toString(),l.push(f),n(e-1,i,t,r,o,u,a,l)}return l}function i(e){for(var t=new u.default,i=new u.default,r=new u.default,o=e;o>0;o--)t.push(o);return n(e,t,r,i,"source","helper","dest")}function r(e,t,n,i){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?u:(1===e?u.push([t,i]):(r(e-1,t,i,n,u),u.push([t,i]),r(e-1,n,t,i,u)),u)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=i,e.hanoi=r;var u=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(3)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n=e,i=void 0,u="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)u+=t.pop().toString();return u}function i(e,t){var n=new r.default,i=e,u=void 0,o="";if(!(t>=2&&t<=36))return"";for(;i>0;)u=Math.floor(i%t),n.push(u),i=Math.floor(i/t);for(;!n.isEmpty();)o+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return o}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=i;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(3)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n="([{",r=")]}",u=!0,o=0,a=void 0,l=void 0;o=0?t.push(a):t.isEmpty()?u=!1:(l=t.pop(),n.indexOf(l)!==r.indexOf(a)&&(u=!1)),o++;return!(!u||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(5)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e,t){for(var n=new i.default,r=[],u=0;u1;){for(var o=0;o1&&r;)u=t.removeFront(),o=t.removeBack(),u!==o&&(r=!1);return r}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(1),n(4)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i,r){"use strict";function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(i),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return u(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.Node(e),i=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getElementAt(this.size()),this.head=n,i.next=this.head);else{var u=this.getElementAt(t-1);n.next=u.next,u.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;r(this,t);var o=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return o.equalsFn=e,o.compareFn=i,o}return o(t,e),l(t,[{key:"push",value:function(e){if(this.isEmpty())s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var i=this.getIndexNextSortedElement(e);return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,i)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,i=0;i0&&(u=r,o=i),o.forEach(function(e){u.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new i.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(1),n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i,r){"use strict";function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){return e&&e.__esModule?e:{default:e}}(i),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;u(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(24)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,r){var u=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var o=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,r));return o.key=e,o.value=r,o.isDeleted=u,o}return r(t,e),t}(t.ValuePair)})}])}); \ No newline at end of file diff --git a/examples/chapter07/01-Dictionaries.html b/examples/chapter07/01-Dictionaries.html new file mode 100755 index 00000000..d972458c --- /dev/null +++ b/examples/chapter07/01-Dictionaries.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter07/01-Dictionaries.js b/examples/chapter07/01-Dictionaries.js new file mode 100755 index 00000000..035ba916 --- /dev/null +++ b/examples/chapter07/01-Dictionaries.js @@ -0,0 +1,22 @@ +const { Dictionary } = PacktDataStructuresAlgorithms; + +const dictionary = new Dictionary(); + +dictionary.set('Gandalf', 'gandalf@email.com'); +dictionary.set('John', 'johnsnow@email.com'); +dictionary.set('Tyrion', 'tyrion@email.com'); + +console.log(dictionary.hasKey('Gandalf')); // true +console.log(dictionary.size()); // 3 + +console.log(dictionary.keys()); // ["Gandalf", "John", "Tyrion"] +console.log(dictionary.values()); // ["gandalf@email.com", "johnsnow@email.com", "tyrion@email.com"] +console.log(dictionary.get('Tyrion')); // tyrion@email.com + +dictionary.remove('John'); + +console.log(dictionary.keys()); // ["Gandalf", "Tyrion"] +console.log(dictionary.values()); // ["gandalf@email.com", "tyrion@email.com"] + +console.log(dictionary.keyValues()); // [{key: "Gandalf", value: "gandalf@email.com"}, {key: "Tyrion", value: "tyrion@email.com"}] +console.log(dictionary.toString()); // [#Gandalf: gandalf@email.com],[#Tyrion: tyrion@email.com] diff --git a/examples/chapter07/02-HashTable.html b/examples/chapter07/02-HashTable.html new file mode 100755 index 00000000..67ad128c --- /dev/null +++ b/examples/chapter07/02-HashTable.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter07/02-HashTable.js b/examples/chapter07/02-HashTable.js new file mode 100755 index 00000000..de7e035e --- /dev/null +++ b/examples/chapter07/02-HashTable.js @@ -0,0 +1,34 @@ +const { HashTable } = PacktDataStructuresAlgorithms; + +const hash = new HashTable(); + +hash.put('Gandalf', 'gandalf@email.com'); +hash.put('John', 'johnsnow@email.com'); +hash.put('Tyrion', 'tyrion@email.com'); +hash.put('Aaron', 'aaron@email.com'); +hash.put('Donnie', 'donnie@email.com'); +hash.put('Ana', 'ana@email.com'); +hash.put('Jonathan', 'jonathan@email.com'); +hash.put('Jamie', 'jamie@email.com'); +hash.put('Sue', 'sue@email.com'); +hash.put('Mindy', 'mindy@email.com'); +hash.put('Paul', 'paul@email.com'); +hash.put('Nathan', 'nathan@email.com'); + +console.log('**** Printing Hash **** '); + +console.log(hash.toString()); +// {5 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Ana: ana@email.com]},{16 => [#Aaron: aaron@email.com]},{19 => [#Gandalf: gandalf@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Paul: paul@email.com]} + +console.log('**** Get **** '); + +console.log(hash.get('Gandalf')); // gandalf@email.com +console.log(hash.get('Loiane')); // undefined + +console.log('**** Remove **** '); + +hash.remove('Gandalf'); +console.log(hash.get('Gandalf')); // undefined + +console.log(hash.toString()); +// {5 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Ana: ana@email.com]},{16 => [#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Paul: paul@email.com]} diff --git a/examples/chapter07/03-HashCollisionSeparateChaining.html b/examples/chapter07/03-HashCollisionSeparateChaining.html new file mode 100755 index 00000000..cddcc3db --- /dev/null +++ b/examples/chapter07/03-HashCollisionSeparateChaining.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter07/03-HashCollisionSeparateChaining.js b/examples/chapter07/03-HashCollisionSeparateChaining.js new file mode 100755 index 00000000..e6060cec --- /dev/null +++ b/examples/chapter07/03-HashCollisionSeparateChaining.js @@ -0,0 +1,47 @@ +const { HashTableSeparateChaining } = PacktDataStructuresAlgorithms; + +const hashTable = new HashTableSeparateChaining(); + +hashTable.put('Gandalf', 'gandalf@email.com'); +hashTable.put('John', 'johnsnow@email.com'); +hashTable.put('Tyrion', 'tyrion@email.com'); +hashTable.put('Aaron', 'aaron@email.com'); +hashTable.put('Donnie', 'donnie@email.com'); +hashTable.put('Ana', 'ana@email.com'); +hashTable.put('Jonathan', 'jonathan@email.com'); +hashTable.put('Jamie', 'jamie@email.com'); +hashTable.put('Sue', 'sue@email.com'); +hashTable.put('Mindy', 'mindy@email.com'); +hashTable.put('Paul', 'paul@email.com'); +hashTable.put('Nathan', 'nathan@email.com'); + +console.log('**** Printing Hash **** '); + +console.log(hashTable.toString()); +// {5 => [#Jonathan: jonathan@email.com],[#Jamie: jamie@email.com],[#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com],[#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com],[#Aaron: aaron@email.com]},{19 => [#Gandalf: gandalf@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com],[#Paul: paul@email.com]} + +console.log('**** Get **** '); + +console.log(hashTable.get('Jamie')); // jamie@email.com +console.log(hashTable.get('Sue')); // sue@email.com +console.log(hashTable.get('Jonathan')); // jonathan@email.com +console.log(hashTable.get('Loiane')); // undefined + +console.log('**** Remove **** '); + +console.log(hashTable.remove('Gandalf')); // true +console.log(hashTable.get('Gandalf')); // undefined +console.log(hashTable.toString()); +// {5 => [#Jonathan: jonathan@email.com],[#Jamie: jamie@email.com],[#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com],[#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com],[#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com],[#Paul: paul@email.com]} + +console.log(hashTable.remove('Sue')); // true +console.log(hashTable.toString()); +// {5 => [#Jonathan: jonathan@email.com],[#Jamie: jamie@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com],[#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com],[#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com],[#Paul: paul@email.com]} + +console.log(hashTable.remove('Jamie')); // true +console.log(hashTable.toString()); +// {5 => [#Jonathan: jonathan@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com],[#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com],[#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com],[#Paul: paul@email.com]} + +console.log(hashTable.remove('Donnie')); // true +console.log(hashTable.toString()); +// {5 => [#Jonathan: jonathan@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com],[#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com],[#Paul: paul@email.com]} diff --git a/examples/chapter07/04-HashCollisionLinearProbing.html b/examples/chapter07/04-HashCollisionLinearProbing.html new file mode 100755 index 00000000..6f8bbe52 --- /dev/null +++ b/examples/chapter07/04-HashCollisionLinearProbing.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter07/04-HashCollisionLinearProbing.js b/examples/chapter07/04-HashCollisionLinearProbing.js new file mode 100755 index 00000000..e633bbef --- /dev/null +++ b/examples/chapter07/04-HashCollisionLinearProbing.js @@ -0,0 +1,44 @@ +const { HashTableLinearProbing } = PacktDataStructuresAlgorithms; + +const hashTable = new HashTableLinearProbing(); + +hashTable.put('Gandalf', 'gandalf@email.com'); +hashTable.put('John', 'johnsnow@email.com'); +hashTable.put('Tyrion', 'tyrion@email.com'); +hashTable.put('Aaron', 'aaron@email.com'); +hashTable.put('Donnie', 'donnie@email.com'); +hashTable.put('Ana', 'ana@email.com'); +hashTable.put('Jonathan', 'jonathan@email.com'); +hashTable.put('Jamie', 'jamie@email.com'); +hashTable.put('Sue', 'sue@email.com'); +hashTable.put('Mindy', 'mindy@email.com'); +hashTable.put('Paul', 'paul@email.com'); +hashTable.put('Nathan', 'nathan@email.com'); + +console.log('**** Printing Hash **** '); + +console.log(hashTable.toString()); +// {5 => [#Jonathan: jonathan@email.com]},{6 => [#Jamie: jamie@email.com]},{7 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com]},{14 => [#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com]},{17 => [#Aaron: aaron@email.com]},{19 => [#Gandalf: gandalf@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com]},{33 => [#Paul: paul@email.com]} + +console.log('**** Get **** '); + +console.log(hashTable.get('Nathan')); // nathan@email.com +console.log(hashTable.get('Loiane')); // undefined + +console.log('**** Remove **** '); + +hashTable.remove('Gandalf'); +console.log(hashTable.get('Gandalf')); // undefined +console.log(hashTable.toString()); +// {5 => [#Jonathan: jonathan@email.com]},{6 => [#Jamie: jamie@email.com]},{7 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com]},{14 => [#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com]},{17 => [#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com]},{33 => [#Paul: paul@email.com]} + +console.log('**** Remove Test 2 **** '); +console.log('Removing Jonathan', hashTable.remove('Jonathan')); // true +console.log('**** Print **** '); +console.log(hashTable.toString()); +// {5 => [#Jamie: jamie@email.com]},{6 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com]},{14 => [#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com]},{17 => [#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com]},{33 => [#Paul: paul@email.com]} + +console.log(hashTable.get('Jamie')); // jamie@email.com +console.log('**** Print **** '); +console.log(hashTable.toString()); +// {5 => [#Jamie: jamie@email.com]},{6 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com]},{14 => [#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com]},{17 => [#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com]},{33 => [#Paul: paul@email.com]} diff --git a/examples/chapter07/05-ES2015Map.html b/examples/chapter07/05-ES2015Map.html new file mode 100755 index 00000000..8a2ade05 --- /dev/null +++ b/examples/chapter07/05-ES2015Map.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/chapter07/05-ES2015Map.js b/examples/chapter07/05-ES2015Map.js new file mode 100755 index 00000000..e944f988 --- /dev/null +++ b/examples/chapter07/05-ES2015Map.js @@ -0,0 +1,17 @@ +const map = new Map(); + +map.set('Gandalf', 'gandalf@email.com'); +map.set('John', 'johnsnow@email.com'); +map.set('Tyrion', 'tyrion@email.com'); + +console.log(map.has('Gandalf')); // true +console.log(map.size); // 3 + +console.log(map.keys()); // MapIterator {"Gandalf", "John", "Tyrion"} +console.log(map.values()); // MapIterator {"gandalf@email.com", "johnsnow@email.com", "tyrion@email.com"} +console.log(map.get('Tyrion')); // tyrion@email.com + +map.delete('John'); + +console.log(map.keys()); // MapIterator {"Gandalf", "Tyrion"} +console.log(map.values()); // MapIterator {"gandalf@email.com", "tyrion@email.com"} diff --git a/examples/chapter07/06-ES2015WeakMap.html b/examples/chapter07/06-ES2015WeakMap.html new file mode 100755 index 00000000..15daf46d --- /dev/null +++ b/examples/chapter07/06-ES2015WeakMap.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/chapter07/06-ES2015WeakMap.js b/examples/chapter07/06-ES2015WeakMap.js new file mode 100755 index 00000000..1f2d01bc --- /dev/null +++ b/examples/chapter07/06-ES2015WeakMap.js @@ -0,0 +1,18 @@ +const map = new WeakMap(); + +const ob1 = { name: 'Gandalf' }; +const ob2 = { name: 'John' }; +const ob3 = { name: 'Tyrion' }; + +map.set(ob1, 'gandalf@email.com'); +map.set(ob2, 'johnsnow@email.com'); +map.set(ob3, 'tyrion@email.com'); + +console.log(map.has(ob1)); // true +console.log(map.has(ob2)); // true +console.log(map.has(ob3)); // true + +console.log(map.get(ob3)); // tyrion@email.com + +map.delete(ob2); +console.log(map.has(ob2)); // false diff --git a/examples/chapter07/07-ES2015WeakSet.html b/examples/chapter07/07-ES2015WeakSet.html new file mode 100755 index 00000000..7a4f82f4 --- /dev/null +++ b/examples/chapter07/07-ES2015WeakSet.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/chapter07/07-ES2015WeakSet.js b/examples/chapter07/07-ES2015WeakSet.js new file mode 100755 index 00000000..0e849f1a --- /dev/null +++ b/examples/chapter07/07-ES2015WeakSet.js @@ -0,0 +1,16 @@ +var set = new WeakSet(); + +const ob1 = { name: 'Gandalf' }; +const ob2 = { name: 'John' }; +const ob3 = { name: 'Tyrion' }; + +set.add(ob1); +set.add(ob2); +set.add(ob3); + +console.log(set.has(ob1)); // true +console.log(set.has(ob2)); // true +console.log(set.has(ob3)); // true + +set.delete(ob2); +console.log(set.has(ob2)); // false diff --git a/examples/index.html b/examples/index.html index d2eaa698..d35c6ab7 100644 --- a/examples/index.html +++ b/examples/index.html @@ -44,6 +44,7 @@ 04 05 06 + 07
@@ -156,7 +157,19 @@
diff --git a/package.json b/package.json index ef6d2cd1..a36c0076 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "test:js": "mocha --compilers js:babel-core/register ./test/js/**/*.spec.js --reporter mochawesome", "test:ts": "mocha -r ts-node/register --recursive ./test/ts/**/*.spec.ts", "test": "npm run test:js && npm run test:ts", - "dev": "npm run clean && npm run lint && npm run webpack && npm run generate-report2", + "dev": "npm run clean && npm run lint && npm run webpack && npm run generate-report", + "dev2": "npm run clean && npm run lint && npm run webpack && npm run generate-report2", "coverage": "npm run generate-report && nyc report --reporter=text-lcov > coverage.lcov && codecov", "generate-report": "nyc --report-dir coverage npm run test && nyc report --reporter=text", "generate-report2": "nyc --report-dir coverage npm run test", @@ -53,7 +54,7 @@ }, "devDependencies": { "@types/chai": "^4.0.4", - "@types/mocha": "^2.2.43", + "@types/mocha": "^2.2.44", "babel-cli": "^6.26.0", "babel-core": "^6.26.0", "babel-eslint": "^8.0.1", @@ -62,8 +63,8 @@ "babel-plugin-transform-es2015-modules-umd": "^6.24.1", "babel-preset-env": "^1.6.1", "chai": "^4.1.2", - "codecov": "^2.3.1", - "eslint": "^4.9.0", + "codecov": "^3.0.0", + "eslint": "^4.10.0", "eslint-config-airbnb-base": "^12.1.0", "eslint-plugin-import": "^2.8.0", "istanbul": "^v1.1.0-alpha.1", @@ -74,6 +75,6 @@ "tslint": "^5.8.0", "typescript": "^2.5.3", "webpack": "^3.8.1", - "yargs": "^9.0.1" + "yargs": "^10.0.3" } } diff --git a/src/js/data-structures/dictionary.js b/src/js/data-structures/dictionary.js new file mode 100644 index 00000000..4ec6212a --- /dev/null +++ b/src/js/data-structures/dictionary.js @@ -0,0 +1,69 @@ +import { defaultToString } from '../util'; +import { ValuePair } from './models/value-pair'; + +export default class Dictionary { + constructor(toStrFn = defaultToString) { + this.toStrFn = toStrFn; + this.table = {}; + } + set(key, value) { + if (key != null && value != null) { + const tableKey = this.toStrFn(key); + this.table[tableKey] = new ValuePair(key, value); + return true; + } + return false; + } + get(key) { + const valuePair = this.table[this.toStrFn(key)]; + return valuePair == null ? undefined : valuePair.value; + } + hasKey(key) { + return this.table[this.toStrFn(key)] != null; + } + remove(key) { + if (this.hasKey(key)) { + delete this.table[this.toStrFn(key)]; + return true; + } + return false; + } + values() { + return this.keyValues().map(valuePair => valuePair.value); + } + keys() { + return this.keyValues().map(valuePair => valuePair.key); + } + keyValues() { + return Object.values(this.table); + } + forEach(callbackFn) { + const valuePairs = this.keyValues(); + for (let i = 0; i < valuePairs.length; i++) { + const result = callbackFn(valuePairs[i].key, valuePairs[i].value); + if (result === false) { + break; + } + } + } + isEmpty() { + return this.size() === 0; + } + size() { + return Object.keys(this.table).length; + } + clear() { + this.table = {}; + } + toString() { + if (this.isEmpty()) { + return ''; + } + const valuePairs = this.keyValues(); + let objString = `${valuePairs[0].toString()}`; + for (let i = 1; i < valuePairs.length; i++) { + objString = `${objString},${valuePairs[i].toString()}`; + } + return objString; + } +} diff --git a/src/js/data-structures/hash-table-linear-probing-lazy.js b/src/js/data-structures/hash-table-linear-probing-lazy.js new file mode 100644 index 00000000..57038d0f --- /dev/null +++ b/src/js/data-structures/hash-table-linear-probing-lazy.js @@ -0,0 +1,122 @@ +import { defaultToString } from '../util'; +import { ValuePairLazy } from './models/value-pair-lazy'; + +export default class HashTableLinearProbingLazy { + constructor(toStrFn = defaultToString) { + this.toStrFn = toStrFn; + this.table = {}; + } + loseloseHashCode(key) { + if (typeof key === 'number') { + return key; + } + const tableKey = this.toStrFn(key); + let hash = 0; + for (let i = 0; i < tableKey.length; i++) { + hash += tableKey.charCodeAt(i); + } + return hash % 37; + } + hashCode(key) { + return this.loseloseHashCode(key); + } + put(key, value) { + if (key != null && value != null) { + const position = this.hashCode(key); + if ( + this.table[position] == null || + (this.table[position] != null && this.table[position].isDeleted) + ) { + this.table[position] = new ValuePairLazy(key, value); + } else { + let index = position + 1; + while (this.table[index] != null && !this.table[position].isDeleted) { + index++; + } + this.table[index] = new ValuePairLazy(key, value); + } + return true; + } + return false; + } + get(key) { + const position = this.hashCode(key); + if (this.table[position] != null) { + if (this.table[position].key === key && !this.table[position].isDeleted) { + return this.table[position].value; + } + let index = position + 1; + while ( + this.table[index] != null && + (this.table[index].key !== key || this.table[index].isDeleted) + ) { + if (this.table[index].key === key && this.table[index].isDeleted) { + return undefined; + } + index++; + } + if ( + this.table[index] != null && + this.table[index].key === key && + !this.table[index].isDeleted + ) { + return this.table[position].value; + } + } + return undefined; + } + remove(key) { + const position = this.hashCode(key); + if (this.table[position] != null) { + if (this.table[position].key === key && !this.table[position].isDeleted) { + this.table[position].isDeleted = true; + return true; + } + let index = position + 1; + while ( + this.table[index] != null && + (this.table[index].key !== key || this.table[index].isDeleted) + ) { + index++; + } + if ( + this.table[index] != null && + this.table[index].key === key && + !this.table[index].isDeleted + ) { + this.table[index].isDeleted = true; + return true; + } + } + return false; + } + isEmpty() { + return this.size() === 0; + } + size() { + let count = 0; + Object.values(this.table).forEach(valuePair => { + count += valuePair.isDeleted === true ? 0 : 1; + }); + return count; + } + clear() { + this.table = {}; + } + getTable() { + return this.table; + } + toString() { + if (this.isEmpty()) { + return ''; + } + const keys = Object.keys(this.table); + let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`; + for (let i = 1; i < keys.length; i++) { + objString = `${objString},{${keys[i]} => ${this.table[ + keys[i] + ].toString()}}`; + } + return objString; + } +} diff --git a/src/js/data-structures/hash-table-linear-probing.js b/src/js/data-structures/hash-table-linear-probing.js new file mode 100644 index 00000000..940d764a --- /dev/null +++ b/src/js/data-structures/hash-table-linear-probing.js @@ -0,0 +1,113 @@ +import { defaultToString } from '../util'; +import { ValuePair } from './models/value-pair'; + +export default class HashTableLinearProbing { + constructor(toStrFn = defaultToString) { + this.toStrFn = toStrFn; + this.table = {}; + } + loseloseHashCode(key) { + if (typeof key === 'number') { + return key; + } + const tableKey = this.toStrFn(key); + let hash = 0; + for (let i = 0; i < tableKey.length; i++) { + hash += tableKey.charCodeAt(i); + } + return hash % 37; + } + hashCode(key) { + return this.loseloseHashCode(key); + } + put(key, value) { + if (key != null && value != null) { + const position = this.hashCode(key); + if (this.table[position] == null) { + this.table[position] = new ValuePair(key, value); + } else { + let index = position + 1; + while (this.table[index] != null) { + index++; + } + this.table[index] = new ValuePair(key, value); + } + return true; + } + return false; + } + get(key) { + const position = this.hashCode(key); + if (this.table[position] != null) { + if (this.table[position].key === key) { + return this.table[position].value; + } + let index = position + 1; + while (this.table[index] != null && this.table[index].key !== key) { + index++; + } + if (this.table[index] != null && this.table[index].key === key) { + return this.table[position].value; + } + } + return undefined; + } + remove(key) { + const position = this.hashCode(key); + if (this.table[position] != null) { + if (this.table[position].key === key) { + delete this.table[position]; + this.verifyRemoveSideEffect(key, position); + return true; + } + let index = position + 1; + while (this.table[index] != null && this.table[index].key !== key) { + index++; + } + if (this.table[index] != null && this.table[index].key === key) { + delete this.table[index]; + this.verifyRemoveSideEffect(key, index); + return true; + } + } + return false; + } + verifyRemoveSideEffect(key, removedPosition) { + const hash = this.hashCode(key); + let index = removedPosition + 1; + while (this.table[index] != null) { + const posHash = this.hashCode(this.table[index].key); + if (posHash <= hash || posHash <= removedPosition) { + this.table[removedPosition] = this.table[index]; + delete this.table[index]; + removedPosition = index; + } + index++; + } + } + isEmpty() { + return this.size() === 0; + } + size() { + return Object.keys(this.table).length; + } + clear() { + this.table = {}; + } + getTable() { + return this.table; + } + toString() { + if (this.isEmpty()) { + return ''; + } + const keys = Object.keys(this.table); + let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`; + for (let i = 1; i < keys.length; i++) { + objString = `${objString},{${keys[i]} => ${this.table[ + keys[i] + ].toString()}}`; + } + return objString; + } +} diff --git a/src/js/data-structures/hash-table-separate-chaining.js b/src/js/data-structures/hash-table-separate-chaining.js new file mode 100644 index 00000000..c00c277c --- /dev/null +++ b/src/js/data-structures/hash-table-separate-chaining.js @@ -0,0 +1,96 @@ +import { defaultToString } from '../util'; +import LinkedList from './linked-list'; +import { ValuePair } from './models/value-pair'; + +export default class HashTableSeparateChaining { + constructor(toStrFn = defaultToString) { + this.toStrFn = toStrFn; + this.table = {}; + } + loseloseHashCode(key) { + if (typeof key === 'number') { + return key; + } + const tableKey = this.toStrFn(key); + let hash = 0; + for (let i = 0; i < tableKey.length; i++) { + hash += tableKey.charCodeAt(i); + } + return hash % 37; + } + hashCode(key) { + return this.loseloseHashCode(key); + } + put(key, value) { + if (key != null && value != null) { + const position = this.hashCode(key); + if (this.table[position] == null) { + this.table[position] = new LinkedList(); + } + this.table[position].push(new ValuePair(key, value)); + return true; + } + return false; + } + get(key) { + const position = this.hashCode(key); + const linkedList = this.table[position]; + if (linkedList != null && !linkedList.isEmpty()) { + let current = linkedList.getHead(); + while (current != null) { + if (current.element.key === key) { + return current.element.value; + } + current = current.next; + } + } + return undefined; + } + remove(key) { + const position = this.hashCode(key); + const linkedList = this.table[position]; + if (linkedList != null && !linkedList.isEmpty()) { + let current = linkedList.getHead(); + while (current != null) { + if (current.element.key === key) { + linkedList.remove(current.element); + if (linkedList.isEmpty()) { + delete this.table[position]; + } + return true; + } + current = current.next; + } + } + return false; + } + isEmpty() { + return this.size() === 0; + } + size() { + let count = 0; + Object.values(this.table).forEach(linkedList => { + count += linkedList.size(); + }); + return count; + } + clear() { + this.table = {}; + } + getTable() { + return this.table; + } + toString() { + if (this.isEmpty()) { + return ''; + } + const keys = Object.keys(this.table); + let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`; + for (let i = 1; i < keys.length; i++) { + objString = `${objString},{${keys[i]} => ${this.table[ + keys[i] + ].toString()}}`; + } + return objString; + } +} diff --git a/src/js/data-structures/hash-table.js b/src/js/data-structures/hash-table.js new file mode 100644 index 00000000..db87d14e --- /dev/null +++ b/src/js/data-structures/hash-table.js @@ -0,0 +1,77 @@ +import { defaultToString } from '../util'; +import { ValuePair } from './models/value-pair'; + +export default class HashTable { + constructor(toStrFn = defaultToString) { + this.toStrFn = toStrFn; + this.table = {}; + } + loseloseHashCode(key) { + if (typeof key === 'number') { + return key; + } + const tableKey = this.toStrFn(key); + let hash = 0; + for (let i = 0; i < tableKey.length; i++) { + hash += tableKey.charCodeAt(i); + } + return hash % 37; + } + /* djb2HashCode(key) { + const tableKey = this.toStrFn(key); + let hash = 5381; + for (let i = 0; i < tableKey.length; i++) { + hash = (hash * 33) + tableKey.charCodeAt(i); + } + return hash % 1013; + } */ + hashCode(key) { + return this.loseloseHashCode(key); + } + put(key, value) { + if (key != null && value != null) { + const position = this.hashCode(key); + this.table[position] = new ValuePair(key, value); + return true; + } + return false; + } + get(key) { + const valuePair = this.table[this.hashCode(key)]; + return valuePair == null ? undefined : valuePair.value; + } + remove(key) { + const hash = this.hashCode(key); + const valuePair = this.table[hash]; + if (valuePair != null) { + delete this.table[hash]; + return true; + } + return false; + } + getTable() { + return this.table; + } + isEmpty() { + return this.size() === 0; + } + size() { + return Object.keys(this.table).length; + } + clear() { + this.table = {}; + } + toString() { + if (this.isEmpty()) { + return ''; + } + const keys = Object.keys(this.table); + let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`; + for (let i = 1; i < keys.length; i++) { + objString = `${objString},{${keys[i]} => ${this.table[ + keys[i] + ].toString()}}`; + } + return objString; + } +} diff --git a/src/js/data-structures/models/value-pair-lazy.js b/src/js/data-structures/models/value-pair-lazy.js new file mode 100644 index 00000000..ff2e4398 --- /dev/null +++ b/src/js/data-structures/models/value-pair-lazy.js @@ -0,0 +1,10 @@ +import { ValuePair } from './value-pair'; + +export class ValuePairLazy extends ValuePair { + constructor(key, value, isDeleted = false) { + super(key, value); + this.key = key; + this.value = value; + this.isDeleted = isDeleted; + } +} diff --git a/src/js/data-structures/models/value-pair.js b/src/js/data-structures/models/value-pair.js new file mode 100644 index 00000000..b35a936a --- /dev/null +++ b/src/js/data-structures/models/value-pair.js @@ -0,0 +1,9 @@ +export class ValuePair { + constructor(key, value) { + this.key = key; + this.value = value; + } + toString() { + return `[#${this.key}: ${this.value}]`; + } +} diff --git a/src/js/index.js b/src/js/index.js index 3dafd721..477542c0 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1,7 +1,9 @@ import * as _util from './util'; +// chapters 05 and 07 export const util = _util; +// chapter 03 export { default as StackArray } from './data-structures/stack-array'; export { default as Stack } from './data-structures/stack'; export { default as hanoi } from './others/hanoi'; @@ -10,15 +12,25 @@ export { default as baseConverter } from './others/base-converter'; export { default as decimalToBinary } from './others/base-converter'; export { default as parenthesesChecker } from './others/balanced-symbols'; +// chapter 04 export { default as Queue } from './data-structures/queue'; export { default as Deque } from './data-structures/deque'; export { default as hotPotato } from './others/hot-potato'; export { default as palindromeChecker } from './others/palindrome-checker'; +// chapter 05 export { default as LinkedList } from './data-structures/linked-list'; export { default as DoublyLinkedList } from './data-structures/doubly-linked-list'; export { default as CircularLinkedList } from './data-structures/circular-linked-list'; export { default as SortedLinkedList } from './data-structures/sorted-linked-list'; export { default as StackLinkedList } from './data-structures/stack-linked-list'; +// chapter 06 export { default as Set } from './data-structures/set'; + +// chapter 07 +export { default as Dictionary } from './data-structures/dictionary'; +export { default as HashTable } from './data-structures/hash-table'; +export { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining'; +export { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing'; +export { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy'; diff --git a/src/js/util.js b/src/js/util.js index 501d2be8..1d671762 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -13,3 +13,14 @@ export function defaultCompare(a, b) { export function defaultEquals(a, b) { return a === b; } + +export function defaultToString(item) { + if (item === null) { + return 'NULL'; + } else if (item === undefined) { + return 'UNDEFINED'; + } else if (typeof item === 'string' || item instanceof String) { + return `${item}`; + } + return item.toString(); +} diff --git a/src/ts/data-structures/dictionary.ts b/src/ts/data-structures/dictionary.ts new file mode 100644 index 00000000..98485718 --- /dev/null +++ b/src/ts/data-structures/dictionary.ts @@ -0,0 +1,86 @@ +import { defaultToString } from '../util'; +import { ValuePair } from './models/value-pair'; + +export default class Dictionary { + private table: { [key: string]: ValuePair }; + + constructor(private toStrFn: (key: K) => string = defaultToString) { + this.table = {}; + } + + set(key: K, value: V) { + if (key != null && value != null) { + const tableKey = this.toStrFn(key); + this.table[tableKey] = new ValuePair(key, value); + return true; + } + return false; + } + + get(key: K): V { + const valuePair = this.table[this.toStrFn(key)]; + return valuePair == null ? undefined : valuePair.value; + } + + hasKey(key: K) { + return this.table[this.toStrFn(key)] != null; + } + + remove(key: K) { + if (this.hasKey(key)) { + delete this.table[this.toStrFn(key)]; + return true; + } + return false; + } + + values(): V[] { + return this.keyValues().map( + (valuePair: ValuePair) => valuePair.value + ); + } + + keys(): K[] { + return this.keyValues().map( + (valuePair: ValuePair) => valuePair.key + ); + } + + keyValues(): ValuePair[] { + return Object.values(this.table); + } + + forEach(callbackFn: (key: K, value: V) => any) { + const valuePairs = this.keyValues(); + for (let i = 0; i < valuePairs.length; i++) { + const result = callbackFn(valuePairs[i].key, valuePairs[i].value); + if (result === false) { + break; + } + } + } + + isEmpty() { + return this.size() === 0; + } + + size() { + return Object.keys(this.table).length; + } + + clear() { + this.table = {}; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + const valuePairs = this.keyValues(); + let objString = `${valuePairs[0].toString()}`; + for (let i = 1; i < valuePairs.length; i++) { + objString = `${objString},${valuePairs[i].toString()}`; + } + return objString; + } +} diff --git a/src/ts/data-structures/hash-table-linear-probing-lazy.ts b/src/ts/data-structures/hash-table-linear-probing-lazy.ts new file mode 100644 index 00000000..43817050 --- /dev/null +++ b/src/ts/data-structures/hash-table-linear-probing-lazy.ts @@ -0,0 +1,136 @@ +import { defaultToString } from '../util'; +import { ValuePairLazy } from './models/value-pair-lazy'; + +export default class HashTableLinearProbingLazy { + protected table: { [key: string]: ValuePairLazy }; + + constructor(protected toStrFn: (key: K) => string = defaultToString) { + this.table = {}; + } + + private loseloseHashCode(key: K) { + if (typeof key === 'number') { + return key; + } + const tableKey = this.toStrFn(key); + let hash = 0; + for (let i = 0; i < tableKey.length; i++) { + hash += tableKey.charCodeAt(i); + } + return hash % 37; + } + + hashCode(key: K) { + return this.loseloseHashCode(key); + } + + put(key: K, value: V) { + if (key != null && value != null) { + const position = this.hashCode(key); + + if ( + this.table[position] == null || + (this.table[position] != null && this.table[position].isDeleted) + ) { + this.table[position] = new ValuePairLazy(key, value); + } else { + let index = position + 1; + while (this.table[index] != null && !this.table[position].isDeleted) { + index++; + } + this.table[index] = new ValuePairLazy(key, value); + } + return true; + } + return false; + } + + get(key: K) { + const position = this.hashCode(key); + + if (this.table[position] != null) { + if (this.table[position].key === key && !this.table[position].isDeleted) { + return this.table[position].value; + } + let index = position + 1; + while ( + this.table[index] != null && + (this.table[index].key !== key || this.table[index].isDeleted) + ) { + if (this.table[index].key === key && this.table[index].isDeleted) { + return undefined; + } + index++; + } + if ( + this.table[index] != null && + this.table[index].key === key && + !this.table[index].isDeleted + ) { + return this.table[position].value; + } + } + return undefined; + } + + remove(key: K) { + const position = this.hashCode(key); + + if (this.table[position] != null) { + if (this.table[position].key === key && !this.table[position].isDeleted) { + this.table[position].isDeleted = true; + return true; + } + let index = position + 1; + while ( + this.table[index] != null && + (this.table[index].key !== key || this.table[index].isDeleted) + ) { + index++; + } + if ( + this.table[index] != null && + this.table[index].key === key && + !this.table[index].isDeleted + ) { + this.table[index].isDeleted = true; + return true; + } + } + return false; + } + + isEmpty() { + return this.size() === 0; + } + + size() { + let count = 0; + Object.values(this.table).forEach(valuePair => { + count += valuePair.isDeleted === true ? 0 : 1; + }); + return count; + } + + clear() { + this.table = {}; + } + + getTable() { + return this.table; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + const keys = Object.keys(this.table); + let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`; + for (let i = 1; i < keys.length; i++) { + objString = `${objString},{${keys[i]} => ${this.table[ + keys[i] + ].toString()}}`; + } + return objString; + } +} diff --git a/src/ts/data-structures/hash-table-linear-probing.ts b/src/ts/data-structures/hash-table-linear-probing.ts new file mode 100644 index 00000000..872b4421 --- /dev/null +++ b/src/ts/data-structures/hash-table-linear-probing.ts @@ -0,0 +1,128 @@ +import { defaultToString } from '../util'; +import { ValuePair } from './models/value-pair'; + +export default class HashTableLinearProbing { + protected table: { [key: string]: ValuePair }; + + constructor(protected toStrFn: (key: K) => string = defaultToString) { + this.table = {}; + } + + private loseloseHashCode(key: K) { + if (typeof key === 'number') { + return key; + } + const tableKey = this.toStrFn(key); + let hash = 0; + for (let i = 0; i < tableKey.length; i++) { + hash += tableKey.charCodeAt(i); + } + return hash % 37; + } + + hashCode(key: K) { + return this.loseloseHashCode(key); + } + + put(key: K, value: V) { + if (key != null && value != null) { + const position = this.hashCode(key); + + if (this.table[position] == null) { + this.table[position] = new ValuePair(key, value); + } else { + let index = position + 1; + while (this.table[index] != null) { + index++; + } + this.table[index] = new ValuePair(key, value); + } + return true; + } + return false; + } + + get(key: K) { + const position = this.hashCode(key); + + if (this.table[position] != null) { + if (this.table[position].key === key) { + return this.table[position].value; + } + let index = position + 1; + while (this.table[index] != null && this.table[index].key !== key) { + index++; + } + if (this.table[index] != null && this.table[index].key === key) { + return this.table[position].value; + } + } + return undefined; + } + + remove(key: K) { + const position = this.hashCode(key); + + if (this.table[position] != null) { + if (this.table[position].key === key) { + delete this.table[position]; + this.verifyRemoveSideEffect(key, position); + return true; + } + let index = position + 1; + while (this.table[index] != null && this.table[index].key !== key) { + index++; + } + if (this.table[index] != null && this.table[index].key === key) { + delete this.table[index]; + this.verifyRemoveSideEffect(key, index); + return true; + } + } + return false; + } + + private verifyRemoveSideEffect(key: K, removedPosition: number) { + const hash = this.hashCode(key); + let index = removedPosition + 1; + while (this.table[index] != null) { + const posHash = this.hashCode(this.table[index].key); + if (posHash <= hash || posHash <= removedPosition) { + this.table[removedPosition] = this.table[index]; + delete this.table[index]; + removedPosition = index; + } + index++; + } + } + + isEmpty() { + return this.size() === 0; + } + + size() { + return Object.keys(this.table).length; + } + + clear() { + this.table = {}; + } + + getTable() { + return this.table; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + const keys = Object.keys(this.table); + let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`; + for (let i = 1; i < keys.length; i++) { + objString = `${objString},{${keys[i]} => ${this.table[ + keys[i] + ].toString()}}`; + } + return objString; + } +} diff --git a/src/ts/data-structures/hash-table-separate-chaining.ts b/src/ts/data-structures/hash-table-separate-chaining.ts new file mode 100644 index 00000000..165ff15d --- /dev/null +++ b/src/ts/data-structures/hash-table-separate-chaining.ts @@ -0,0 +1,106 @@ +import { defaultToString } from '../util'; +import LinkedList from './linked-list'; +import { ValuePair } from './models/value-pair'; + +export default class HashTableSeparateChaining { + protected table: { [key: string]: LinkedList> }; + + constructor(protected toStrFn: (key: K) => string = defaultToString) { + this.table = {}; + } + + private loseloseHashCode(key: K) { + if (typeof key === 'number') { + return key; + } + const tableKey = this.toStrFn(key); + let hash = 0; + for (let i = 0; i < tableKey.length; i++) { + hash += tableKey.charCodeAt(i); + } + return hash % 37; + } + + hashCode(key: K) { + return this.loseloseHashCode(key); + } + + put(key: K, value: V) { + if (key != null && value != null) { + const position = this.hashCode(key); + + if (this.table[position] == null) { + this.table[position] = new LinkedList>(); + } + this.table[position].push(new ValuePair(key, value)); + return true; + } + return false; + } + + get(key: K) { + const position = this.hashCode(key); + const linkedList = this.table[position]; + if (linkedList != null && !linkedList.isEmpty()) { + let current = linkedList.getHead(); + while (current != null) { + if (current.element.key === key) { + return current.element.value; + } + current = current.next; + } + } + return undefined; + } + + remove(key: K) { + const position = this.hashCode(key); + const linkedList = this.table[position]; + if (linkedList != null && !linkedList.isEmpty()) { + let current = linkedList.getHead(); + while (current != null) { + if (current.element.key === key) { + linkedList.remove(current.element); + if (linkedList.isEmpty()) { + delete this.table[position]; + } + return true; + } + current = current.next; + } + } + return false; + } + + isEmpty() { + return this.size() === 0; + } + + size() { + let count = 0; + Object.values(this.table).forEach(linkedList => count += linkedList.size()); + return count; + } + + clear() { + this.table = {}; + } + + getTable() { + return this.table; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + const keys = Object.keys(this.table); + let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`; + for (let i = 1; i < keys.length; i++) { + objString = `${objString},{${keys[i]} => ${this.table[ + keys[i] + ].toString()}}`; + } + return objString; + } +} diff --git a/src/ts/data-structures/hash-table.ts b/src/ts/data-structures/hash-table.ts new file mode 100644 index 00000000..7b3c6983 --- /dev/null +++ b/src/ts/data-structures/hash-table.ts @@ -0,0 +1,87 @@ +import { defaultToString } from '../util'; +import { ValuePair } from './models/value-pair'; + +export default class HashTable { + protected table: { [key: string]: ValuePair }; + + constructor(protected toStrFn: (key: K) => string = defaultToString) { + this.table = {}; + } + + private loseloseHashCode(key: K) { + if (typeof key === 'number') { + return key; + } + const tableKey = this.toStrFn(key); + let hash = 0; + for (let i = 0; i < tableKey.length; i++) { + hash += tableKey.charCodeAt(i); + } + return hash % 37; + } + + /* private djb2HashCode(key: K) { + const tableKey = this.toStrFn(key); + let hash = 5381; + for (let i = 0; i < tableKey.length; i++) { + hash = (hash * 33) + tableKey.charCodeAt(i); + } + return hash % 1013; + } */ + + hashCode(key: K) { + return this.loseloseHashCode(key); + } + + put(key: K, value: V) { + if (key != null && value != null) { + const position = this.hashCode(key); + this.table[position] = new ValuePair(key, value); + return true; + } + return false; + } + + get(key: K) { + const valuePair = this.table[this.hashCode(key)]; + return valuePair == null ? undefined : valuePair.value; + } + + remove(key: K) { + const hash = this.hashCode(key); + const valuePair = this.table[hash]; + if (valuePair != null) { + delete this.table[hash]; + return true; + } + return false; + } + + getTable() { + return this.table; + } + + isEmpty() { + return this.size() === 0; + } + + size() { + return Object.keys(this.table).length; + } + + clear() { + this.table = {}; + } + + toString() { + if (this.isEmpty()) { + return ''; + } + const keys = Object.keys(this.table); + let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`; + for (let i = 1; i < keys.length; i++) { + objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`; + } + return objString; + } +} diff --git a/src/ts/data-structures/models/value-pair-lazy.ts b/src/ts/data-structures/models/value-pair-lazy.ts new file mode 100644 index 00000000..57b6abbd --- /dev/null +++ b/src/ts/data-structures/models/value-pair-lazy.ts @@ -0,0 +1,7 @@ +import { ValuePair } from './value-pair'; + +export class ValuePairLazy extends ValuePair { + constructor(public key: K, public value: V, public isDeleted = false) { + super(key, value); + } +} diff --git a/src/ts/data-structures/models/value-pair.ts b/src/ts/data-structures/models/value-pair.ts new file mode 100644 index 00000000..eb4cff0a --- /dev/null +++ b/src/ts/data-structures/models/value-pair.ts @@ -0,0 +1,7 @@ +export class ValuePair { + constructor(public key: K, public value: V) {} + + toString() { + return `[#${this.key}: ${this.value}]`; + } +} diff --git a/src/ts/index.ts b/src/ts/index.ts index 80dcba31..c6e6024a 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -6,6 +6,11 @@ export { default as CircularLinkedList } from './data-structures/circular-linked export { default as SortedLinkedList } from './data-structures/sorted-linked-list'; export { default as StackLinkedList } from './data-structures/stack-linked-list'; export { default as Set } from './data-structures/set'; +export { default as Dictionary } from './data-structures/dictionary'; +export { default as HashTable } from './data-structures/hash-table'; +export { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining'; +export { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing'; +export { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy'; export const util = _util; diff --git a/src/ts/util.ts b/src/ts/util.ts index d88f4efa..80021194 100644 --- a/src/ts/util.ts +++ b/src/ts/util.ts @@ -17,3 +17,14 @@ export function defaultCompare(a: T, b: T): number { export function defaultEquals(a: T, b: T): boolean { return a === b; } + +export function defaultToString(item: any): string { + if (item === null) { + return 'NULL'; + } else if (item === undefined) { + return 'UNDEFINED'; + } else if (typeof item === 'string' || item instanceof String) { + return `${item}`; + } + return item.toString(); +} diff --git a/test/js/data-structures/dictionary.spec.js b/test/js/data-structures/dictionary.spec.js new file mode 100644 index 00000000..72e78640 --- /dev/null +++ b/test/js/data-structures/dictionary.spec.js @@ -0,0 +1,266 @@ +import 'mocha'; +import { expect } from 'chai'; +import { Dictionary } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('Dictionary', () => { + let dictionary; + beforeEach(() => { + dictionary = new Dictionary(); + }); + it('starts empty', () => { + expect(dictionary.size()).to.equal(0); + expect(dictionary.isEmpty()).to.equal(true); + }); + it('sets undefined and null keys and values', () => { + const dict = new Dictionary(); + expect(dict.set('undefined', undefined)).to.equal(false); + expect(dict.get('undefined')).to.equal(undefined); + expect(dict.set('undefined', 1)).to.equal(true); + expect(dict.get('undefined')).to.equal(1); + expect(dict.set('null', null)).to.equal(false); + expect(dict.get('null')).to.equal(undefined); + expect(dict.set('null', 1)).to.equal(true); + expect(dict.get('null')).to.equal(1); + dict.clear(); + expect(dict.set(undefined, undefined)).to.equal(false); + expect(dict.get(undefined)).to.equal(undefined); + expect(dict.set(undefined, 1)).to.equal(false); + expect(dict.get(undefined)).to.equal(undefined); + expect(dict.set(null, null)).to.equal(false); + expect(dict.get(null)).to.equal(undefined); + expect(dict.set(null, 1)).to.equal(false); + expect(dict.get(null)).to.equal(undefined); + }); + it('sets values with string key', () => { + const dict = new Dictionary(); + const min = 1; + const max = 5; + const size = (max - min) + 1; + for (let i = min; i <= max; i++) { + expect(dict.set(`${i}`, i)).to.equal(true); + } + expect(dict.size()).to.equal(size); + const keys = dict.keys(); + expect(keys.length).to.equal(size); + for (let i = 0; i < keys.length; i++) { + expect(keys[i]).to.equal((i + 1).toString(10)); + } + dict.set('a', 1); + expect(dict.get('a')).to.equal(1); + }); + it('sets values with number key', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + for (let i = min; i <= max; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + expect(dictionary.size()).to.equal(size); + const keys = dictionary.keys(); + expect(keys.length).to.equal(size); + for (let i = 0; i < keys.length; i++) { + expect(keys[i]).to.equal(i + 1); + } + }); + it('sets values with object', () => { + const dict = new Dictionary(); + const min = 0; + const max = 5; + const size = max - min; + const myObjList = []; + for (let i = min; i < max; i++) { + myObjList.push(new MyObj(i, i + 1)); + } + for (let i = min; i < max; i++) { + expect(dict.set(myObjList[i], myObjList[i])).to.equal(true); + } + expect(dict.size()).to.equal(size); + for (let i = min; i < max; i++) { + expect(dict.get(myObjList[i])).to.equal(myObjList[i]); + } + const keys = dict.keys(); + expect(keys.length).to.equal(size); + for (let i = 0; i < keys.length; i++) { + expect(keys[i]).to.equal(myObjList[i]); + } + const values = dict.values(); + expect(values.length).to.equal(size); + for (let i = 0; i < values.length; i++) { + expect(values[i]).to.equal(myObjList[i]); + } + }); + function customToString(key) { + return `####${key.toString()}`; + } + it('sets values with custom toString function', () => { + const dict = new Dictionary(customToString); + const min = 0; + const max = 5; + const size = max - min; + const myObjList = []; + for (let i = min; i < max; i++) { + myObjList.push(new MyObj(i, i + 1)); + } + for (let i = min; i < max; i++) { + expect(dict.set(myObjList[i], myObjList[i])).to.equal(true); + } + expect(dict.size()).to.equal(size); + for (let i = min; i < max; i++) { + expect(dict.get(myObjList[i])).to.equal(myObjList[i]); + } + const keys = dict.keys(); + expect(keys.length).to.equal(size); + for (let i = 0; i < keys.length; i++) { + expect(keys[i]).to.equal(myObjList[i]); + } + const values = dict.values(); + expect(values.length).to.equal(size); + for (let i = 0; i < values.length; i++) { + expect(values[i]).to.equal(myObjList[i]); + } + }); + it('removes elements', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + for (let i = min; i <= max; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + expect(dictionary.size()).to.equal(size); + for (let i = min; i <= max; i++) { + expect(dictionary.remove(i)).to.equal(true); + } + // elements do not exist + for (let i = min; i <= max; i++) { + expect(dictionary.remove(i)).to.equal(false); + } + expect(dictionary.isEmpty()).to.equal(true); + }); + it('returns the correct size', () => { + expect(dictionary.size()).to.equal(0); + const max = 5; + for (let i = 1; i < max; i++) { + dictionary.set(i, i); + expect(dictionary.size()).to.equal(i); + } + for (let i = 1; i < max; i++) { + dictionary.remove(i); + expect(dictionary.size()).to.equal(max - i - 1); + } + expect(dictionary.size()).to.equal(0); + expect(dictionary.isEmpty()).to.equal(true); + }); + it('returns if element exists', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + for (let i = min; i <= max; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + expect(dictionary.size()).to.equal(size); + for (let i = min; i <= max; i++) { + expect(dictionary.hasKey(i)).to.equal(true); + expect(dictionary.remove(i)).to.equal(true); + expect(dictionary.hasKey(i)).to.equal(false); + } + }); + it('returns if it is empty', () => { + expect(dictionary.isEmpty()).to.equal(true); + for (let i = 1; i < 5; i++) { + dictionary.set(i, i); + expect(dictionary.isEmpty()).to.equal(false); + } + for (let i = 1; i < 5; i++) { + dictionary.remove(i); + expect(dictionary.isEmpty()).to.equal(!(i < 4)); + } + expect(dictionary.size()).to.equal(0); + expect(dictionary.isEmpty()).to.equal(true); + }); + it('clears the dictionary', () => { + dictionary.clear(); + expect(dictionary.isEmpty()).to.equal(true); + dictionary.set(1, 1); + dictionary.set(2, 2); + dictionary.clear(); + expect(dictionary.isEmpty()).to.equal(true); + }); + it('returns values, keys and value pairs', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + for (let i = min; i <= max; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + expect(dictionary.size()).to.equal(size); + const keys = dictionary.keys(); + const values = dictionary.values(); + const valuePairs = dictionary.keyValues(); + expect(keys.length).to.equal(size); + expect(values.length).to.equal(size); + expect(valuePairs.length).to.equal(size); + for (let i = 0; i < keys.length; i++) { + expect(keys[i]).to.equal(i + 1); + expect(values[i]).to.equal(i + 1); + expect(valuePairs[i].key).to.equal(i + 1); + expect(valuePairs[i].value).to.equal(i + 1); + } + }); + it('allows to iterate with forEach', () => { + for (let i = 1; i <= 5; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + dictionary.forEach((k, v) => { + expect(dictionary.hasKey(k)).to.equal(true); + expect(dictionary.get(k)).to.equal(v); + }); + }); + it('allows to iterate with forEach and interrupt', () => { + for (let i = 1; i <= 5; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + const size = dictionary.keys().length; + let index = 1; + dictionary.forEach((k, v) => { + expect(dictionary.hasKey(k)).to.equal(true); + expect(dictionary.get(k)).to.equal(v); + index++; + }); + expect(index).to.equal(size + 1); + index = 1; + dictionary.forEach((k, v) => { + expect(dictionary.hasKey(k)).to.equal(true); + expect(dictionary.get(k)).to.equal(v); + index++; + return !(k % 3 === 0); + }); + expect(index).to.equal(size - 1); + }); + it('returns toString primitive types', () => { + expect(dictionary.toString()).to.equal(''); + dictionary.set(1, 1); + expect(dictionary.toString()).to.equal('[#1: 1]'); + dictionary.set(2, 2); + expect(dictionary.toString()).to.equal('[#1: 1],[#2: 2]'); + dictionary.clear(); + expect(dictionary.toString()).to.equal(''); + }); + it('returns toString primitive types: string', () => { + const dict = new Dictionary(); + dict.set('el1', 1); + expect(dict.toString()).to.equal('[#el1: 1]'); + dict.set('el2', 2); + expect(dict.toString()).to.equal('[#el1: 1],[#el2: 2]'); + }); + it('returns toString objects', () => { + const dict = new Dictionary(); + expect(dict.toString()).to.equal(''); + let myObj = new MyObj(1, 2); + dict.set(myObj, myObj); + expect(dict.toString()).to.equal('[#1|2: 1|2]'); + myObj = new MyObj(3, 4); + dict.set(myObj, myObj); + expect(dict.toString()).to.equal('[#1|2: 1|2],[#3|4: 3|4]'); + }); +}); diff --git a/test/js/data-structures/hash-table-linear-probing-lazy.spec.js b/test/js/data-structures/hash-table-linear-probing-lazy.spec.js new file mode 100644 index 00000000..f7dd7e06 --- /dev/null +++ b/test/js/data-structures/hash-table-linear-probing-lazy.spec.js @@ -0,0 +1,300 @@ +import 'mocha'; +import { expect } from 'chai'; +import { HashTableLinearProbingLazy } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('HashTableLinearProbingLazy', () => { + const A = 'Jonathan'; + const B = 'Jamie'; + const C = 'Sue'; + it('starts empty', () => { + const hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.size()).to.equal(0); + expect(hashTable.isEmpty()).to.equal(true); + }); + it('generates hashcode', () => { + // numbers + let hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.hashCode(1)).to.equal(1); + expect(hashTable.hashCode(10)).to.equal(10); + expect(hashTable.hashCode(100)).to.equal(100); + expect(hashTable.hashCode(1000)).to.equal(1000); + // strings + hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.hashCode('1')).to.equal(12); + expect(hashTable.hashCode('10')).to.equal(23); + expect(hashTable.hashCode('100')).to.equal(34); + expect(hashTable.hashCode('1000')).to.equal(8); + expect(hashTable.hashCode('a')).to.equal(23); + expect(hashTable.hashCode('A')).to.equal(28); + expect(hashTable.hashCode('Aba')).to.equal(1); + // objects + hashTable = new HashTableLinearProbingLazy(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + } + expect(hashTable.hashCode(myObjList[0])).to.equal(1); + expect(hashTable.hashCode(myObjList[1])).to.equal(3); + expect(hashTable.hashCode(myObjList[2])).to.equal(5); + expect(hashTable.hashCode(myObjList[3])).to.equal(7); + expect(hashTable.hashCode(myObjList[4])).to.equal(9); + }); + it('puts undefined and null keys and values', () => { + const hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.put('undefined', undefined)).to.equal(false); + expect(hashTable.get('undefined')).to.equal(undefined); + expect(hashTable.put('undefined', 1)).to.equal(true); + expect(hashTable.get('undefined')).to.equal(1); + expect(hashTable.put('null', null)).to.equal(false); + expect(hashTable.get('null')).to.equal(undefined); + expect(hashTable.put('null', 1)).to.equal(true); + expect(hashTable.get('null')).to.equal(1); + hashTable.clear(); + expect(hashTable.put(undefined, undefined)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + expect(hashTable.put(undefined, 1)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + expect(hashTable.put(null, null)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + expect(hashTable.put(null, 1)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + }); + it('puts values with number key without collisions', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTableLinearProbingLazy(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + expect(table[i].key).to.equal(i); + expect(table[i].value).to.equal(i); + } + }); + it('puts values with string key without collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.put('1', 1)).to.equal(true); + expect(hashTable.put('10', 10)).to.equal(true); + expect(hashTable.put('100', 100)).to.equal(true); + expect(hashTable.put('1000', 1000)).to.equal(true); + const table = hashTable.getTable(); + expect(table[12].key).to.equal('1'); + expect(table[12].value).to.equal(1); + expect(table[23].key).to.equal('10'); + expect(table[23].value).to.equal(10); + expect(table[34].key).to.equal('100'); + expect(table[34].value).to.equal(100); + expect(table[8].key).to.equal('1000'); + expect(table[8].value).to.equal(1000); + }); + it('puts values with object key without collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + expect(hashTable.put(myObjList[i - 1], myObjList[i - 1])).to.equal(true); + } + const table = hashTable.getTable(); + expect(table[1].key).to.equal(myObjList[0]); + expect(table[1].value).to.equal(myObjList[0]); + expect(table[3].key).to.equal(myObjList[1]); + expect(table[3].value).to.equal(myObjList[1]); + expect(table[5].key).to.equal(myObjList[2]); + expect(table[5].value).to.equal(myObjList[2]); + expect(table[7].key).to.equal(myObjList[3]); + expect(table[7].value).to.equal(myObjList[3]); + expect(table[9].key).to.equal(myObjList[4]); + expect(table[9].value).to.equal(myObjList[4]); + }); + function addValuesCollision() { + const hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.put(A, `${A}@email.com`)).to.equal(true); + expect(hashTable.put(B, `${B}@email.com`)).to.equal(true); + expect(hashTable.put(C, `${C}@email.com`)).to.equal(true); + expect(hashTable.size()).to.equal(3); + const expectedHash = 5; + expect(hashTable.hashCode(A)).to.equal(expectedHash); + expect(hashTable.hashCode(B)).to.equal(expectedHash); + expect(hashTable.hashCode(C)).to.equal(expectedHash); + expect(hashTable.size()).to.equal(3); + return hashTable; + } + it('puts values with collisions', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTableLinearProbingLazy(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 10)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 2); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 100)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 3); + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + expect(table[i].key).to.equal(i); + expect(table[i].value).to.equal(i); + expect(table[i + size].key).to.equal(i); + expect(table[i + size].value).to.equal(i + 10); + expect(table[i + (size * 2)].key).to.equal(i); + expect(table[i + (size * 2)].value).to.equal(i + 100); + } + addValuesCollision(); + }); + it('removes elements without collisions', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTableLinearProbingLazy(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(true); + } + // elements do not exist + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(false); + } + expect(hashTable.isEmpty()).to.equal(true); + }); + function removeWithCollision(a, b, c) { + const hashTable = addValuesCollision(); + expect(hashTable.remove(a)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.not.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + expect(hashTable.remove(b)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + expect(hashTable.remove(c)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.equal(undefined); + expect(hashTable.isEmpty()).to.equal(true); + } + it('removes elements with collisions: scenario 1', () => { + // test all possibilities for removal + removeWithCollision(A, B, C); + removeWithCollision(A, C, B); + removeWithCollision(B, A, C); + removeWithCollision(B, C, A); + removeWithCollision(C, A, B); + removeWithCollision(C, B, A); + }); + function addValuesCollision2() { + const hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.put(')', 'parenthesis@email.com')).to.equal(true); + expect(hashTable.put(A, `${A}@email.com`)).to.equal(true); + expect(hashTable.put('+', 'plus@email.com')).to.equal(true); + expect(hashTable.put(B, `${B}@email.com`)).to.equal(true); + expect(hashTable.put(',', 'comma@email.com')).to.equal(true); + expect(hashTable.put(C, `${C}@email.com`)).to.equal(true); + expect(hashTable.put('-', 'minus@email.com')).to.equal(true); + expect(hashTable.put('0', 'zero@email.com')).to.equal(true); + const expectedHash = 5; + expect(hashTable.hashCode(A)).to.equal(expectedHash); + expect(hashTable.hashCode(B)).to.equal(expectedHash); + expect(hashTable.hashCode(C)).to.equal(expectedHash); + expect(hashTable.hashCode(')')).to.equal(4); + expect(hashTable.hashCode('+')).to.equal(6); + expect(hashTable.hashCode(',')).to.equal(7); + expect(hashTable.hashCode('-')).to.equal(8); + expect(hashTable.hashCode('0')).to.equal(11); + expect(hashTable.size()).to.equal(8); + const table = hashTable.getTable(); + expect(table[4].key).to.equal(')'); + expect(table[5].key).to.equal(A); + expect(table[6].key).to.equal('+'); + expect(table[7].key).to.equal(B); + expect(table[8].key).to.equal(','); + expect(table[9].key).to.equal(C); + expect(table[10].key).to.equal('-'); + expect(table[11].key).to.equal('0'); + return hashTable; + } + function verifyOtherKeys(hashTable) { + expect(hashTable.get(')')).to.not.equal(undefined); + expect(hashTable.get('+')).to.not.equal(undefined); + expect(hashTable.get(',')).to.not.equal(undefined); + expect(hashTable.get('-')).to.not.equal(undefined); + expect(hashTable.get('0')).to.not.equal(undefined); + } + function removeWithCollision2(a, b, c) { + const hashTable = addValuesCollision2(); + expect(hashTable.remove(a)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.not.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + verifyOtherKeys(hashTable); + expect(hashTable.remove(b)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + verifyOtherKeys(hashTable); + expect(hashTable.remove(c)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.equal(undefined); + verifyOtherKeys(hashTable); + } + it('removes elements with collisions: scenario 2', () => { + // test all possibilities for removal + removeWithCollision2(A, B, C); + removeWithCollision2(A, C, B); + removeWithCollision2(B, A, C); + removeWithCollision2(B, C, A); + removeWithCollision2(C, A, B); + removeWithCollision2(C, B, A); + }); + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.toString()).to.equal(''); + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + hashTable.put('el1', 1); + expect(hashTable.toString()).to.equal('{36 => [#el1: 1]}'); + hashTable.put('el2', 2); + expect(hashTable.toString()).to.equal('{0 => [#el2: 2]},{36 => [#el1: 1]}'); + }); + it('returns toString objects without collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + let myObj = new MyObj(1, 2); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]}'); + myObj = new MyObj(3, 4); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]},{5 => [#3|4: 3|4]}'); + }); + it('returns toString with collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.toString()).to.equal(''); + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + hashTable.put(1, 10); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]},{3 => [#1: 10]}'); + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); +}); diff --git a/test/js/data-structures/hash-table-linear-probing.spec.js b/test/js/data-structures/hash-table-linear-probing.spec.js new file mode 100644 index 00000000..bfb519f3 --- /dev/null +++ b/test/js/data-structures/hash-table-linear-probing.spec.js @@ -0,0 +1,300 @@ +import 'mocha'; +import { expect } from 'chai'; +import { HashTableLinearProbing } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('HashTableLinearProbing', () => { + const A = 'Jonathan'; + const B = 'Jamie'; + const C = 'Sue'; + it('starts empty', () => { + const hashTable = new HashTableLinearProbing(); + expect(hashTable.size()).to.equal(0); + expect(hashTable.isEmpty()).to.equal(true); + }); + it('generates hashcode', () => { + // numbers + let hashTable = new HashTableLinearProbing(); + expect(hashTable.hashCode(1)).to.equal(1); + expect(hashTable.hashCode(10)).to.equal(10); + expect(hashTable.hashCode(100)).to.equal(100); + expect(hashTable.hashCode(1000)).to.equal(1000); + // strings + hashTable = new HashTableLinearProbing(); + expect(hashTable.hashCode('1')).to.equal(12); + expect(hashTable.hashCode('10')).to.equal(23); + expect(hashTable.hashCode('100')).to.equal(34); + expect(hashTable.hashCode('1000')).to.equal(8); + expect(hashTable.hashCode('a')).to.equal(23); + expect(hashTable.hashCode('A')).to.equal(28); + expect(hashTable.hashCode('Aba')).to.equal(1); + // objects + hashTable = new HashTableLinearProbing(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + } + expect(hashTable.hashCode(myObjList[0])).to.equal(1); + expect(hashTable.hashCode(myObjList[1])).to.equal(3); + expect(hashTable.hashCode(myObjList[2])).to.equal(5); + expect(hashTable.hashCode(myObjList[3])).to.equal(7); + expect(hashTable.hashCode(myObjList[4])).to.equal(9); + }); + it('puts undefined and null keys and values', () => { + const hashTable = new HashTableLinearProbing(); + expect(hashTable.put('undefined', undefined)).to.equal(false); + expect(hashTable.get('undefined')).to.equal(undefined); + expect(hashTable.put('undefined', 1)).to.equal(true); + expect(hashTable.get('undefined')).to.equal(1); + expect(hashTable.put('null', null)).to.equal(false); + expect(hashTable.get('null')).to.equal(undefined); + expect(hashTable.put('null', 1)).to.equal(true); + expect(hashTable.get('null')).to.equal(1); + hashTable.clear(); + expect(hashTable.put(undefined, undefined)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + expect(hashTable.put(undefined, 1)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + expect(hashTable.put(null, null)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + expect(hashTable.put(null, 1)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + }); + it('puts values with number key without collisions', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTableLinearProbing(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + expect(table[i].key).to.equal(i); + expect(table[i].value).to.equal(i); + } + }); + it('puts values with string key without collisions', () => { + const hashTable = new HashTableLinearProbing(); + expect(hashTable.put('1', 1)).to.equal(true); + expect(hashTable.put('10', 10)).to.equal(true); + expect(hashTable.put('100', 100)).to.equal(true); + expect(hashTable.put('1000', 1000)).to.equal(true); + const table = hashTable.getTable(); + expect(table[12].key).to.equal('1'); + expect(table[12].value).to.equal(1); + expect(table[23].key).to.equal('10'); + expect(table[23].value).to.equal(10); + expect(table[34].key).to.equal('100'); + expect(table[34].value).to.equal(100); + expect(table[8].key).to.equal('1000'); + expect(table[8].value).to.equal(1000); + }); + it('puts values with object key without collisions', () => { + const hashTable = new HashTableLinearProbing(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + expect(hashTable.put(myObjList[i - 1], myObjList[i - 1])).to.equal(true); + } + const table = hashTable.getTable(); + expect(table[1].key).to.equal(myObjList[0]); + expect(table[1].value).to.equal(myObjList[0]); + expect(table[3].key).to.equal(myObjList[1]); + expect(table[3].value).to.equal(myObjList[1]); + expect(table[5].key).to.equal(myObjList[2]); + expect(table[5].value).to.equal(myObjList[2]); + expect(table[7].key).to.equal(myObjList[3]); + expect(table[7].value).to.equal(myObjList[3]); + expect(table[9].key).to.equal(myObjList[4]); + expect(table[9].value).to.equal(myObjList[4]); + }); + function addValuesCollision() { + const hashTable = new HashTableLinearProbing(); + expect(hashTable.put(A, `${A}@email.com`)).to.equal(true); + expect(hashTable.put(B, `${B}@email.com`)).to.equal(true); + expect(hashTable.put(C, `${C}@email.com`)).to.equal(true); + expect(hashTable.size()).to.equal(3); + const expectedHash = 5; + expect(hashTable.hashCode(A)).to.equal(expectedHash); + expect(hashTable.hashCode(B)).to.equal(expectedHash); + expect(hashTable.hashCode(C)).to.equal(expectedHash); + expect(hashTable.size()).to.equal(3); + return hashTable; + } + it('puts values with collisions', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTableLinearProbing(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 10)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 2); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 100)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 3); + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + expect(table[i].key).to.equal(i); + expect(table[i].value).to.equal(i); + expect(table[i + size].key).to.equal(i); + expect(table[i + size].value).to.equal(i + 10); + expect(table[i + (size * 2)].key).to.equal(i); + expect(table[i + (size * 2)].value).to.equal(i + 100); + } + addValuesCollision(); + }); + it('removes elements without collisions', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTableLinearProbing(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(true); + } + // elements do not exist + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(false); + } + expect(hashTable.isEmpty()).to.equal(true); + }); + function removeWithCollision(a, b, c) { + const hashTable = addValuesCollision(); + expect(hashTable.remove(a)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.not.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + expect(hashTable.remove(b)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + expect(hashTable.remove(c)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.equal(undefined); + expect(hashTable.isEmpty()).to.equal(true); + } + it('removes elements with collisions: scenario 1', () => { + // test all possibilities for removal + removeWithCollision(A, B, C); + removeWithCollision(A, C, B); + removeWithCollision(B, A, C); + removeWithCollision(B, C, A); + removeWithCollision(C, A, B); + removeWithCollision(C, B, A); + }); + function addValuesCollision2() { + const hashTable = new HashTableLinearProbing(); + expect(hashTable.put(')', 'parenthesis@email.com')).to.equal(true); + expect(hashTable.put(A, `${A}@email.com`)).to.equal(true); + expect(hashTable.put('+', 'plus@email.com')).to.equal(true); + expect(hashTable.put(B, `${B}@email.com`)).to.equal(true); + expect(hashTable.put(',', 'comma@email.com')).to.equal(true); + expect(hashTable.put(C, `${C}@email.com`)).to.equal(true); + expect(hashTable.put('-', 'minus@email.com')).to.equal(true); + expect(hashTable.put('0', 'zero@email.com')).to.equal(true); + const expectedHash = 5; + expect(hashTable.hashCode(A)).to.equal(expectedHash); + expect(hashTable.hashCode(B)).to.equal(expectedHash); + expect(hashTable.hashCode(C)).to.equal(expectedHash); + expect(hashTable.hashCode(')')).to.equal(4); + expect(hashTable.hashCode('+')).to.equal(6); + expect(hashTable.hashCode(',')).to.equal(7); + expect(hashTable.hashCode('-')).to.equal(8); + expect(hashTable.hashCode('0')).to.equal(11); + expect(hashTable.size()).to.equal(8); + const table = hashTable.getTable(); + expect(table[4].key).to.equal(')'); + expect(table[5].key).to.equal(A); + expect(table[6].key).to.equal('+'); + expect(table[7].key).to.equal(B); + expect(table[8].key).to.equal(','); + expect(table[9].key).to.equal(C); + expect(table[10].key).to.equal('-'); + expect(table[11].key).to.equal('0'); + return hashTable; + } + function verifyOtherKeys(hashTable) { + expect(hashTable.get(')')).to.not.equal(undefined); + expect(hashTable.get('+')).to.not.equal(undefined); + expect(hashTable.get(',')).to.not.equal(undefined); + expect(hashTable.get('-')).to.not.equal(undefined); + expect(hashTable.get('0')).to.not.equal(undefined); + } + function removeWithCollision2(a, b, c) { + const hashTable = addValuesCollision2(); + expect(hashTable.remove(a)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.not.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + verifyOtherKeys(hashTable); + expect(hashTable.remove(b)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + verifyOtherKeys(hashTable); + expect(hashTable.remove(c)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.equal(undefined); + verifyOtherKeys(hashTable); + } + it('removes elements with collisions: scenario 2', () => { + // test all possibilities for removal + removeWithCollision2(A, B, C); + removeWithCollision2(A, C, B); + removeWithCollision2(B, A, C); + removeWithCollision2(B, C, A); + removeWithCollision2(C, A, B); + removeWithCollision2(C, B, A); + }); + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableLinearProbing(); + expect(hashTable.toString()).to.equal(''); + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableLinearProbing(); + hashTable.put('el1', 1); + expect(hashTable.toString()).to.equal('{36 => [#el1: 1]}'); + hashTable.put('el2', 2); + expect(hashTable.toString()).to.equal('{0 => [#el2: 2]},{36 => [#el1: 1]}'); + }); + it('returns toString objects without collisions', () => { + const hashTable = new HashTableLinearProbing(); + let myObj = new MyObj(1, 2); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]}'); + myObj = new MyObj(3, 4); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]},{5 => [#3|4: 3|4]}'); + }); + it('returns toString with collisions', () => { + const hashTable = new HashTableLinearProbing(); + expect(hashTable.toString()).to.equal(''); + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + hashTable.put(1, 10); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]},{3 => [#1: 10]}'); + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); +}); diff --git a/test/js/data-structures/hash-table-separate-chaining.spec.js b/test/js/data-structures/hash-table-separate-chaining.spec.js new file mode 100644 index 00000000..2066c2d0 --- /dev/null +++ b/test/js/data-structures/hash-table-separate-chaining.spec.js @@ -0,0 +1,269 @@ +import 'mocha'; +import { expect } from 'chai'; +import { HashTableSeparateChaining } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('HashTableSeparateChaining', () => { + const A = 'Jonathan'; + const B = 'Jamie'; + const C = 'Sue'; + it('starts empty', () => { + const hashTable = new HashTableSeparateChaining(); + expect(hashTable.size()).to.equal(0); + expect(hashTable.isEmpty()).to.equal(true); + }); + it('generates hashcode', () => { + // numbers + let hashTable = new HashTableSeparateChaining(); + expect(hashTable.hashCode(1)).to.equal(1); + expect(hashTable.hashCode(10)).to.equal(10); + expect(hashTable.hashCode(100)).to.equal(100); + expect(hashTable.hashCode(1000)).to.equal(1000); + // strings + hashTable = new HashTableSeparateChaining(); + expect(hashTable.hashCode('1')).to.equal(12); + expect(hashTable.hashCode('10')).to.equal(23); + expect(hashTable.hashCode('100')).to.equal(34); + expect(hashTable.hashCode('1000')).to.equal(8); + expect(hashTable.hashCode('a')).to.equal(23); + expect(hashTable.hashCode('A')).to.equal(28); + expect(hashTable.hashCode('Aba')).to.equal(1); + // objects + hashTable = new HashTableSeparateChaining(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + } + expect(hashTable.hashCode(myObjList[0])).to.equal(1); + expect(hashTable.hashCode(myObjList[1])).to.equal(3); + expect(hashTable.hashCode(myObjList[2])).to.equal(5); + expect(hashTable.hashCode(myObjList[3])).to.equal(7); + expect(hashTable.hashCode(myObjList[4])).to.equal(9); + }); + it('puts undefined and null keys and values', () => { + const hashTable = new HashTableSeparateChaining(); + expect(hashTable.put('undefined', undefined)).to.equal(false); + expect(hashTable.get('undefined')).to.equal(undefined); + expect(hashTable.put('undefined', 1)).to.equal(true); + expect(hashTable.get('undefined')).to.equal(1); + expect(hashTable.put('null', null)).to.equal(false); + expect(hashTable.get('null')).to.equal(undefined); + expect(hashTable.put('null', 1)).to.equal(true); + expect(hashTable.get('null')).to.equal(1); + hashTable.clear(); + expect(hashTable.put(undefined, undefined)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + expect(hashTable.put(undefined, 1)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + expect(hashTable.put(null, null)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + expect(hashTable.put(null, 1)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + }); + it('puts values with number key without collisions', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTableSeparateChaining(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + const linkedList = table[i]; + expect(linkedList.size()).to.equal(1); + const valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(i); + expect(valuePair.element.value).to.equal(i); + } + }); + it('puts values with string key without collisions', () => { + const hashTable = new HashTableSeparateChaining(); + expect(hashTable.put('1', 1)).to.equal(true); + expect(hashTable.put('10', 10)).to.equal(true); + expect(hashTable.put('100', 100)).to.equal(true); + expect(hashTable.put('1000', 1000)).to.equal(true); + const table = hashTable.getTable(); + let linkedList = table[12]; + expect(linkedList.size()).to.equal(1); + let valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal('1'); + expect(valuePair.element.value).to.equal(1); + linkedList = table[23]; // eslint-disable-line prefer-destructuring + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal('10'); + expect(valuePair.element.value).to.equal(10); + linkedList = table[34]; // eslint-disable-line prefer-destructuring + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal('100'); + expect(valuePair.element.value).to.equal(100); + linkedList = table[8]; // eslint-disable-line prefer-destructuring + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal('1000'); + expect(valuePair.element.value).to.equal(1000); + }); + it('puts values with object key without collisions', () => { + const hashTable = new HashTableSeparateChaining(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + expect(hashTable.put(myObjList[i - 1], myObjList[i - 1])).to.equal(true); + } + const table = hashTable.getTable(); + let linkedList = table[1]; + expect(linkedList.size()).to.equal(1); + let valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(myObjList[0]); + expect(valuePair.element.value).to.equal(myObjList[0]); + linkedList = table[3]; // eslint-disable-line prefer-destructuring + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(myObjList[1]); + expect(valuePair.element.value).to.equal(myObjList[1]); + linkedList = table[5]; // eslint-disable-line prefer-destructuring + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(myObjList[2]); + expect(valuePair.element.value).to.equal(myObjList[2]); + linkedList = table[7]; // eslint-disable-line prefer-destructuring + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(myObjList[3]); + expect(valuePair.element.value).to.equal(myObjList[3]); + linkedList = table[9]; // eslint-disable-line prefer-destructuring + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(myObjList[4]); + expect(valuePair.element.value).to.equal(myObjList[4]); + }); + it('puts values with collisions', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTableSeparateChaining(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 10)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 2); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 100)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 3); + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + const linkedList = table[i]; + expect(linkedList.size()).to.equal(3); + let valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(i); + expect(valuePair.element.value).to.equal(i); + valuePair = valuePair.next; + expect(valuePair.element.key).to.equal(i); + expect(valuePair.element.value).to.equal(i + 10); + valuePair = valuePair.next; + expect(valuePair.element.key).to.equal(i); + expect(valuePair.element.value).to.equal(i + 100); + } + }); + it('removes elements without collisions', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTableSeparateChaining(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(true); + } + // elements do not exist + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(false); + } + expect(hashTable.isEmpty()).to.equal(true); + }); + function addValuesCollision() { + const hashTable = new HashTableSeparateChaining(); + expect(hashTable.put(A, `${A}@email.com`)).to.equal(true); + expect(hashTable.put(B, `${B}@email.com`)).to.equal(true); + expect(hashTable.put(C, `${C}@email.com`)).to.equal(true); + expect(hashTable.size()).to.equal(3); + const expectedHash = 5; + expect(hashTable.hashCode(A)).to.equal(expectedHash); + expect(hashTable.hashCode(B)).to.equal(expectedHash); + expect(hashTable.hashCode(C)).to.equal(expectedHash); + expect(hashTable.getTable()[expectedHash].size()).to.equal(3); + return hashTable; + } + function removeWithCollision(a, b, c) { + const hashTable = addValuesCollision(); + expect(hashTable.remove(a)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.not.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + expect(hashTable.remove(b)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + expect(hashTable.remove(c)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.equal(undefined); + expect(hashTable.isEmpty()).to.equal(true); + } + it('removes elements with collisions', () => { + // test all possibilities for removal + removeWithCollision(A, B, C); + removeWithCollision(A, C, B); + removeWithCollision(B, A, C); + removeWithCollision(B, C, A); + removeWithCollision(C, A, B); + removeWithCollision(C, B, A); + }); + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableSeparateChaining(); + expect(hashTable.toString()).to.equal(''); + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableSeparateChaining(); + hashTable.put('el1', 1); + expect(hashTable.toString()).to.equal('{36 => [#el1: 1]}'); + hashTable.put('el2', 2); + expect(hashTable.toString()).to.equal('{0 => [#el2: 2]},{36 => [#el1: 1]}'); + }); + it('returns toString objects without collisions', () => { + const hashTable = new HashTableSeparateChaining(); + let myObj = new MyObj(1, 2); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]}'); + myObj = new MyObj(3, 4); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]},{5 => [#3|4: 3|4]}'); + }); + it('returns toString with collisions', () => { + const hashTable = new HashTableSeparateChaining(); + expect(hashTable.toString()).to.equal(''); + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + hashTable.put(1, 10); + expect(hashTable.toString()).to.equal('{1 => [#1: 1],[#1: 10]},{2 => [#2: 2]}'); + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); +}); diff --git a/test/js/data-structures/hash-table.spec.js b/test/js/data-structures/hash-table.spec.js new file mode 100644 index 00000000..862c9be0 --- /dev/null +++ b/test/js/data-structures/hash-table.spec.js @@ -0,0 +1,161 @@ +import 'mocha'; +import { expect } from 'chai'; +import { HashTable } from '../../../src/js/index'; +import MyObj from './my-obj'; + +describe('HashTable', () => { + it('starts empty', () => { + const hashTable = new HashTable(); + expect(hashTable.size()).to.equal(0); + expect(hashTable.isEmpty()).to.equal(true); + }); + it('generates hashcode', () => { + // numbers + let hashTable = new HashTable(); + expect(hashTable.hashCode(1)).to.equal(1); + expect(hashTable.hashCode(10)).to.equal(10); + expect(hashTable.hashCode(100)).to.equal(100); + expect(hashTable.hashCode(1000)).to.equal(1000); + // strings + hashTable = new HashTable(); + expect(hashTable.hashCode('1')).to.equal(12); + expect(hashTable.hashCode('10')).to.equal(23); + expect(hashTable.hashCode('100')).to.equal(34); + expect(hashTable.hashCode('1000')).to.equal(8); + expect(hashTable.hashCode('a')).to.equal(23); + expect(hashTable.hashCode('A')).to.equal(28); + expect(hashTable.hashCode('Aba')).to.equal(1); + // objects + hashTable = new HashTable(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + } + expect(hashTable.hashCode(myObjList[0])).to.equal(1); + expect(hashTable.hashCode(myObjList[1])).to.equal(3); + expect(hashTable.hashCode(myObjList[2])).to.equal(5); + expect(hashTable.hashCode(myObjList[3])).to.equal(7); + expect(hashTable.hashCode(myObjList[4])).to.equal(9); + }); + it('puts undefined and null keys and values', () => { + const hashTable = new HashTable(); + expect(hashTable.put('undefined', undefined)).to.equal(false); + expect(hashTable.get('undefined')).to.equal(undefined); + expect(hashTable.put('undefined', 1)).to.equal(true); + expect(hashTable.get('undefined')).to.equal(1); + expect(hashTable.put('null', null)).to.equal(false); + expect(hashTable.get('null')).to.equal(undefined); + expect(hashTable.put('null', 1)).to.equal(true); + expect(hashTable.get('null')).to.equal(1); + hashTable.clear(); + expect(hashTable.put(undefined, undefined)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + expect(hashTable.put(undefined, 1)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + expect(hashTable.put(null, null)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + expect(hashTable.put(null, 1)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + }); + it('puts values with number key', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTable(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + expect(table[i].key).to.equal(i); + expect(table[i].value).to.equal(i); + } + }); + it('puts values with string key', () => { + const hashTable = new HashTable(); + expect(hashTable.put('1', 1)).to.equal(true); + expect(hashTable.put('10', 10)).to.equal(true); + expect(hashTable.put('100', 100)).to.equal(true); + expect(hashTable.put('1000', 1000)).to.equal(true); + const table = hashTable.getTable(); + expect(table[12].key).to.equal('1'); + expect(table[12].value).to.equal(1); + expect(table[23].key).to.equal('10'); + expect(table[23].value).to.equal(10); + expect(table[34].key).to.equal('100'); + expect(table[34].value).to.equal(100); + expect(table[8].key).to.equal('1000'); + expect(table[8].value).to.equal(1000); + }); + it('puts values with object key', () => { + const hashTable = new HashTable(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + expect(hashTable.put(myObjList[i - 1], myObjList[i - 1])).to.equal(true); + } + const table = hashTable.getTable(); + expect(table[1].key).to.equal(myObjList[0]); + expect(table[1].value).to.equal(myObjList[0]); + expect(table[3].key).to.equal(myObjList[1]); + expect(table[3].value).to.equal(myObjList[1]); + expect(table[5].key).to.equal(myObjList[2]); + expect(table[5].value).to.equal(myObjList[2]); + expect(table[7].key).to.equal(myObjList[3]); + expect(table[7].value).to.equal(myObjList[3]); + expect(table[9].key).to.equal(myObjList[4]); + expect(table[9].value).to.equal(myObjList[4]); + }); + it('does NOT handle collision, replaces values', () => { + const hashTable = new HashTable(); + for (let i = 0; i < 5; i++) { + expect(hashTable.put(1, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(1); + }); + it('removes elements', () => { + const min = 1; + const max = 5; + const size = (max - min) + 1; + const hashTable = new HashTable(); + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(true); + } + // elements do not exist + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(false); + } + expect(hashTable.isEmpty()).to.equal(true); + }); + it('returns toString primitive types', () => { + const hashTable = new HashTable(); + expect(hashTable.toString()).to.equal(''); + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); + it('returns toString primitive types', () => { + const hashTable = new HashTable(); + hashTable.put('el1', 1); + expect(hashTable.toString()).to.equal('{36 => [#el1: 1]}'); + hashTable.put('el2', 2); + expect(hashTable.toString()).to.equal('{0 => [#el2: 2]},{36 => [#el1: 1]}'); + }); + it('returns toString objects', () => { + const hashTable = new HashTable(); + let myObj = new MyObj(1, 2); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]}'); + myObj = new MyObj(3, 4); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]},{5 => [#3|4: 3|4]}'); + }); +}); diff --git a/test/ts/data-structures/dictionary.spec.ts b/test/ts/data-structures/dictionary.spec.ts new file mode 100644 index 00000000..28bf6615 --- /dev/null +++ b/test/ts/data-structures/dictionary.spec.ts @@ -0,0 +1,335 @@ +import 'mocha'; +import { expect } from 'chai'; +import { Dictionary } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('Dictionary', () => { + let dictionary: Dictionary; + + beforeEach(() => { + dictionary = new Dictionary(); + }); + + it('starts empty', () => { + expect(dictionary.size()).to.equal(0); + expect(dictionary.isEmpty()).to.equal(true); + }); + + it('sets undefined and null keys and values', () => { + const dict = new Dictionary(); + + expect(dict.set('undefined', undefined)).to.equal(false); + expect(dict.get('undefined')).to.equal(undefined); + + expect(dict.set('undefined', 1)).to.equal(true); + expect(dict.get('undefined')).to.equal(1); + + expect(dict.set('null', null)).to.equal(false); + expect(dict.get('null')).to.equal(undefined); + + expect(dict.set('null', 1)).to.equal(true); + expect(dict.get('null')).to.equal(1); + + dict.clear(); + expect(dict.set(undefined, undefined)).to.equal(false); + expect(dict.get(undefined)).to.equal(undefined); + + expect(dict.set(undefined, 1)).to.equal(false); + expect(dict.get(undefined)).to.equal(undefined); + + expect(dict.set(null, null)).to.equal(false); + expect(dict.get(null)).to.equal(undefined); + + expect(dict.set(null, 1)).to.equal(false); + expect(dict.get(null)).to.equal(undefined); + }); + + it('sets values with string key', () => { + const dict = new Dictionary(); + const min = 1; + const max = 5; + const size = max - min + 1; + + for (let i = min; i <= max; i++) { + expect(dict.set(`${i}`, i)).to.equal(true); + } + expect(dict.size()).to.equal(size); + + const keys = dict.keys(); + expect(keys.length).to.equal(size); + for (let i = 0; i < keys.length; i++) { + expect(keys[i]).to.equal((i + 1).toString(10)); + } + + dict.set('a', 1); + expect(dict.get('a')).to.equal(1); + }); + + it('sets values with number key', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + + for (let i = min; i <= max; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + expect(dictionary.size()).to.equal(size); + + const keys = dictionary.keys(); + expect(keys.length).to.equal(size); + for (let i = 0; i < keys.length; i++) { + expect(keys[i]).to.equal((i + 1)); + } + }); + + it('sets values with object', () => { + const dict = new Dictionary(); + const min = 0; + const max = 5; + const size = max - min; + const myObjList = []; + + for (let i = min; i < max; i++) { + myObjList.push(new MyObj(i, (i + 1))); + } + + for (let i = min; i < max; i++) { + expect(dict.set(myObjList[i], myObjList[i])).to.equal(true); + } + expect(dict.size()).to.equal(size); + + for (let i = min; i < max; i++) { + expect(dict.get(myObjList[i])).to.equal(myObjList[i]); + } + + const keys = dict.keys(); + expect(keys.length).to.equal(size); + for (let i = 0; i < keys.length; i++) { + expect(keys[i]).to.equal(myObjList[i]); + } + + const values = dict.values(); + expect(values.length).to.equal(size); + for (let i = 0; i < values.length; i++) { + expect(values[i]).to.equal(myObjList[i]); + } + }); + + function customToString(key: MyObj) { + return `####${key.toString()}`; + } + + it('sets values with custom toString function', () => { + const dict = new Dictionary(customToString); + const min = 0; + const max = 5; + const size = max - min; + const myObjList = []; + + for (let i = min; i < max; i++) { + myObjList.push(new MyObj(i, (i + 1))); + } + + for (let i = min; i < max; i++) { + expect(dict.set(myObjList[i], myObjList[i])).to.equal(true); + } + expect(dict.size()).to.equal(size); + + for (let i = min; i < max; i++) { + expect(dict.get(myObjList[i])).to.equal(myObjList[i]); + } + + const keys = dict.keys(); + expect(keys.length).to.equal(size); + for (let i = 0; i < keys.length; i++) { + expect(keys[i]).to.equal(myObjList[i]); + } + + const values = dict.values(); + expect(values.length).to.equal(size); + for (let i = 0; i < values.length; i++) { + expect(values[i]).to.equal(myObjList[i]); + } + }); + + it('removes elements', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + + for (let i = min; i <= max; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + expect(dictionary.size()).to.equal(size); + + for (let i = min; i <= max; i++) { + expect(dictionary.remove(i)).to.equal(true); + } + + // elements do not exist + for (let i = min; i <= max; i++) { + expect(dictionary.remove(i)).to.equal(false); + } + + expect(dictionary.isEmpty()).to.equal(true); + }); + + it('returns the correct size', () => { + expect(dictionary.size()).to.equal(0); + + const max = 5; + + for (let i = 1; i < max; i++) { + dictionary.set(i, i); + expect(dictionary.size()).to.equal(i); + } + for (let i = 1; i < max; i++) { + dictionary.remove(i); + expect(dictionary.size()).to.equal(max - i - 1); + } + + expect(dictionary.size()).to.equal(0); + expect(dictionary.isEmpty()).to.equal(true); + }); + + it('returns if element exists', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + + for (let i = min; i <= max; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + expect(dictionary.size()).to.equal(size); + + for (let i = min; i <= max; i++) { + expect(dictionary.hasKey(i)).to.equal(true); + expect(dictionary.remove(i)).to.equal(true); + expect(dictionary.hasKey(i)).to.equal(false); + } + }); + + it('returns if it is empty', () => { + expect(dictionary.isEmpty()).to.equal(true); + + for (let i = 1; i < 5; i++) { + dictionary.set(i, i); + expect(dictionary.isEmpty()).to.equal(false); + } + + for (let i = 1; i < 5; i++) { + dictionary.remove(i); + expect(dictionary.isEmpty()).to.equal(!(i < 4)); + } + + expect(dictionary.size()).to.equal(0); + expect(dictionary.isEmpty()).to.equal(true); + }); + + it('clears the dictionary', () => { + dictionary.clear(); + expect(dictionary.isEmpty()).to.equal(true); + + dictionary.set(1, 1); + dictionary.set(2, 2); + + dictionary.clear(); + expect(dictionary.isEmpty()).to.equal(true); + }); + + it('returns values, keys and value pairs', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + + for (let i = min; i <= max; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + expect(dictionary.size()).to.equal(size); + + const keys = dictionary.keys(); + const values = dictionary.values(); + const valuePairs = dictionary.keyValues(); + expect(keys.length).to.equal(size); + expect(values.length).to.equal(size); + expect(valuePairs.length).to.equal(size); + for (let i = 0; i < keys.length; i++) { + expect(keys[i]).to.equal((i + 1)); + expect(values[i]).to.equal((i + 1)); + expect(valuePairs[i].key).to.equal((i + 1)); + expect(valuePairs[i].value).to.equal((i + 1)); + } + }); + + it('allows to iterate with forEach', () => { + for (let i = 1; i <= 5; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + + dictionary.forEach((k, v) => { + expect(dictionary.hasKey(k)).to.equal(true); + expect(dictionary.get(k)).to.equal(v); + }); + }); + + it('allows to iterate with forEach and interrupt', () => { + for (let i = 1; i <= 5; i++) { + expect(dictionary.set(i, i)).to.equal(true); + } + + const size = dictionary.keys().length; + + let index = 1; + dictionary.forEach((k, v) => { + expect(dictionary.hasKey(k)).to.equal(true); + expect(dictionary.get(k)).to.equal(v); + index++; + }); + expect(index).to.equal(size + 1); + + index = 1; + dictionary.forEach((k, v) => { + expect(dictionary.hasKey(k)).to.equal(true); + expect(dictionary.get(k)).to.equal(v); + index++; + return !(k % 3 === 0); + }); + expect(index).to.equal(size - 1); + }); + + it('returns toString primitive types', () => { + expect(dictionary.toString()).to.equal(''); + + dictionary.set(1, 1); + expect(dictionary.toString()).to.equal('[#1: 1]'); + + dictionary.set(2, 2); + expect(dictionary.toString()).to.equal('[#1: 1],[#2: 2]'); + + dictionary.clear(); + expect(dictionary.toString()).to.equal(''); + }); + + it('returns toString primitive types: string', () => { + const dict = new Dictionary(); + dict.set('el1', 1); + expect(dict.toString()).to.equal('[#el1: 1]'); + + dict.set('el2', 2); + expect(dict.toString()).to.equal('[#el1: 1],[#el2: 2]'); + }); + + it('returns toString objects', () => { + const dict = new Dictionary(); + expect(dict.toString()).to.equal(''); + + let myObj = new MyObj(1, 2); + dict.set(myObj, myObj); + expect(dict.toString()).to.equal('[#1|2: 1|2]'); + + myObj = new MyObj(3, 4); + dict.set(myObj, myObj); + expect(dict.toString()).to.equal('[#1|2: 1|2],[#3|4: 3|4]'); + }); + +}); diff --git a/test/ts/data-structures/hash-table-linear-probing-lazy.spec.ts b/test/ts/data-structures/hash-table-linear-probing-lazy.spec.ts new file mode 100644 index 00000000..7d004349 --- /dev/null +++ b/test/ts/data-structures/hash-table-linear-probing-lazy.spec.ts @@ -0,0 +1,388 @@ +import 'mocha'; +import { expect } from 'chai'; +import { HashTableLinearProbingLazy } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('HashTableLinearProbingLazy', () => { + const A = 'Jonathan'; + const B = 'Jamie'; + const C = 'Sue'; + + it('starts empty', () => { + const hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.size()).to.equal(0); + expect(hashTable.isEmpty()).to.equal(true); + }); + + it('generates hashcode', () => { + // numbers + let hashTable: any = new HashTableLinearProbingLazy(); + expect(hashTable.hashCode(1)).to.equal(1); + expect(hashTable.hashCode(10)).to.equal(10); + expect(hashTable.hashCode(100)).to.equal(100); + expect(hashTable.hashCode(1000)).to.equal(1000); + + // strings + hashTable = new HashTableLinearProbingLazy(); + expect(hashTable.hashCode('1')).to.equal(12); + expect(hashTable.hashCode('10')).to.equal(23); + expect(hashTable.hashCode('100')).to.equal(34); + expect(hashTable.hashCode('1000')).to.equal(8); + expect(hashTable.hashCode('a')).to.equal(23); + expect(hashTable.hashCode('A')).to.equal(28); + expect(hashTable.hashCode('Aba')).to.equal(1); + + // objects + hashTable = new HashTableLinearProbingLazy(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + } + expect(hashTable.hashCode(myObjList[0])).to.equal(1); + expect(hashTable.hashCode(myObjList[1])).to.equal(3); + expect(hashTable.hashCode(myObjList[2])).to.equal(5); + expect(hashTable.hashCode(myObjList[3])).to.equal(7); + expect(hashTable.hashCode(myObjList[4])).to.equal(9); + }); + + it('puts undefined and null keys and values', () => { + const hashTable = new HashTableLinearProbingLazy(); + + expect(hashTable.put('undefined', undefined)).to.equal(false); + expect(hashTable.get('undefined')).to.equal(undefined); + + expect(hashTable.put('undefined', 1)).to.equal(true); + expect(hashTable.get('undefined')).to.equal(1); + + expect(hashTable.put('null', null)).to.equal(false); + expect(hashTable.get('null')).to.equal(undefined); + + expect(hashTable.put('null', 1)).to.equal(true); + expect(hashTable.get('null')).to.equal(1); + + hashTable.clear(); + expect(hashTable.put(undefined, undefined)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + + expect(hashTable.put(undefined, 1)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + + expect(hashTable.put(null, null)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + + expect(hashTable.put(null, 1)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + }); + + it('puts values with number key without collisions', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTableLinearProbingLazy(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + expect(table[i].key).to.equal(i); + expect(table[i].value).to.equal(i); + } + }); + + it('puts values with string key without collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + + expect(hashTable.put('1', 1)).to.equal(true); + expect(hashTable.put('10', 10)).to.equal(true); + expect(hashTable.put('100', 100)).to.equal(true); + expect(hashTable.put('1000', 1000)).to.equal(true); + + const table = hashTable.getTable(); + + expect(table[12].key).to.equal('1'); + expect(table[12].value).to.equal(1); + + expect(table[23].key).to.equal('10'); + expect(table[23].value).to.equal(10); + + expect(table[34].key).to.equal('100'); + expect(table[34].value).to.equal(100); + + expect(table[8].key).to.equal('1000'); + expect(table[8].value).to.equal(1000); + }); + + it('puts values with object key without collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + expect(hashTable.put(myObjList[i - 1], myObjList[i - 1])).to.equal(true); + } + + const table = hashTable.getTable(); + + expect(table[1].key).to.equal(myObjList[0]); + expect(table[1].value).to.equal(myObjList[0]); + + expect(table[3].key).to.equal(myObjList[1]); + expect(table[3].value).to.equal(myObjList[1]); + + expect(table[5].key).to.equal(myObjList[2]); + expect(table[5].value).to.equal(myObjList[2]); + + expect(table[7].key).to.equal(myObjList[3]); + expect(table[7].value).to.equal(myObjList[3]); + + expect(table[9].key).to.equal(myObjList[4]); + expect(table[9].value).to.equal(myObjList[4]); + }); + + function addValuesCollision() { + const hashTable = new HashTableLinearProbingLazy(); + + expect(hashTable.put(A, `${A}@email.com`)).to.equal(true); + expect(hashTable.put(B, `${B}@email.com`)).to.equal(true); + expect(hashTable.put(C, `${C}@email.com`)).to.equal(true); + expect(hashTable.size()).to.equal(3); + + const expectedHash = 5; + expect(hashTable.hashCode(A)).to.equal(expectedHash); + expect(hashTable.hashCode(B)).to.equal(expectedHash); + expect(hashTable.hashCode(C)).to.equal(expectedHash); + + expect(hashTable.size()).to.equal(3); + + return hashTable; + } + + it('puts values with collisions', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTableLinearProbingLazy(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 10)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 2); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 100)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 3); + + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + expect(table[i].key).to.equal(i); + expect(table[i].value).to.equal(i); + + expect(table[i + size].key).to.equal(i); + expect(table[i + size].value).to.equal(i + 10); + + expect(table[i + size * 2].key).to.equal(i); + expect(table[i + size * 2].value).to.equal(i + 100); + } + + addValuesCollision(); + }); + + it('removes elements without collisions', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTableLinearProbingLazy(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(true); + } + + // elements do not exist + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(false); + } + + expect(hashTable.isEmpty()).to.equal(true); + }); + + function removeWithCollision(a: string, b: string, c: string) { + const hashTable = addValuesCollision(); + + expect(hashTable.remove(a)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.not.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + + expect(hashTable.remove(b)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + + expect(hashTable.remove(c)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.equal(undefined); + + expect(hashTable.isEmpty()).to.equal(true); + } + + it('removes elements with collisions: scenario 1', () => { + // test all possibilities for removal + removeWithCollision(A, B, C); + removeWithCollision(A, C, B); + removeWithCollision(B, A, C); + removeWithCollision(B, C, A); + removeWithCollision(C, A, B); + removeWithCollision(C, B, A); + }); + + function addValuesCollision2() { + const hashTable = new HashTableLinearProbingLazy(); + + expect(hashTable.put(')', `parenthesis@email.com`)).to.equal(true); + expect(hashTable.put(A, `${A}@email.com`)).to.equal(true); + expect(hashTable.put('+', `plus@email.com`)).to.equal(true); + expect(hashTable.put(B, `${B}@email.com`)).to.equal(true); + expect(hashTable.put(',', `comma@email.com`)).to.equal(true); + expect(hashTable.put(C, `${C}@email.com`)).to.equal(true); + expect(hashTable.put('-', `minus@email.com`)).to.equal(true); + expect(hashTable.put('0', `zero@email.com`)).to.equal(true); + + const expectedHash = 5; + expect(hashTable.hashCode(A)).to.equal(expectedHash); + expect(hashTable.hashCode(B)).to.equal(expectedHash); + expect(hashTable.hashCode(C)).to.equal(expectedHash); + expect(hashTable.hashCode(')')).to.equal(4); + expect(hashTable.hashCode('+')).to.equal(6); + expect(hashTable.hashCode(',')).to.equal(7); + expect(hashTable.hashCode('-')).to.equal(8); + expect(hashTable.hashCode('0')).to.equal(11); + + expect(hashTable.size()).to.equal(8); + + const table = hashTable.getTable(); + expect(table[4].key).to.equal(')'); + expect(table[5].key).to.equal(A); + expect(table[6].key).to.equal('+'); + expect(table[7].key).to.equal(B); + expect(table[8].key).to.equal(','); + expect(table[9].key).to.equal(C); + expect(table[10].key).to.equal('-'); + expect(table[11].key).to.equal('0'); + + return hashTable; + } + + function verifyOtherKeys(hashTable: HashTableLinearProbingLazy) { + expect(hashTable.get(')')).to.not.equal(undefined); + expect(hashTable.get('+')).to.not.equal(undefined); + expect(hashTable.get(',')).to.not.equal(undefined); + expect(hashTable.get('-')).to.not.equal(undefined); + expect(hashTable.get('0')).to.not.equal(undefined); + } + + function removeWithCollision2(a: string, b: string, c: string) { + const hashTable = addValuesCollision2(); + + expect(hashTable.remove(a)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.not.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + verifyOtherKeys(hashTable); + + expect(hashTable.remove(b)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + verifyOtherKeys(hashTable); + + expect(hashTable.remove(c)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.equal(undefined); + verifyOtherKeys(hashTable); + } + + it('removes elements with collisions: scenario 2', () => { + // test all possibilities for removal + removeWithCollision2(A, B, C); + removeWithCollision2(A, C, B); + removeWithCollision2(B, A, C); + removeWithCollision2(B, C, A); + removeWithCollision2(C, A, B); + removeWithCollision2(C, B, A); + }); + + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + + expect(hashTable.toString()).to.equal(''); + + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); + + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + + hashTable.put('el1', 1); + expect(hashTable.toString()).to.equal('{36 => [#el1: 1]}'); + + hashTable.put('el2', 2); + expect(hashTable.toString()).to.equal('{0 => [#el2: 2]},{36 => [#el1: 1]}'); + }); + + it('returns toString objects without collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + + let myObj = new MyObj(1, 2); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]}'); + + myObj = new MyObj(3, 4); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal( + '{1 => [#1|2: 1|2]},{5 => [#3|4: 3|4]}' + ); + }); + + it('returns toString with collisions', () => { + const hashTable = new HashTableLinearProbingLazy(); + + expect(hashTable.toString()).to.equal(''); + + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + + hashTable.put(1, 10); + expect(hashTable.toString()).to.equal( + '{1 => [#1: 1]},{2 => [#2: 2]},{3 => [#1: 10]}' + ); + + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); +}); diff --git a/test/ts/data-structures/hash-table-linear-probing.spec.ts b/test/ts/data-structures/hash-table-linear-probing.spec.ts new file mode 100644 index 00000000..77ed340f --- /dev/null +++ b/test/ts/data-structures/hash-table-linear-probing.spec.ts @@ -0,0 +1,388 @@ +import 'mocha'; +import { expect } from 'chai'; +import { HashTableLinearProbing } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('HashTableLinearProbing', () => { + const A = 'Jonathan'; + const B = 'Jamie'; + const C = 'Sue'; + + it('starts empty', () => { + const hashTable = new HashTableLinearProbing(); + expect(hashTable.size()).to.equal(0); + expect(hashTable.isEmpty()).to.equal(true); + }); + + it('generates hashcode', () => { + // numbers + let hashTable: any = new HashTableLinearProbing(); + expect(hashTable.hashCode(1)).to.equal(1); + expect(hashTable.hashCode(10)).to.equal(10); + expect(hashTable.hashCode(100)).to.equal(100); + expect(hashTable.hashCode(1000)).to.equal(1000); + + // strings + hashTable = new HashTableLinearProbing(); + expect(hashTable.hashCode('1')).to.equal(12); + expect(hashTable.hashCode('10')).to.equal(23); + expect(hashTable.hashCode('100')).to.equal(34); + expect(hashTable.hashCode('1000')).to.equal(8); + expect(hashTable.hashCode('a')).to.equal(23); + expect(hashTable.hashCode('A')).to.equal(28); + expect(hashTable.hashCode('Aba')).to.equal(1); + + // objects + hashTable = new HashTableLinearProbing(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + } + expect(hashTable.hashCode(myObjList[0])).to.equal(1); + expect(hashTable.hashCode(myObjList[1])).to.equal(3); + expect(hashTable.hashCode(myObjList[2])).to.equal(5); + expect(hashTable.hashCode(myObjList[3])).to.equal(7); + expect(hashTable.hashCode(myObjList[4])).to.equal(9); + }); + + it('puts undefined and null keys and values', () => { + const hashTable = new HashTableLinearProbing(); + + expect(hashTable.put('undefined', undefined)).to.equal(false); + expect(hashTable.get('undefined')).to.equal(undefined); + + expect(hashTable.put('undefined', 1)).to.equal(true); + expect(hashTable.get('undefined')).to.equal(1); + + expect(hashTable.put('null', null)).to.equal(false); + expect(hashTable.get('null')).to.equal(undefined); + + expect(hashTable.put('null', 1)).to.equal(true); + expect(hashTable.get('null')).to.equal(1); + + hashTable.clear(); + expect(hashTable.put(undefined, undefined)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + + expect(hashTable.put(undefined, 1)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + + expect(hashTable.put(null, null)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + + expect(hashTable.put(null, 1)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + }); + + it('puts values with number key without collisions', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTableLinearProbing(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + expect(table[i].key).to.equal(i); + expect(table[i].value).to.equal(i); + } + }); + + it('puts values with string key without collisions', () => { + const hashTable = new HashTableLinearProbing(); + + expect(hashTable.put('1', 1)).to.equal(true); + expect(hashTable.put('10', 10)).to.equal(true); + expect(hashTable.put('100', 100)).to.equal(true); + expect(hashTable.put('1000', 1000)).to.equal(true); + + const table = hashTable.getTable(); + + expect(table[12].key).to.equal('1'); + expect(table[12].value).to.equal(1); + + expect(table[23].key).to.equal('10'); + expect(table[23].value).to.equal(10); + + expect(table[34].key).to.equal('100'); + expect(table[34].value).to.equal(100); + + expect(table[8].key).to.equal('1000'); + expect(table[8].value).to.equal(1000); + }); + + it('puts values with object key without collisions', () => { + const hashTable = new HashTableLinearProbing(); + + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + expect(hashTable.put(myObjList[i - 1], myObjList[i - 1])).to.equal(true); + } + + const table = hashTable.getTable(); + + expect(table[1].key).to.equal(myObjList[0]); + expect(table[1].value).to.equal(myObjList[0]); + + expect(table[3].key).to.equal(myObjList[1]); + expect(table[3].value).to.equal(myObjList[1]); + + expect(table[5].key).to.equal(myObjList[2]); + expect(table[5].value).to.equal(myObjList[2]); + + expect(table[7].key).to.equal(myObjList[3]); + expect(table[7].value).to.equal(myObjList[3]); + + expect(table[9].key).to.equal(myObjList[4]); + expect(table[9].value).to.equal(myObjList[4]); + }); + + function addValuesCollision() { + const hashTable = new HashTableLinearProbing(); + + expect(hashTable.put(A, `${A}@email.com`)).to.equal(true); + expect(hashTable.put(B, `${B}@email.com`)).to.equal(true); + expect(hashTable.put(C, `${C}@email.com`)).to.equal(true); + expect(hashTable.size()).to.equal(3); + + const expectedHash = 5; + expect(hashTable.hashCode(A)).to.equal(expectedHash); + expect(hashTable.hashCode(B)).to.equal(expectedHash); + expect(hashTable.hashCode(C)).to.equal(expectedHash); + + expect(hashTable.size()).to.equal(3); + + return hashTable; + } + + it('puts values with collisions', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTableLinearProbing(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 10)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 2); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 100)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 3); + + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + expect(table[i].key).to.equal(i); + expect(table[i].value).to.equal(i); + + expect(table[i + size].key).to.equal(i); + expect(table[i + size].value).to.equal(i + 10); + + expect(table[i + size * 2].key).to.equal(i); + expect(table[i + size * 2].value).to.equal(i + 100); + } + + addValuesCollision(); + }); + + it('removes elements without collisions', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTableLinearProbing(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(true); + } + + // elements do not exist + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(false); + } + + expect(hashTable.isEmpty()).to.equal(true); + }); + + function removeWithCollision(a: string, b: string, c: string) { + const hashTable = addValuesCollision(); + + expect(hashTable.remove(a)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.not.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + + expect(hashTable.remove(b)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + + expect(hashTable.remove(c)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.equal(undefined); + + expect(hashTable.isEmpty()).to.equal(true); + } + + it('removes elements with collisions: scenario 1', () => { + // test all possibilities for removal + removeWithCollision(A, B, C); + removeWithCollision(A, C, B); + removeWithCollision(B, A, C); + removeWithCollision(B, C, A); + removeWithCollision(C, A, B); + removeWithCollision(C, B, A); + }); + + function addValuesCollision2() { + const hashTable = new HashTableLinearProbing(); + + expect(hashTable.put(')', `parenthesis@email.com`)).to.equal(true); + expect(hashTable.put(A, `${A}@email.com`)).to.equal(true); + expect(hashTable.put('+', `plus@email.com`)).to.equal(true); + expect(hashTable.put(B, `${B}@email.com`)).to.equal(true); + expect(hashTable.put(',', `comma@email.com`)).to.equal(true); + expect(hashTable.put(C, `${C}@email.com`)).to.equal(true); + expect(hashTable.put('-', `minus@email.com`)).to.equal(true); + expect(hashTable.put('0', `zero@email.com`)).to.equal(true); + + const expectedHash = 5; + expect(hashTable.hashCode(A)).to.equal(expectedHash); + expect(hashTable.hashCode(B)).to.equal(expectedHash); + expect(hashTable.hashCode(C)).to.equal(expectedHash); + expect(hashTable.hashCode(')')).to.equal(4); + expect(hashTable.hashCode('+')).to.equal(6); + expect(hashTable.hashCode(',')).to.equal(7); + expect(hashTable.hashCode('-')).to.equal(8); + expect(hashTable.hashCode('0')).to.equal(11); + + expect(hashTable.size()).to.equal(8); + + const table = hashTable.getTable(); + expect(table[4].key).to.equal(')'); + expect(table[5].key).to.equal(A); + expect(table[6].key).to.equal('+'); + expect(table[7].key).to.equal(B); + expect(table[8].key).to.equal(','); + expect(table[9].key).to.equal(C); + expect(table[10].key).to.equal('-'); + expect(table[11].key).to.equal('0'); + + return hashTable; + } + + function verifyOtherKeys(hashTable: HashTableLinearProbing) { + expect(hashTable.get(')')).to.not.equal(undefined); + expect(hashTable.get('+')).to.not.equal(undefined); + expect(hashTable.get(',')).to.not.equal(undefined); + expect(hashTable.get('-')).to.not.equal(undefined); + expect(hashTable.get('0')).to.not.equal(undefined); + } + + function removeWithCollision2(a: string, b: string, c: string) { + const hashTable = addValuesCollision2(); + + expect(hashTable.remove(a)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.not.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + verifyOtherKeys(hashTable); + + expect(hashTable.remove(b)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + verifyOtherKeys(hashTable); + + expect(hashTable.remove(c)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.equal(undefined); + verifyOtherKeys(hashTable); + } + + it('removes elements with collisions: scenario 2', () => { + // test all possibilities for removal + removeWithCollision2(A, B, C); + removeWithCollision2(A, C, B); + removeWithCollision2(B, A, C); + removeWithCollision2(B, C, A); + removeWithCollision2(C, A, B); + removeWithCollision2(C, B, A); + }); + + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableLinearProbing(); + + expect(hashTable.toString()).to.equal(''); + + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); + + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableLinearProbing(); + + hashTable.put('el1', 1); + expect(hashTable.toString()).to.equal('{36 => [#el1: 1]}'); + + hashTable.put('el2', 2); + expect(hashTable.toString()).to.equal('{0 => [#el2: 2]},{36 => [#el1: 1]}'); + }); + + it('returns toString objects without collisions', () => { + const hashTable = new HashTableLinearProbing(); + + let myObj = new MyObj(1, 2); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]}'); + + myObj = new MyObj(3, 4); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal( + '{1 => [#1|2: 1|2]},{5 => [#3|4: 3|4]}' + ); + }); + + it('returns toString with collisions', () => { + const hashTable = new HashTableLinearProbing(); + + expect(hashTable.toString()).to.equal(''); + + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + + hashTable.put(1, 10); + expect(hashTable.toString()).to.equal( + '{1 => [#1: 1]},{2 => [#2: 2]},{3 => [#1: 10]}' + ); + + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); +}); diff --git a/test/ts/data-structures/hash-table-separate-chaining.spec.ts b/test/ts/data-structures/hash-table-separate-chaining.spec.ts new file mode 100644 index 00000000..b7f72524 --- /dev/null +++ b/test/ts/data-structures/hash-table-separate-chaining.spec.ts @@ -0,0 +1,343 @@ +import 'mocha'; +import { expect } from 'chai'; +import { HashTableSeparateChaining } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('HashTableSeparateChaining', () => { + const A = 'Jonathan'; + const B = 'Jamie'; + const C = 'Sue'; + + it('starts empty', () => { + const hashTable = new HashTableSeparateChaining(); + expect(hashTable.size()).to.equal(0); + expect(hashTable.isEmpty()).to.equal(true); + }); + + it('generates hashcode', () => { + // numbers + let hashTable: any = new HashTableSeparateChaining(); + expect(hashTable.hashCode(1)).to.equal(1); + expect(hashTable.hashCode(10)).to.equal(10); + expect(hashTable.hashCode(100)).to.equal(100); + expect(hashTable.hashCode(1000)).to.equal(1000); + + // strings + hashTable = new HashTableSeparateChaining(); + expect(hashTable.hashCode('1')).to.equal(12); + expect(hashTable.hashCode('10')).to.equal(23); + expect(hashTable.hashCode('100')).to.equal(34); + expect(hashTable.hashCode('1000')).to.equal(8); + expect(hashTable.hashCode('a')).to.equal(23); + expect(hashTable.hashCode('A')).to.equal(28); + expect(hashTable.hashCode('Aba')).to.equal(1); + + // objects + hashTable = new HashTableSeparateChaining(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + } + expect(hashTable.hashCode(myObjList[0])).to.equal(1); + expect(hashTable.hashCode(myObjList[1])).to.equal(3); + expect(hashTable.hashCode(myObjList[2])).to.equal(5); + expect(hashTable.hashCode(myObjList[3])).to.equal(7); + expect(hashTable.hashCode(myObjList[4])).to.equal(9); + }); + + it('puts undefined and null keys and values', () => { + const hashTable = new HashTableSeparateChaining(); + + expect(hashTable.put('undefined', undefined)).to.equal(false); + expect(hashTable.get('undefined')).to.equal(undefined); + + expect(hashTable.put('undefined', 1)).to.equal(true); + expect(hashTable.get('undefined')).to.equal(1); + + expect(hashTable.put('null', null)).to.equal(false); + expect(hashTable.get('null')).to.equal(undefined); + + expect(hashTable.put('null', 1)).to.equal(true); + expect(hashTable.get('null')).to.equal(1); + + hashTable.clear(); + expect(hashTable.put(undefined, undefined)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + + expect(hashTable.put(undefined, 1)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + + expect(hashTable.put(null, null)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + + expect(hashTable.put(null, 1)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + }); + + it('puts values with number key without collisions', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTableSeparateChaining(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + const linkedList = table[i]; + expect(linkedList.size()).to.equal(1); + const valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(i); + expect(valuePair.element.value).to.equal(i); + } + }); + + it('puts values with string key without collisions', () => { + const hashTable = new HashTableSeparateChaining(); + + expect(hashTable.put('1', 1)).to.equal(true); + expect(hashTable.put('10', 10)).to.equal(true); + expect(hashTable.put('100', 100)).to.equal(true); + expect(hashTable.put('1000', 1000)).to.equal(true); + + const table = hashTable.getTable(); + + let linkedList = table[12]; + expect(linkedList.size()).to.equal(1); + let valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal('1'); + expect(valuePair.element.value).to.equal(1); + + linkedList = table[23]; + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal('10'); + expect(valuePair.element.value).to.equal(10); + + linkedList = table[34]; + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal('100'); + expect(valuePair.element.value).to.equal(100); + + linkedList = table[8]; + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal('1000'); + expect(valuePair.element.value).to.equal(1000); + }); + + it('puts values with object key without collisions', () => { + const hashTable = new HashTableSeparateChaining(); + + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + expect(hashTable.put(myObjList[i - 1], myObjList[i - 1])).to.equal(true); + } + + const table = hashTable.getTable(); + + let linkedList = table[1]; + expect(linkedList.size()).to.equal(1); + let valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(myObjList[0]); + expect(valuePair.element.value).to.equal(myObjList[0]); + + linkedList = table[3]; + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(myObjList[1]); + expect(valuePair.element.value).to.equal(myObjList[1]); + + linkedList = table[5]; + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(myObjList[2]); + expect(valuePair.element.value).to.equal(myObjList[2]); + + linkedList = table[7]; + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(myObjList[3]); + expect(valuePair.element.value).to.equal(myObjList[3]); + + linkedList = table[9]; + expect(linkedList.size()).to.equal(1); + valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(myObjList[4]); + expect(valuePair.element.value).to.equal(myObjList[4]); + }); + + it('puts values with collisions', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTableSeparateChaining(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 10)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 2); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i + 100)).to.equal(true); + } + expect(hashTable.size()).to.equal(size * 3); + + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + const linkedList = table[i]; + expect(linkedList.size()).to.equal(3); + + let valuePair = linkedList.getHead(); + expect(valuePair.element.key).to.equal(i); + expect(valuePair.element.value).to.equal(i); + + valuePair = valuePair.next; + expect(valuePair.element.key).to.equal(i); + expect(valuePair.element.value).to.equal(i + 10); + + valuePair = valuePair.next; + expect(valuePair.element.key).to.equal(i); + expect(valuePair.element.value).to.equal(i + 100); + } + }); + + it('removes elements without collisions', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTableSeparateChaining(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(true); + } + + // elements do not exist + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(false); + } + + expect(hashTable.isEmpty()).to.equal(true); + }); + + function addValuesCollision() { + const hashTable = new HashTableSeparateChaining(); + + expect(hashTable.put(A, `${A}@email.com`)).to.equal(true); + expect(hashTable.put(B, `${B}@email.com`)).to.equal(true); + expect(hashTable.put(C, `${C}@email.com`)).to.equal(true); + expect(hashTable.size()).to.equal(3); + + const expectedHash = 5; + expect(hashTable.hashCode(A)).to.equal(expectedHash); + expect(hashTable.hashCode(B)).to.equal(expectedHash); + expect(hashTable.hashCode(C)).to.equal(expectedHash); + + expect(hashTable.getTable()[expectedHash].size()).to.equal(3); + + return hashTable; + } + + function removeWithCollision(a: string, b: string, c: string) { + const hashTable = addValuesCollision(); + + expect(hashTable.remove(a)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.not.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + + expect(hashTable.remove(b)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.not.equal(undefined); + + expect(hashTable.remove(c)).to.equal(true); + expect(hashTable.get(a)).to.equal(undefined); + expect(hashTable.get(b)).to.equal(undefined); + expect(hashTable.get(c)).to.equal(undefined); + + expect(hashTable.isEmpty()).to.equal(true); + } + + it('removes elements with collisions', () => { + // test all possibilities for removal + removeWithCollision(A, B, C); + removeWithCollision(A, C, B); + removeWithCollision(B, A, C); + removeWithCollision(B, C, A); + removeWithCollision(C, A, B); + removeWithCollision(C, B, A); + }); + + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableSeparateChaining(); + + expect(hashTable.toString()).to.equal(''); + + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); + + it('returns toString primitive types without collisions', () => { + const hashTable = new HashTableSeparateChaining(); + + hashTable.put('el1', 1); + expect(hashTable.toString()).to.equal('{36 => [#el1: 1]}'); + + hashTable.put('el2', 2); + expect(hashTable.toString()).to.equal('{0 => [#el2: 2]},{36 => [#el1: 1]}'); + }); + + it('returns toString objects without collisions', () => { + const hashTable = new HashTableSeparateChaining(); + + let myObj = new MyObj(1, 2); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]}'); + + myObj = new MyObj(3, 4); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal( + '{1 => [#1|2: 1|2]},{5 => [#3|4: 3|4]}' + ); + }); + + it('returns toString with collisions', () => { + const hashTable = new HashTableSeparateChaining(); + + expect(hashTable.toString()).to.equal(''); + + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + + hashTable.put(1, 10); + expect(hashTable.toString()).to.equal('{1 => [#1: 1],[#1: 10]},{2 => [#2: 2]}'); + + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); +}); diff --git a/test/ts/data-structures/hash-table.spec.ts b/test/ts/data-structures/hash-table.spec.ts new file mode 100644 index 00000000..2dd56a3f --- /dev/null +++ b/test/ts/data-structures/hash-table.spec.ts @@ -0,0 +1,211 @@ +import 'mocha'; +import { expect } from 'chai'; +import { HashTable } from '../../../src/ts/index'; +import MyObj from './my-obj'; + +describe('HashTable', () => { + it('starts empty', () => { + const hashTable = new HashTable(); + expect(hashTable.size()).to.equal(0); + expect(hashTable.isEmpty()).to.equal(true); + }); + + it('generates hashcode', () => { + // numbers + let hashTable: any = new HashTable(); + expect(hashTable.hashCode(1)).to.equal(1); + expect(hashTable.hashCode(10)).to.equal(10); + expect(hashTable.hashCode(100)).to.equal(100); + expect(hashTable.hashCode(1000)).to.equal(1000); + + // strings + hashTable = new HashTable(); + expect(hashTable.hashCode('1')).to.equal(12); + expect(hashTable.hashCode('10')).to.equal(23); + expect(hashTable.hashCode('100')).to.equal(34); + expect(hashTable.hashCode('1000')).to.equal(8); + expect(hashTable.hashCode('a')).to.equal(23); + expect(hashTable.hashCode('A')).to.equal(28); + expect(hashTable.hashCode('Aba')).to.equal(1); + + // objects + hashTable = new HashTable(); + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + } + expect(hashTable.hashCode(myObjList[0])).to.equal(1); + expect(hashTable.hashCode(myObjList[1])).to.equal(3); + expect(hashTable.hashCode(myObjList[2])).to.equal(5); + expect(hashTable.hashCode(myObjList[3])).to.equal(7); + expect(hashTable.hashCode(myObjList[4])).to.equal(9); + }); + + it('puts undefined and null keys and values', () => { + const hashTable = new HashTable(); + + expect(hashTable.put('undefined', undefined)).to.equal(false); + expect(hashTable.get('undefined')).to.equal(undefined); + + expect(hashTable.put('undefined', 1)).to.equal(true); + expect(hashTable.get('undefined')).to.equal(1); + + expect(hashTable.put('null', null)).to.equal(false); + expect(hashTable.get('null')).to.equal(undefined); + + expect(hashTable.put('null', 1)).to.equal(true); + expect(hashTable.get('null')).to.equal(1); + + hashTable.clear(); + expect(hashTable.put(undefined, undefined)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + + expect(hashTable.put(undefined, 1)).to.equal(false); + expect(hashTable.get(undefined)).to.equal(undefined); + + expect(hashTable.put(null, null)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + + expect(hashTable.put(null, 1)).to.equal(false); + expect(hashTable.get(null)).to.equal(undefined); + }); + + it('puts values with number key', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTable(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + const table = hashTable.getTable(); + for (let i = min; i <= max; i++) { + expect(table[i].key).to.equal(i); + expect(table[i].value).to.equal(i); + } + }); + + it('puts values with string key', () => { + const hashTable = new HashTable(); + + expect(hashTable.put('1', 1)).to.equal(true); + expect(hashTable.put('10', 10)).to.equal(true); + expect(hashTable.put('100', 100)).to.equal(true); + expect(hashTable.put('1000', 1000)).to.equal(true); + + const table = hashTable.getTable(); + + expect(table[12].key).to.equal('1'); + expect(table[12].value).to.equal(1); + + expect(table[23].key).to.equal('10'); + expect(table[23].value).to.equal(10); + + expect(table[34].key).to.equal('100'); + expect(table[34].value).to.equal(100); + + expect(table[8].key).to.equal('1000'); + expect(table[8].value).to.equal(1000); + }); + + it('puts values with object key', () => { + const hashTable = new HashTable(); + + const myObjList = []; + for (let i = 1; i <= 5; i++) { + myObjList.push(new MyObj(i, i + 1)); + expect(hashTable.put(myObjList[i - 1], myObjList[i - 1])).to.equal(true); + } + + const table = hashTable.getTable(); + + expect(table[1].key).to.equal(myObjList[0]); + expect(table[1].value).to.equal(myObjList[0]); + + expect(table[3].key).to.equal(myObjList[1]); + expect(table[3].value).to.equal(myObjList[1]); + + expect(table[5].key).to.equal(myObjList[2]); + expect(table[5].value).to.equal(myObjList[2]); + + expect(table[7].key).to.equal(myObjList[3]); + expect(table[7].value).to.equal(myObjList[3]); + + expect(table[9].key).to.equal(myObjList[4]); + expect(table[9].value).to.equal(myObjList[4]); + }); + + it('does NOT handle collision, replaces values', () => { + const hashTable = new HashTable(); + + for (let i = 0; i < 5; i++) { + expect(hashTable.put(1, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(1); + }); + + it('removes elements', () => { + const min = 1; + const max = 5; + const size = max - min + 1; + const hashTable = new HashTable(); + + for (let i = min; i <= max; i++) { + expect(hashTable.put(i, i)).to.equal(true); + } + expect(hashTable.size()).to.equal(size); + + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(true); + } + + // elements do not exist + for (let i = min; i <= max; i++) { + expect(hashTable.remove(i)).to.equal(false); + } + + expect(hashTable.isEmpty()).to.equal(true); + }); + + it('returns toString primitive types', () => { + const hashTable = new HashTable(); + + expect(hashTable.toString()).to.equal(''); + + hashTable.put(1, 1); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]}'); + + hashTable.put(2, 2); + expect(hashTable.toString()).to.equal('{1 => [#1: 1]},{2 => [#2: 2]}'); + + hashTable.clear(); + expect(hashTable.toString()).to.equal(''); + }); + + it('returns toString primitive types', () => { + const hashTable = new HashTable(); + + hashTable.put('el1', 1); + expect(hashTable.toString()).to.equal('{36 => [#el1: 1]}'); + + hashTable.put('el2', 2); + expect(hashTable.toString()).to.equal('{0 => [#el2: 2]},{36 => [#el1: 1]}'); + }); + + it('returns toString objects', () => { + const hashTable = new HashTable(); + + let myObj = new MyObj(1, 2); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal('{1 => [#1|2: 1|2]}'); + + myObj = new MyObj(3, 4); + hashTable.put(myObj, myObj); + expect(hashTable.toString()).to.equal( + '{1 => [#1|2: 1|2]},{5 => [#3|4: 3|4]}' + ); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index 4de2f168..0acebfa5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,6 +3,7 @@ /* Basic Options */ "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + // "module": "es2015", /* Specify module code generation: 'none', commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "lib": ["es2017"], /* Specify library files to be included in the compilation: */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ From f01fe09b9cb527d0ec66b24fb4140a58ad9b4458 Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 31 Oct 2017 19:06:54 -0200 Subject: [PATCH 037/188] chapter 07: [Dictionaries and Hashes] --- examples/chapter07/01-Dictionaries.js | 6 ++++++ examples/chapter07/02-HashTable.js | 31 ++++++++++++++++++--------- src/js/data-structures/hash-table.js | 4 +--- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/examples/chapter07/01-Dictionaries.js b/examples/chapter07/01-Dictionaries.js index 035ba916..53433cc0 100755 --- a/examples/chapter07/01-Dictionaries.js +++ b/examples/chapter07/01-Dictionaries.js @@ -20,3 +20,9 @@ console.log(dictionary.values()); // ["gandalf@email.com", "tyrion@email.com"] console.log(dictionary.keyValues()); // [{key: "Gandalf", value: "gandalf@email.com"}, {key: "Tyrion", value: "tyrion@email.com"}] console.log(dictionary.toString()); // [#Gandalf: gandalf@email.com],[#Tyrion: tyrion@email.com] + +dictionary.forEach((k, v) => { + console.log('forEach: ', `key: ${k}, value: ${v}`); +}); +// forEach: key: Gandalf, value: gandalf@email.com +// forEach: key: Tyrion, value: tyrion@email.com diff --git a/examples/chapter07/02-HashTable.js b/examples/chapter07/02-HashTable.js index de7e035e..5a82eb09 100755 --- a/examples/chapter07/02-HashTable.js +++ b/examples/chapter07/02-HashTable.js @@ -2,23 +2,34 @@ const { HashTable } = PacktDataStructuresAlgorithms; const hash = new HashTable(); -hash.put('Gandalf', 'gandalf@email.com'); -hash.put('John', 'johnsnow@email.com'); -hash.put('Tyrion', 'tyrion@email.com'); -hash.put('Aaron', 'aaron@email.com'); -hash.put('Donnie', 'donnie@email.com'); -hash.put('Ana', 'ana@email.com'); +console.log(hash.hashCode('Ygritte') + ' - Ygritte'); +console.log(hash.hashCode('Jonathan') + ' - Jonathan'); +console.log(hash.hashCode('Jamie') + ' - Jamie'); +console.log(hash.hashCode('Jack') + ' - Jack'); +console.log(hash.hashCode('Jasmine') + ' - Jasmine'); +console.log(hash.hashCode('Jake') + ' - Jake'); +console.log(hash.hashCode('Nathan') + ' - Nathan'); +console.log(hash.hashCode('Athelstan') + ' - Athelstan'); +console.log(hash.hashCode('Sue') + ' - Sue'); +console.log(hash.hashCode('Aethelwulf') + ' - Aethelwulf'); +console.log(hash.hashCode('Sargeras') + ' - Sargeras'); + +hash.put('Ygritte', 'ygritte@email.com'); hash.put('Jonathan', 'jonathan@email.com'); hash.put('Jamie', 'jamie@email.com'); -hash.put('Sue', 'sue@email.com'); -hash.put('Mindy', 'mindy@email.com'); -hash.put('Paul', 'paul@email.com'); +hash.put('Jack', 'jack@email.com'); +hash.put('Jasmine', 'jasmine@email.com'); +hash.put('Jake', 'jake@email.com'); hash.put('Nathan', 'nathan@email.com'); +hash.put('Athelstan', 'athelstan@email.com'); +hash.put('Sue', 'sue@email.com'); +hash.put('Aethelwulf', 'aethelwulf@email.com'); +hash.put('Sargeras', 'sargeras@email.com'); console.log('**** Printing Hash **** '); console.log(hash.toString()); -// {5 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Ana: ana@email.com]},{16 => [#Aaron: aaron@email.com]},{19 => [#Gandalf: gandalf@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Paul: paul@email.com]} +// {4 => [#Ygritte: ygritte@email.com]},{5 => [#Aethelwulf: aethelwulf@email.com]},{7 => [#Athelstan: athelstan@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Sargeras: sargeras@email.com]} console.log('**** Get **** '); diff --git a/src/js/data-structures/hash-table.js b/src/js/data-structures/hash-table.js index db87d14e..725ac0b5 100644 --- a/src/js/data-structures/hash-table.js +++ b/src/js/data-structures/hash-table.js @@ -68,9 +68,7 @@ export default class HashTable { const keys = Object.keys(this.table); let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`; for (let i = 1; i < keys.length; i++) { - objString = `${objString},{${keys[i]} => ${this.table[ - keys[i] - ].toString()}}`; + objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`; } return objString; } From b337fe8fed37198da8579b6482cee78a3a568b9d Mon Sep 17 00:00:00 2001 From: loiane Date: Thu, 2 Nov 2017 15:25:16 -0200 Subject: [PATCH 038/188] chapter 07: [Dictionaries and Hashes] --- examples/chapter07/02-HashTable.js | 10 +++--- .../03-HashCollisionSeparateChaining.js | 33 +++++++++---------- .../04-HashCollisionLinearProbing.js | 30 ++++++++--------- 3 files changed, 35 insertions(+), 38 deletions(-) diff --git a/examples/chapter07/02-HashTable.js b/examples/chapter07/02-HashTable.js index 5a82eb09..0b99ef3b 100755 --- a/examples/chapter07/02-HashTable.js +++ b/examples/chapter07/02-HashTable.js @@ -33,13 +33,13 @@ console.log(hash.toString()); console.log('**** Get **** '); -console.log(hash.get('Gandalf')); // gandalf@email.com -console.log(hash.get('Loiane')); // undefined +console.log(hash.get('Ygritte')); // ygritte@email.com +console.log(hash.get('Loiane')); // jasmine@email.com console.log('**** Remove **** '); -hash.remove('Gandalf'); -console.log(hash.get('Gandalf')); // undefined +hash.remove('Ygritte'); +console.log(hash.get('Ygritte')); // undefined console.log(hash.toString()); -// {5 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Ana: ana@email.com]},{16 => [#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Paul: paul@email.com]} +// {5 => [#Aethelwulf: aethelwulf@email.com]},{7 => [#Athelstan: athelstan@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Sargeras: sargeras@email.com]} diff --git a/examples/chapter07/03-HashCollisionSeparateChaining.js b/examples/chapter07/03-HashCollisionSeparateChaining.js index e6060cec..f791ba89 100755 --- a/examples/chapter07/03-HashCollisionSeparateChaining.js +++ b/examples/chapter07/03-HashCollisionSeparateChaining.js @@ -2,23 +2,22 @@ const { HashTableSeparateChaining } = PacktDataStructuresAlgorithms; const hashTable = new HashTableSeparateChaining(); -hashTable.put('Gandalf', 'gandalf@email.com'); -hashTable.put('John', 'johnsnow@email.com'); -hashTable.put('Tyrion', 'tyrion@email.com'); -hashTable.put('Aaron', 'aaron@email.com'); -hashTable.put('Donnie', 'donnie@email.com'); -hashTable.put('Ana', 'ana@email.com'); +hashTable.put('Ygritte', 'ygritte@email.com'); hashTable.put('Jonathan', 'jonathan@email.com'); hashTable.put('Jamie', 'jamie@email.com'); -hashTable.put('Sue', 'sue@email.com'); -hashTable.put('Mindy', 'mindy@email.com'); -hashTable.put('Paul', 'paul@email.com'); +hashTable.put('Jack', 'jack@email.com'); +hashTable.put('Jasmine', 'jasmine@email.com'); +hashTable.put('Jake', 'jake@email.com'); hashTable.put('Nathan', 'nathan@email.com'); +hashTable.put('Athelstan', 'athelstan@email.com'); +hashTable.put('Sue', 'sue@email.com'); +hashTable.put('Aethelwulf', 'aethelwulf@email.com'); +hashTable.put('Sargeras', 'sargeras@email.com'); console.log('**** Printing Hash **** '); console.log(hashTable.toString()); -// {5 => [#Jonathan: jonathan@email.com],[#Jamie: jamie@email.com],[#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com],[#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com],[#Aaron: aaron@email.com]},{19 => [#Gandalf: gandalf@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com],[#Paul: paul@email.com]} +// {4 => [#Ygritte: ygritte@email.com]},{5 => [#Jonathan: jonathan@email.com],[#Jamie: jamie@email.com],[#Sue: sue@email.com],[#Aethelwulf: aethelwulf@email.com]},{7 => [#Jack: jack@email.com],[#Athelstan: athelstan@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Nathan: nathan@email.com],[#Sargeras: sargeras@email.com]} console.log('**** Get **** '); @@ -29,19 +28,19 @@ console.log(hashTable.get('Loiane')); // undefined console.log('**** Remove **** '); -console.log(hashTable.remove('Gandalf')); // true -console.log(hashTable.get('Gandalf')); // undefined +console.log(hashTable.remove('Ygritte')); // true +console.log(hashTable.get('Ygritte')); // undefined console.log(hashTable.toString()); -// {5 => [#Jonathan: jonathan@email.com],[#Jamie: jamie@email.com],[#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com],[#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com],[#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com],[#Paul: paul@email.com]} +// {5 => [#Jonathan: jonathan@email.com],[#Jamie: jamie@email.com],[#Sue: sue@email.com],[#Aethelwulf: aethelwulf@email.com]},{7 => [#Jack: jack@email.com],[#Athelstan: athelstan@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Nathan: nathan@email.com],[#Sargeras: sargeras@email.com]} console.log(hashTable.remove('Sue')); // true console.log(hashTable.toString()); -// {5 => [#Jonathan: jonathan@email.com],[#Jamie: jamie@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com],[#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com],[#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com],[#Paul: paul@email.com]} +// {5 => [#Jonathan: jonathan@email.com],[#Jamie: jamie@email.com],[#Aethelwulf: aethelwulf@email.com]},{7 => [#Jack: jack@email.com],[#Athelstan: athelstan@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Nathan: nathan@email.com],[#Sargeras: sargeras@email.com]} console.log(hashTable.remove('Jamie')); // true console.log(hashTable.toString()); -// {5 => [#Jonathan: jonathan@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com],[#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com],[#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com],[#Paul: paul@email.com]} +// {5 => [#Jonathan: jonathan@email.com],[#Aethelwulf: aethelwulf@email.com]},{7 => [#Jack: jack@email.com],[#Athelstan: athelstan@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Nathan: nathan@email.com],[#Sargeras: sargeras@email.com]} -console.log(hashTable.remove('Donnie')); // true +console.log(hashTable.remove('Aethelwulf')); // true console.log(hashTable.toString()); -// {5 => [#Jonathan: jonathan@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com],[#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com],[#Paul: paul@email.com]} +// {5 => [#Jonathan: jonathan@email.com]},{7 => [#Jack: jack@email.com],[#Athelstan: athelstan@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Nathan: nathan@email.com],[#Sargeras: sargeras@email.com]} diff --git a/examples/chapter07/04-HashCollisionLinearProbing.js b/examples/chapter07/04-HashCollisionLinearProbing.js index e633bbef..b75cd98d 100755 --- a/examples/chapter07/04-HashCollisionLinearProbing.js +++ b/examples/chapter07/04-HashCollisionLinearProbing.js @@ -2,24 +2,22 @@ const { HashTableLinearProbing } = PacktDataStructuresAlgorithms; const hashTable = new HashTableLinearProbing(); -hashTable.put('Gandalf', 'gandalf@email.com'); -hashTable.put('John', 'johnsnow@email.com'); -hashTable.put('Tyrion', 'tyrion@email.com'); -hashTable.put('Aaron', 'aaron@email.com'); -hashTable.put('Donnie', 'donnie@email.com'); -hashTable.put('Ana', 'ana@email.com'); +hashTable.put('Ygritte', 'ygritte@email.com'); hashTable.put('Jonathan', 'jonathan@email.com'); hashTable.put('Jamie', 'jamie@email.com'); -hashTable.put('Sue', 'sue@email.com'); -hashTable.put('Mindy', 'mindy@email.com'); -hashTable.put('Paul', 'paul@email.com'); +hashTable.put('Jack', 'jack@email.com'); +hashTable.put('Jasmine', 'jasmine@email.com'); +hashTable.put('Jake', 'jake@email.com'); hashTable.put('Nathan', 'nathan@email.com'); +hashTable.put('Athelstan', 'athelstan@email.com'); +hashTable.put('Sue', 'sue@email.com'); +hashTable.put('Aethelwulf', 'aethelwulf@email.com'); +hashTable.put('Sargeras', 'sargeras@email.com'); console.log('**** Printing Hash **** '); console.log(hashTable.toString()); -// {5 => [#Jonathan: jonathan@email.com]},{6 => [#Jamie: jamie@email.com]},{7 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com]},{14 => [#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com]},{17 => [#Aaron: aaron@email.com]},{19 => [#Gandalf: gandalf@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com]},{33 => [#Paul: paul@email.com]} - +// {4 => [#Ygritte: ygritte@email.com]},{5 => [#Jonathan: jonathan@email.com]},{6 => [#Jamie: jamie@email.com]},{7 => [#Jack: jack@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Nathan: nathan@email.com]},{11 => [#Athelstan: athelstan@email.com]},{12 => [#Sue: sue@email.com]},{13 => [#Aethelwulf: aethelwulf@email.com]},{14 => [#Sargeras: sargeras@email.com]} console.log('**** Get **** '); console.log(hashTable.get('Nathan')); // nathan@email.com @@ -27,18 +25,18 @@ console.log(hashTable.get('Loiane')); // undefined console.log('**** Remove **** '); -hashTable.remove('Gandalf'); -console.log(hashTable.get('Gandalf')); // undefined +hashTable.remove('Ygritte'); +console.log(hashTable.get('Ygritte')); // undefined console.log(hashTable.toString()); -// {5 => [#Jonathan: jonathan@email.com]},{6 => [#Jamie: jamie@email.com]},{7 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com]},{14 => [#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com]},{17 => [#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com]},{33 => [#Paul: paul@email.com]} +// {5 => [#Jonathan: jonathan@email.com]},{6 => [#Jamie: jamie@email.com]},{7 => [#Jack: jack@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Nathan: nathan@email.com]},{11 => [#Athelstan: athelstan@email.com]},{12 => [#Sue: sue@email.com]},{13 => [#Aethelwulf: aethelwulf@email.com]},{14 => [#Sargeras: sargeras@email.com]} console.log('**** Remove Test 2 **** '); console.log('Removing Jonathan', hashTable.remove('Jonathan')); // true console.log('**** Print **** '); console.log(hashTable.toString()); -// {5 => [#Jamie: jamie@email.com]},{6 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com]},{14 => [#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com]},{17 => [#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com]},{33 => [#Paul: paul@email.com]} +// {5 => [#Jamie: jamie@email.com]},{6 => [#Sue: sue@email.com]},{7 => [#Jack: jack@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Nathan: nathan@email.com]},{11 => [#Athelstan: athelstan@email.com]},{12 => [#Aethelwulf: aethelwulf@email.com]},{13 => [#Sargeras: sargeras@email.com]} console.log(hashTable.get('Jamie')); // jamie@email.com console.log('**** Print **** '); console.log(hashTable.toString()); -// {5 => [#Jamie: jamie@email.com]},{6 => [#Sue: sue@email.com]},{10 => [#Nathan: nathan@email.com]},{13 => [#Donnie: donnie@email.com]},{14 => [#Ana: ana@email.com]},{16 => [#Tyrion: tyrion@email.com]},{17 => [#Aaron: aaron@email.com]},{29 => [#John: johnsnow@email.com]},{32 => [#Mindy: mindy@email.com]},{33 => [#Paul: paul@email.com]} +// {5 => [#Jamie: jamie@email.com]},{6 => [#Sue: sue@email.com]},{7 => [#Jack: jack@email.com]},{8 => [#Jasmine: jasmine@email.com]},{9 => [#Jake: jake@email.com]},{10 => [#Nathan: nathan@email.com]},{11 => [#Athelstan: athelstan@email.com]},{12 => [#Aethelwulf: aethelwulf@email.com]},{13 => [#Sargeras: sargeras@email.com]} From b6dfa0f28362c403a7a3d2d3f2e5940aa96a71e5 Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 18 Nov 2017 13:30:21 -0200 Subject: [PATCH 039/188] chapter 08: [Recursion] --- .eslintrc.json | 3 +- README.md | 1 + examples/PacktDataStructuresAlgorithms.min.js | 2 +- examples/chapter08/01-IntroRecursion.html | 10 +++++ examples/chapter08/01-IntroRecursion.js | 26 +++++++++++ examples/chapter08/02-Factorial.html | 10 +++++ examples/chapter08/02-Factorial.js | 26 +++++++++++ examples/chapter08/03-JSCallStack.html | 10 +++++ examples/chapter08/03-JSCallStack.js | 11 +++++ examples/chapter08/04-Fibonacci.html | 10 +++++ examples/chapter08/04-Fibonacci.js | 43 +++++++++++++++++++ examples/index.html | 15 +++++++ src/js/index.js | 7 +++ src/js/others/factorial.js | 20 +++++++++ src/js/others/fibonacci.js | 33 ++++++++++++++ src/ts/index.ts | 8 +++- src/ts/others/factorial.ts | 20 +++++++++ src/ts/others/fibonacci.ts | 29 +++++++++++++ test/js/others/factorial.spec.js | 25 +++++++++++ test/js/others/fibonacci.spec.js | 36 ++++++++++++++++ test/ts/others/factorial.spec.ts | 26 +++++++++++ test/ts/others/fibonacci.spec.ts | 34 +++++++++++++++ 22 files changed, 402 insertions(+), 3 deletions(-) create mode 100644 examples/chapter08/01-IntroRecursion.html create mode 100644 examples/chapter08/01-IntroRecursion.js create mode 100644 examples/chapter08/02-Factorial.html create mode 100644 examples/chapter08/02-Factorial.js create mode 100644 examples/chapter08/03-JSCallStack.html create mode 100644 examples/chapter08/03-JSCallStack.js create mode 100644 examples/chapter08/04-Fibonacci.html create mode 100644 examples/chapter08/04-Fibonacci.js create mode 100644 src/js/others/factorial.js create mode 100644 src/js/others/fibonacci.js create mode 100644 src/ts/others/factorial.ts create mode 100644 src/ts/others/fibonacci.ts create mode 100644 test/js/others/factorial.spec.js create mode 100644 test/js/others/fibonacci.spec.js create mode 100644 test/ts/others/factorial.spec.ts create mode 100644 test/ts/others/fibonacci.spec.ts diff --git a/.eslintrc.json b/.eslintrc.json index ef7aee0d..8728a2e3 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -25,6 +25,7 @@ "import/prefer-default-export": 0, "comma-dangle": 0, "no-underscore-dangle": 0, - "no-param-reassign": 0 + "no-param-reassign": 0, + "no-return-assign": 0 } } diff --git a/README.md b/README.md index fe72f7e4..0aa8ff2e 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Work in Progress. * 05: [LinkedLists](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter05) * 06: [Sets](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter06) * 07: [Dictionaries and Hashes](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter07) +* 08: [Recursion](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter08) ### Third Edition Updates diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index 6b18a066..c5a7d232 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=8)}([function(e,t,n){var i,r,u;!function(n,o){r=[t],i=o,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e){"use strict";function t(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return u(e,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new i.Node(e);if(0===t){var r=this.head;n.next=r,this.head=n}else{var u=this.getElementAt(t-1);n.next=u.next,u.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;u(this,t);var i=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.tail=void 0,i}return a(t,e),s(t,[{key:"push",value:function(e){var t=new r.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.DoublyNode(e),i=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var u=this.getElementAt(t-1);i=u.next,n.next=i,u.next=n,i.prev=n,n.prev=u}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return l;if(1===e){r.push(t.pop());var s={};s[u]=t.toString(),s[o]=i.toString(),s[a]=r.toString(),l.push(s)}else{n(e-1,t,r,i,u,a,o,l),r.push(t.pop());var f={};f[u]=t.toString(),f[o]=i.toString(),f[a]=r.toString(),l.push(f),n(e-1,i,t,r,o,u,a,l)}return l}function i(e){for(var t=new u.default,i=new u.default,r=new u.default,o=e;o>0;o--)t.push(o);return n(e,t,r,i,"source","helper","dest")}function r(e,t,n,i){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?u:(1===e?u.push([t,i]):(r(e-1,t,i,n,u),u.push([t,i]),r(e-1,n,t,i,u)),u)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=i,e.hanoi=r;var u=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(3)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n=e,i=void 0,u="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)u+=t.pop().toString();return u}function i(e,t){var n=new r.default,i=e,u=void 0,o="";if(!(t>=2&&t<=36))return"";for(;i>0;)u=Math.floor(i%t),n.push(u),i=Math.floor(i/t);for(;!n.isEmpty();)o+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return o}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=i;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(3)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n="([{",r=")]}",u=!0,o=0,a=void 0,l=void 0;o=0?t.push(a):t.isEmpty()?u=!1:(l=t.pop(),n.indexOf(l)!==r.indexOf(a)&&(u=!1)),o++;return!(!u||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(5)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e,t){for(var n=new i.default,r=[],u=0;u1;){for(var o=0;o1&&r;)u=t.removeFront(),o=t.removeBack(),u!==o&&(r=!1);return r}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(1),n(4)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i,r){"use strict";function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(i),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return u(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.Node(e),i=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getElementAt(this.size()),this.head=n,i.next=this.head);else{var u=this.getElementAt(t-1);n.next=u.next,u.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;r(this,t);var o=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return o.equalsFn=e,o.compareFn=i,o}return o(t,e),l(t,[{key:"push",value:function(e){if(this.isEmpty())s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var i=this.getIndexNextSortedElement(e);return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,i)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,i=0;i0&&(u=r,o=i),o.forEach(function(e){u.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new i.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(1),n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i,r){"use strict";function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){return e&&e.__esModule?e:{default:e}}(i),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;u(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(24)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,r){var u=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var o=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,r));return o.key=e,o.value=r,o.isDeleted=u,o}return r(t,e),t}(t.ValuePair)})}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=8)}([function(e,t,n){var i,r,u;!function(n,o){r=[t],i=o,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e){"use strict";function t(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return u(e,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new i.Node(e);if(0===t){var r=this.head;n.next=r,this.head=n}else{var u=this.getElementAt(t-1);n.next=u.next,u.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;u(this,t);var i=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.tail=void 0,i}return a(t,e),s(t,[{key:"push",value:function(e){var t=new r.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.DoublyNode(e),i=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var u=this.getElementAt(t-1);i=u.next,n.next=i,u.next=n,i.prev=n,n.prev=u}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return l;if(1===e){r.push(t.pop());var s={};s[u]=t.toString(),s[o]=i.toString(),s[a]=r.toString(),l.push(s)}else{n(e-1,t,r,i,u,a,o,l),r.push(t.pop());var f={};f[u]=t.toString(),f[o]=i.toString(),f[a]=r.toString(),l.push(f),n(e-1,i,t,r,o,u,a,l)}return l}function i(e){for(var t=new u.default,i=new u.default,r=new u.default,o=e;o>0;o--)t.push(o);return n(e,t,r,i,"source","helper","dest")}function r(e,t,n,i){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?u:(1===e?u.push([t,i]):(r(e-1,t,i,n,u),u.push([t,i]),r(e-1,n,t,i,u)),u)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=i,e.hanoi=r;var u=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(3)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n=e,i=void 0,u="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)u+=t.pop().toString();return u}function i(e,t){var n=new r.default,i=e,u=void 0,o="";if(!(t>=2&&t<=36))return"";for(;i>0;)u=Math.floor(i%t),n.push(u),i=Math.floor(i/t);for(;!n.isEmpty();)o+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return o}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=i;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(3)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n="([{",r=")]}",u=!0,o=0,a=void 0,l=void 0;o=0?t.push(a):t.isEmpty()?u=!1:(l=t.pop(),n.indexOf(l)!==r.indexOf(a)&&(u=!1)),o++;return!(!u||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(5)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e,t){for(var n=new i.default,r=[],u=0;u1;){for(var o=0;o1&&r;)u=t.removeFront(),o=t.removeBack(),u!==o&&(r=!1);return r}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(1)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(e){return e&&e.__esModule?e:{default:e}}(i),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;r(this,t);var o=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return o.equalsFn=e,o.compareFn=i,o}return o(t,e),l(t,[{key:"push",value:function(e){if(this.isEmpty())s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var i=this.getIndexNextSortedElement(e);return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,i)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,i=0;i0&&(u=r,o=i),o.forEach(function(e){u.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new i.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(1),n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i,r){"use strict";function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){return e&&e.__esModule?e:{default:e}}(i),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;u(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(23)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,r){var u=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var o=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,r));return o.key=e,o.value=r,o.isDeleted=u,o}return r(t,e),t}(t.ValuePair)})},function(e,t,n){var i,r,u;!function(n,o){r=[t],i=o,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var i,r,u;!function(n,o){r=[t],i=o,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,i=e,r=2;r<=e;r++)i=n+t,t=n,n=i;return i}function i(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=i})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(1),n(4)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i,r){"use strict";function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(i),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return u(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.Node(e),i=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getElementAt(this.size()),this.head=n,i.next=this.head);else{var u=this.getElementAt(t-1);n.next=u.next,u.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e + + + + + + + + + diff --git a/examples/chapter08/01-IntroRecursion.js b/examples/chapter08/01-IntroRecursion.js new file mode 100644 index 00000000..d2843215 --- /dev/null +++ b/examples/chapter08/01-IntroRecursion.js @@ -0,0 +1,26 @@ + +// functions commented below - inifite loop + +/* +function recursiveFunction(someParam) { + recursiveFunction(someParam); +} + +function recursiveFunction1(someParam) { + recursiveFunction2(someParam); +} + +function recursiveFunction2(someParam) { + recursiveFunction1(someParam); +} +*/ + +function understandRecursion(doIunderstandRecursion) { + const recursionAnswer = confirm('Do you understand recursion?'); // function logic + if (recursionAnswer === true) { // base case or stop point + return true; + } + understandRecursion(recursionAnswer); // recursive call +} + +understandRecursion(false); diff --git a/examples/chapter08/02-Factorial.html b/examples/chapter08/02-Factorial.html new file mode 100644 index 00000000..94c6c103 --- /dev/null +++ b/examples/chapter08/02-Factorial.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/chapter08/02-Factorial.js b/examples/chapter08/02-Factorial.js new file mode 100644 index 00000000..774006f9 --- /dev/null +++ b/examples/chapter08/02-Factorial.js @@ -0,0 +1,26 @@ +// @ts-check + +function factorialIterative(number) { + if (number < 0) { + return undefined; + } + let total = 1; + for (let n = number; n > 1; n--) { + total = total * n; + } + return total; +} + +console.log('factorialIterative(5): ', factorialIterative(5)); +console.log('factorialIterative(3): ', factorialIterative(3)); + +function factorial(n) { + // console.trace(); + if (n === 1 || n === 0) { + return 1; + } + return n * factorial(n - 1); +} + +console.log('factorial(5): ', factorial(5)); +console.log('factorial(3): ', factorial(3)); diff --git a/examples/chapter08/03-JSCallStack.html b/examples/chapter08/03-JSCallStack.html new file mode 100644 index 00000000..0f88040d --- /dev/null +++ b/examples/chapter08/03-JSCallStack.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/chapter08/03-JSCallStack.js b/examples/chapter08/03-JSCallStack.js new file mode 100644 index 00000000..fcfd6ef8 --- /dev/null +++ b/examples/chapter08/03-JSCallStack.js @@ -0,0 +1,11 @@ +let i = 0; +function recursiveFn() { + i++; + recursiveFn(); +} + +try { + recursiveFn(); +} catch (ex) { + console.log('i = ' + i + ' error: ' + ex); +} diff --git a/examples/chapter08/04-Fibonacci.html b/examples/chapter08/04-Fibonacci.html new file mode 100644 index 00000000..8413c457 --- /dev/null +++ b/examples/chapter08/04-Fibonacci.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/chapter08/04-Fibonacci.js b/examples/chapter08/04-Fibonacci.js new file mode 100644 index 00000000..3b395774 --- /dev/null +++ b/examples/chapter08/04-Fibonacci.js @@ -0,0 +1,43 @@ +function fibonacci(n){ + if (n < 1) return 0; // {1} + if (n <= 2) return 1; // {2} + return fibonacci(n - 1) + fibonacci(n - 2); // {3} +} + +console.log('fibonacci(2)', fibonacci(2)); +console.log('fibonacci(3)', fibonacci(3)); +console.log('fibonacci(4)', fibonacci(4)); +console.log('fibonacci(5)', fibonacci(5)); + +function fibonacciIterative(n){ + let fibNMinus2 = 0; + let fibNMinus1 = 1; + let fibN = n; + for (let i = 2; i <= n; i++) { // n >= 2 + fibN = fibNMinus1 + fibNMinus2; // f(n-1) + f(n-2) + fibNMinus2 = fibNMinus1; + fibNMinus1 = fibN; + } + return fibN; +} + +console.log('fibonacciIterative(2)', fibonacciIterative(2)); +console.log('fibonacciIterative(3)', fibonacciIterative(3)); +console.log('fibonacciIterative(4)', fibonacciIterative(4)); +console.log('fibonacciIterative(5)', fibonacciIterative(5)); + +function fibonacciMemoization(n) { + const memo = [0, 1]; + const fibonacci = (n) => { + if (memo[n] != null) return memo[n]; + return memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo); + }; + return fibonacci(n); +} + +console.log('fibonacciMemoization(2)', fibonacciMemoization(2)); +console.log('fibonacciMemoization(3)', fibonacciMemoization(3)); +console.log('fibonacciMemoization(4)', fibonacciMemoization(4)); +console.log('fibonacciMemoization(5)', fibonacciMemoization(5)); + +// https://jsperf.com/fibonacci-comparison-jsbook diff --git a/examples/index.html b/examples/index.html index d35c6ab7..068c5626 100644 --- a/examples/index.html +++ b/examples/index.html @@ -45,6 +45,7 @@ 05 06 07 + 08
@@ -173,6 +174,20 @@
+ +
+
Soon.
diff --git a/src/js/index.js b/src/js/index.js index 477542c0..8cf28f99 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -34,3 +34,10 @@ export { default as HashTable } from './data-structures/hash-table'; export { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining'; export { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing'; export { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy'; + +// chapter 08 +export { default as factorialIterative } from './others/factorial'; +export { default as factorial } from './others/factorial'; +export { default as fibonacci } from './others/fibonacci'; +export { default as fibonacciIterative } from './others/fibonacci'; +export { default as fibonacciMemoization } from './others/fibonacci'; diff --git a/src/js/others/factorial.js b/src/js/others/factorial.js new file mode 100644 index 00000000..8592c36e --- /dev/null +++ b/src/js/others/factorial.js @@ -0,0 +1,20 @@ +export function factorialIterative(number) { + if (number < 0) { + return undefined; + } + let total = 1; + for (let n = number; n > 1; n--) { + total *= n; + } + return total; +} + +export function factorial(n) { + if (n < 0) { + return undefined; + } + if (n === 1 || n === 0) { + return 1; + } + return n * factorial(n - 1); +} diff --git a/src/js/others/fibonacci.js b/src/js/others/fibonacci.js new file mode 100644 index 00000000..04de5e68 --- /dev/null +++ b/src/js/others/fibonacci.js @@ -0,0 +1,33 @@ +export function fibonacci(n) { + if (n < 1) { + return 0; + } + if (n <= 2) { + return 1; + } + return fibonacci(n - 1) + fibonacci(n - 2); +} + +export function fibonacciIterative(n) { + if (n < 1) { return 0; } + let fibNMinus2 = 0; + let fibNMinus1 = 1; + let fibN = n; + for (let i = 2; i <= n; i++) { + fibN = fibNMinus1 + fibNMinus2; + fibNMinus2 = fibNMinus1; + fibNMinus1 = fibN; + } + return fibN; +} + +export function fibonacciMemoization(n) { + if (n < 1) { return 0; } + const memo = [0, 1]; + const fibonacciMem = num => { + if (memo[num] != null) { return memo[num]; } + memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2); + return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2)); + }; + return fibonacciMem(n); +} diff --git a/src/ts/index.ts b/src/ts/index.ts index c6e6024a..717316be 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -1,4 +1,5 @@ import * as _util from './util'; +export const util = _util; export { default as LinkedList } from './data-structures/linked-list'; export { default as DoublyLinkedList } from './data-structures/doubly-linked-list'; @@ -12,7 +13,12 @@ export { default as HashTableSeparateChaining } from './data-structures/hash-tab export { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing'; export { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy'; -export const util = _util; +// chapter 08 +export { factorialIterative as factorialIterative } from './others/factorial'; +export { factorial as factorial} from './others/factorial'; +export { fibonacci as fibonacci} from './others/fibonacci'; +export { fibonacciIterative as fibonacciIterative} from './others/fibonacci'; +export { fibonacciMemoization as fibonacciMemoization} from './others/fibonacci'; /* import { hotPotato } from './others/hot-potato'; diff --git a/src/ts/others/factorial.ts b/src/ts/others/factorial.ts new file mode 100644 index 00000000..5ee10414 --- /dev/null +++ b/src/ts/others/factorial.ts @@ -0,0 +1,20 @@ +export function factorialIterative(number: number) { + if (number < 0) { + return undefined; + } + let total = 1; + for (let n = number; n > 1; n--) { + total = total * n; + } + return total; +} + +export function factorial(n: number): number { + if (n < 0) { + return undefined; + } + if (n === 1 || n === 0) { + return 1; + } + return n * factorial(n - 1); +} diff --git a/src/ts/others/fibonacci.ts b/src/ts/others/fibonacci.ts new file mode 100644 index 00000000..32d8db4f --- /dev/null +++ b/src/ts/others/fibonacci.ts @@ -0,0 +1,29 @@ +export function fibonacci(n: number): number { + if (n < 1) { return 0; } // {1} + if (n <= 2) { return 1; } // {2} + return fibonacci(n - 1) + fibonacci(n - 2); // {3} +} + +export function fibonacciIterative(n: number) { + if (n < 1) { return 0; } + let fibNMinus2 = 0; + let fibNMinus1 = 1; + let fibN = n; + for (let i = 2; i <= n; i++) { + // n >= 2 + fibN = fibNMinus1 + fibNMinus2; // f(n-1) + f(n-2) + fibNMinus2 = fibNMinus1; + fibNMinus1 = fibN; + } + return fibN; +} + +export function fibonacciMemoization(n: number) { + if (n < 1) { return 0; } + const memo = [0, 1]; + const fibonacciMem = (num: number): number => { + if (memo[num] != null) { return memo[num]; } + return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2)); + }; + return fibonacciMem(n); +} diff --git a/test/js/others/factorial.spec.js b/test/js/others/factorial.spec.js new file mode 100644 index 00000000..975f6404 --- /dev/null +++ b/test/js/others/factorial.spec.js @@ -0,0 +1,25 @@ +import 'mocha'; +import { expect } from 'chai'; +import { factorialIterative, factorial } from './../../../src/js/others/factorial'; + +describe('Factorial', () => { + it('Iterative Factorial', () => { + expect(factorialIterative(-1)).to.equal(undefined); + expect(factorialIterative(0)).to.equal(1); + expect(factorialIterative(1)).to.equal(1); + expect(factorialIterative(2)).to.equal(2); + expect(factorialIterative(3)).to.equal(6); + expect(factorialIterative(4)).to.equal(24); + expect(factorialIterative(5)).to.equal(120); + }); + + it('Recursive Factorial', () => { + expect(factorial(-1)).to.equal(undefined); + expect(factorial(0)).to.equal(1); + expect(factorial(1)).to.equal(1); + expect(factorial(2)).to.equal(2); + expect(factorial(3)).to.equal(6); + expect(factorial(4)).to.equal(24); + expect(factorial(5)).to.equal(120); + }); +}); diff --git a/test/js/others/fibonacci.spec.js b/test/js/others/fibonacci.spec.js new file mode 100644 index 00000000..5eea4888 --- /dev/null +++ b/test/js/others/fibonacci.spec.js @@ -0,0 +1,36 @@ +import 'mocha'; +import { expect } from 'chai'; +import { + fibonacci, + fibonacciIterative, + fibonacciMemoization +} from '../../../src/js/others/fibonacci'; + +describe('Fibonacci', () => { + it('Fibonacci Recursive', () => { + expect(fibonacci(-1)).to.equal(0); + expect(fibonacci(0)).to.equal(0); + expect(fibonacci(1)).to.equal(1); + expect(fibonacci(2)).to.equal(1); + expect(fibonacci(3)).to.equal(2); + expect(fibonacci(4)).to.equal(3); + }); + + it('Fibonacci Iterative', () => { + expect(fibonacciIterative(-1)).to.equal(0); + expect(fibonacciIterative(0)).to.equal(0); + expect(fibonacciIterative(1)).to.equal(1); + expect(fibonacciIterative(2)).to.equal(1); + expect(fibonacciIterative(3)).to.equal(2); + expect(fibonacciIterative(4)).to.equal(3); + }); + + it('Fibonacci with Memoization', () => { + expect(fibonacciMemoization(-1)).to.equal(0); + expect(fibonacciMemoization(0)).to.equal(0); + expect(fibonacciMemoization(1)).to.equal(1); + expect(fibonacciMemoization(2)).to.equal(1); + expect(fibonacciMemoization(3)).to.equal(2); + expect(fibonacciMemoization(4)).to.equal(3); + }); +}); diff --git a/test/ts/others/factorial.spec.ts b/test/ts/others/factorial.spec.ts new file mode 100644 index 00000000..d785d11c --- /dev/null +++ b/test/ts/others/factorial.spec.ts @@ -0,0 +1,26 @@ +import 'mocha'; +import { expect } from 'chai'; +import { factorialIterative, factorial } from '../../../src/ts/index'; + +describe('Factorial', () => { + + it('Iterative Factorial', () => { + expect(factorialIterative(-1)).to.equal(undefined); + expect(factorialIterative(0)).to.equal(1); + expect(factorialIterative(1)).to.equal(1); + expect(factorialIterative(2)).to.equal(2); + expect(factorialIterative(3)).to.equal(6); + expect(factorialIterative(4)).to.equal(24); + expect(factorialIterative(5)).to.equal(120); + }); + + it('Recursive Factorial', () => { + expect(factorial(-1)).to.equal(undefined); + expect(factorial(0)).to.equal(1); + expect(factorial(1)).to.equal(1); + expect(factorial(2)).to.equal(2); + expect(factorial(3)).to.equal(6); + expect(factorial(4)).to.equal(24); + expect(factorial(5)).to.equal(120); + }); +}); diff --git a/test/ts/others/fibonacci.spec.ts b/test/ts/others/fibonacci.spec.ts new file mode 100644 index 00000000..27ad81f0 --- /dev/null +++ b/test/ts/others/fibonacci.spec.ts @@ -0,0 +1,34 @@ +import 'mocha'; +import { expect } from 'chai'; +import { fibonacci, fibonacciIterative, fibonacciMemoization } from '../../../src/ts/index'; + +describe('Fibonacci', () => { + + it('Fibonacci Recursive', () => { + expect(fibonacci(-1)).to.equal(0); + expect(fibonacci(0)).to.equal(0); + expect(fibonacci(1)).to.equal(1); + expect(fibonacci(2)).to.equal(1); + expect(fibonacci(3)).to.equal(2); + expect(fibonacci(4)).to.equal(3); + }); + + it('Fibonacci Iterative', () => { + expect(fibonacciIterative(-1)).to.equal(0); + expect(fibonacciIterative(0)).to.equal(0); + expect(fibonacciIterative(1)).to.equal(1); + expect(fibonacciIterative(2)).to.equal(1); + expect(fibonacciIterative(3)).to.equal(2); + expect(fibonacciIterative(4)).to.equal(3); + }); + + it('Fibonacci with Memoization', () => { + expect(fibonacciMemoization(-1)).to.equal(0); + expect(fibonacciMemoization(0)).to.equal(0); + expect(fibonacciMemoization(1)).to.equal(1); + expect(fibonacciMemoization(2)).to.equal(1); + expect(fibonacciMemoization(3)).to.equal(2); + expect(fibonacciMemoization(4)).to.equal(3); + }); + +}); From 208b75777f02e796aa2e34cc1c405797ef19f6e3 Mon Sep 17 00:00:00 2001 From: Loiane Groner Date: Mon, 20 Nov 2017 13:08:47 -0200 Subject: [PATCH 040/188] Update 14-ES6ParameterHandling.js --- chapter01/14-ES6ParameterHandling.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter01/14-ES6ParameterHandling.js b/chapter01/14-ES6ParameterHandling.js index 4645f2a7..af23585c 100644 --- a/chapter01/14-ES6ParameterHandling.js +++ b/chapter01/14-ES6ParameterHandling.js @@ -14,7 +14,7 @@ function sum2 (x, y, z) { z = 3; return x + y + z; }; -console.log(sum2(4,2)); //outpus 10 +console.log(sum2(4,2)); //outpus 9 //******* EcmaScript 6: spread operator ('...') var params = [3, 4, 5]; From e18ebb48d6f0db298c736c22d7f8f62ed4891f67 Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 25 Nov 2017 14:21:59 -0200 Subject: [PATCH 041/188] chapter 09: [Trees] --- README.md | 1 + src/js/data-structures/avl-tree.js | 160 ++++++++++++++ src/js/data-structures/binary-search-tree.js | 139 ++++++++++++ src/js/data-structures/models/node.js | 10 + src/ts/data-structures/avl-tree.ts | 201 ++++++++++++++++++ src/ts/data-structures/binary-search-tree.ts | 162 ++++++++++++++ src/ts/data-structures/models/node.ts | 10 + .../data-structures/models/red-black-node.ts | 28 +++ src/ts/data-structures/red-black-tree.ts | 10 + src/ts/index.ts | 4 + test/ts/data-structures/avl-tree.spec.ts | 32 +++ .../binary-search-tree.spec.ts | 109 ++++++++++ 12 files changed, 866 insertions(+) create mode 100644 src/js/data-structures/avl-tree.js create mode 100644 src/js/data-structures/binary-search-tree.js create mode 100644 src/js/data-structures/models/node.js create mode 100644 src/ts/data-structures/avl-tree.ts create mode 100644 src/ts/data-structures/binary-search-tree.ts create mode 100644 src/ts/data-structures/models/node.ts create mode 100644 src/ts/data-structures/models/red-black-node.ts create mode 100644 src/ts/data-structures/red-black-tree.ts create mode 100644 test/ts/data-structures/avl-tree.spec.ts create mode 100644 test/ts/data-structures/binary-search-tree.spec.ts diff --git a/README.md b/README.md index 0aa8ff2e..0ee93f3d 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ Work in Progress. * 06: [Sets](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter06) * 07: [Dictionaries and Hashes](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter07) * 08: [Recursion](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter08) +* 09: [Trees](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter09) ### Third Edition Updates diff --git a/src/js/data-structures/avl-tree.js b/src/js/data-structures/avl-tree.js new file mode 100644 index 00000000..108716e5 --- /dev/null +++ b/src/js/data-structures/avl-tree.js @@ -0,0 +1,160 @@ +import { Compare, defaultCompare } from '../util'; +import BinarySearchTree from './binary-search-tree'; +import { Node } from './models/node'; + +const BalanceFactor = { + UNBALANCED_RIGHT: 1, + SLIGHTLY_UNBALANCED_RIGHT: 2, + BALANCED: 3, + SLIGHTLY_UNBALANCED_LEFT: 4, + UNBALANCED_LEFT: 5 +}; + +export default class AVLTree extends BinarySearchTree { + constructor(compareFn = defaultCompare) { + super(compareFn); + this.compareFn = compareFn; + this.root = null; + } + getNodeHeight(node) { + if (node == null) { + return -1; + } + return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1; + } + /** + * Left left case: rotate right + * + * b a + * / \ / \ + * a e -> rotationLL(b) -> c b + * / \ / \ + * c d d e + * + * @param node Node + */ + rotationLL(node) { + const tmp = node.left; + node.left = tmp.right; + tmp.right = node; + return tmp; + } + /** + * Right right case: rotate left + * + * a b + * / \ / \ + * c b -> rotationRR(a) -> a e + * / \ / \ + * d e c d + * + * @param node Node + */ + rotationRR(node) { + const tmp = node.right; + node.right = tmp.left; + tmp.left = node; + return tmp; + } + /** + * Left right case: rotate left then right + * @param node Node + */ + rotationLR(node) { + node.left = this.rotationRR(node.left); + return this.rotationLL(node); + } + /** + * Right left case: rotate right then left + * @param node Node + */ + rotationRL(node) { + node.right = this.rotationLL(node.right); + return this.rotationRR(node); + } + getBalanceFactor(node) { + const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right); + switch (heightDifference) { + case -2: + return BalanceFactor.UNBALANCED_RIGHT; + case -1: + return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT; + case 1: + return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT; + case 2: + return BalanceFactor.UNBALANCED_LEFT; + default: + return BalanceFactor.BALANCED; + } + } + insert(key) { + this.root = this.insertNode(this.root, key); + } + insertNode(node, key) { + if (node == null) { + return new Node(key); + } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + node.left = this.insertNode(node.left, key); + } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { + node.right = this.insertNode(node.right, key); + } else { + return node; // duplicated key + } + // verify if tree is balanced + const balanceFactor = this.getBalanceFactor(node); + if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) { + if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) { + // Left left case + node = this.rotationLL(node); + } else { + // Left right case + return this.rotationLR(node); + } + } + if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) { + if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) { + // Right right case + node = this.rotationRR(node); + } else { + // Right left case + return this.rotationRL(node); + } + } + return node; + } + removeNode(node, key) { + node = super.removeNode(node, key); // {1} + if (node == null) { + return node; + } + // verify if tree is balanced + const balanceFactor = this.getBalanceFactor(node); + if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) { + // Left left case + if ( + this.getBalanceFactor(node.left) === BalanceFactor.BALANCED || + this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT + ) { + return this.rotationLL(node); + } + // Left right case + if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) { + return this.rotationLR(node.left); + } + } + if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) { + // Right right case + if ( + this.getBalanceFactor(node.right) === BalanceFactor.BALANCED || + this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT + ) { + return this.rotationRR(node); + } + // Right left case + if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) { + return this.rotationRL(node.right); + } + } + return node; + } +} diff --git a/src/js/data-structures/binary-search-tree.js b/src/js/data-structures/binary-search-tree.js new file mode 100644 index 00000000..d1fd08f2 --- /dev/null +++ b/src/js/data-structures/binary-search-tree.js @@ -0,0 +1,139 @@ +import { Compare, defaultCompare } from '../util'; +import { Node } from './models/node'; + +export default class BinarySearchTree { + constructor(compareFn = defaultCompare) { + this.compareFn = compareFn; + this.root = null; + } + insert(key) { + // special case: first key + if (this.root == null) { + this.root = new Node(key); + } else { + this.insertNode(this.root, key); + } + } + insertNode(node, key) { + if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + if (node.left == null) { + node.left = new Node(key); + } else { + this.insertNode(node.left, key); + } + } else { + if (node.right == null) { + node.right = new Node(key); + } else { + this.insertNode(node.right, key); + } + } + } + getRoot() { + return this.root; + } + search(key) { + return this.searchNode(this.root, key); + } + searchNode(node, key) { + if (node == null) { + return false; + } + if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + return this.searchNode(node.left, key); + } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { + return this.searchNode(node.right, key); + } else { + return true; + } + } + inOrderTraverse(callback) { + this.inOrderTraverseNode(this.root, callback); + } + inOrderTraverseNode(node, callback) { + if (node != null) { + this.inOrderTraverseNode(node.left, callback); + callback(node.key); + this.inOrderTraverseNode(node.right, callback); + } + } + preOrderTraverse(callback) { + this.preOrderTraverseNode(this.root, callback); + } + preOrderTraverseNode(node, callback) { + if (node != null) { + callback(node.key); + this.preOrderTraverseNode(node.left, callback); + this.preOrderTraverseNode(node.right, callback); + } + } + postOrderTraverse(callback) { + this.postOrderTraverseNode(this.root, callback); + } + postOrderTraverseNode(node, callback) { + if (node != null) { + this.postOrderTraverseNode(node.left, callback); + this.postOrderTraverseNode(node.right, callback); + callback(node.key); + } + } + min() { + return this.minNode(this.root); + } + minNode(node) { + let current = node; + while (current != null && current.left != null) { + current = current.left; + } + return current; + } + max() { + return this.maxNode(this.root); + } + maxNode(node) { + let current = node; + while (current != null && current.right != null) { + current = current.right; + } + return current; + } + remove(key) { + this.root = this.removeNode(this.root, key); + } + removeNode(node, key) { + if (node == null) { + return null; + } + if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + node.left = this.removeNode(node.left, key); + return node; + } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { + node.right = this.removeNode(node.right, key); + return node; + } else { + // key is equal to node.item + // handle 3 special conditions + // 1 - a leaf node + // 2 - a node with only 1 child + // 3 - a node with 2 children + // case 1 + if (node.left == null && node.right == null) { + node = null; + return node; + } + // case 2 + if (node.left == null) { + node = node.right; + return node; + } else if (node.right == null) { + node = node.left; + return node; + } + // case 3 + const aux = this.minNode(node.right); + node.key = aux.key; + node.right = this.removeNode(node.right, aux.key); + return node; + } + } +} diff --git a/src/js/data-structures/models/node.js b/src/js/data-structures/models/node.js new file mode 100644 index 00000000..6d3b54a7 --- /dev/null +++ b/src/js/data-structures/models/node.js @@ -0,0 +1,10 @@ +export class Node { + constructor(key) { + this.key = key; + this.left = null; + this.right = null; + } + toString() { + return `${this.key}`; + } +} diff --git a/src/ts/data-structures/avl-tree.ts b/src/ts/data-structures/avl-tree.ts new file mode 100644 index 00000000..feb44a19 --- /dev/null +++ b/src/ts/data-structures/avl-tree.ts @@ -0,0 +1,201 @@ +import { Compare, defaultCompare, ICompareFunction } from '../util'; +import BinarySearchTree from './binary-search-tree'; +import { Node } from './models/node'; + +enum BalanceFactor { + UNBALANCED_RIGHT = 1, + SLIGHTLY_UNBALANCED_RIGHT = 2, + BALANCED = 3, + SLIGHTLY_UNBALANCED_LEFT = 4, + UNBALANCED_LEFT = 5 +} + +export default class AVLTree extends BinarySearchTree { + + constructor(protected compareFn: ICompareFunction = defaultCompare) { + super(compareFn); + } + + private getNodeHeight(node: Node): number { + if (node == null) { + return -1; + } + return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1; + } + + /** + * Left left case: rotate right + * + * b a + * / \ / \ + * a e -> rotationLL(b) -> c b + * / \ / \ + * c d d e + * + * @param node Node + */ + private rotationLL(node: Node) { + const tmp = node.left; + node.left = tmp.right; + tmp.right = node; + return tmp; + } + + /** + * Right right case: rotate left + * + * a b + * / \ / \ + * c b -> rotationRR(a) -> a e + * / \ / \ + * d e c d + * + * @param node Node + */ + private rotationRR(node: Node) { + const tmp = node.right; + node.right = tmp.left; + tmp.left = node; + return tmp; + } + + /** + * Left right case: rotate left then right + * @param node Node + */ + private rotationLR(node: Node) { + node.left = this.rotationRR(node.left); + return this.rotationLL(node); + } + + /** + * Right left case: rotate right then left + * @param node Node + */ + private rotationRL(node: Node) { + node.right = this.rotationLL(node.right); + return this.rotationRR(node); + } + + private getBalanceFactor(node: Node) { + const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right); + switch (heightDifference) { + case -2: + return BalanceFactor.UNBALANCED_RIGHT; + case -1: + return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT; + case 1: + return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT; + case 2: + return BalanceFactor.UNBALANCED_LEFT; + default: + return BalanceFactor.BALANCED; + } + } + + insert(key: T) { + this.root = this.insertNode(this.root, key); + } + + protected insertNode(node: Node, key: T) { + if (node == null) { + return new Node(key); + } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + node.left = this.insertNode(node.left, key); + } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { + node.right = this.insertNode(node.right, key); + } else { + return node; // duplicated key + } + + // verify if tree is balanced + const balanceState = this.getBalanceFactor(node); + + if (balanceState === BalanceFactor.UNBALANCED_LEFT) { + if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) { + // Left left case + node = this.rotationLL(node); + } else { + // Left right case + return this.rotationLR(node); + } + } + + if (balanceState === BalanceFactor.UNBALANCED_RIGHT) { + if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) { + // Right right case + node = this.rotationRR(node); + } else { + // Right left case + return this.rotationRL(node); + } + } + + return node; + } + + protected removeNode(node: Node, key: T) { + if (node == null) { + return null; + } + + if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + // The key to be deleted is in the left sub-tree + node.left = this.removeNode(node.left, key); + } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { + // The key to be deleted is in the right sub-tree + node.right = this.removeNode(node.right, key); + } else { + // node is the node to be deleted + if (node.left == null && node.right == null) { + node = null; + } else if (node.left == null && node.right != null) { + node = node.right; + } else if (node.left != null && node.right == null) { + node = node.left; + } else { + // node has 2 children, get the in-order successor + const inOrderSuccessor = this.minNode(node.right); + node.key = inOrderSuccessor.key; + node.right = this.removeNode(node.right, inOrderSuccessor.key); + } + } + + if (node == null) { + return node; + } + + // verify if tree is balanced + const balanceState = this.getBalanceFactor(node); + + if (balanceState === BalanceFactor.UNBALANCED_LEFT) { + // Left left case + if ( + this.getBalanceFactor(node.left) === BalanceFactor.BALANCED || + this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT + ) { + return this.rotationLL(node); + } + // Left right case + if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) { + return this.rotationLR(node.left); + } + } + + if (balanceState === BalanceFactor.UNBALANCED_RIGHT) { + // Right right case + if ( + this.getBalanceFactor(node.right) === BalanceFactor.BALANCED || + this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT + ) { + return this.rotationRR(node); + } + // Right left case + if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) { + return this.rotationRL(node.right); + } + } + + return node; + } +} diff --git a/src/ts/data-structures/binary-search-tree.ts b/src/ts/data-structures/binary-search-tree.ts new file mode 100644 index 00000000..d02c9541 --- /dev/null +++ b/src/ts/data-structures/binary-search-tree.ts @@ -0,0 +1,162 @@ +import { Compare, defaultCompare, ICompareFunction } from '../util'; +import { Node } from './models/node'; + +export default class BinarySearchTree { + protected root: Node; + + constructor(protected compareFn: ICompareFunction = defaultCompare) {} + + insert(key: T) { + // special case: first key + if (this.root == null) { + this.root = new Node(key); + } else { + this.insertNode(this.root, key); + } + } + + protected insertNode(node: Node, key: T) { + if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + if (node.left == null) { + node.left = new Node(key); + } else { + this.insertNode(node.left, key); + } + } else { + if (node.right == null) { + node.right = new Node(key); + } else { + this.insertNode(node.right, key); + } + } + } + + getRoot() { + return this.root; + } + + search(key: T) { + return this.searchNode(this.root, key); + } + + private searchNode(node: Node, key: T): boolean { + if (node == null) { + return false; + } + + if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + return this.searchNode(node.left, key); + } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { + return this.searchNode(node.right, key); + } else { + // key is equal to node.item + return true; + } + } + + inOrderTraverse(callback: Function) { + this.inOrderTraverseNode(this.root, callback); + } + + private inOrderTraverseNode(node: Node, callback: Function) { + if (node != null) { + this.inOrderTraverseNode(node.left, callback); + callback(node.key); + this.inOrderTraverseNode(node.right, callback); + } + } + + preOrderTraverse(callback: Function) { + this.preOrderTraverseNode(this.root, callback); + } + + private preOrderTraverseNode(node: Node, callback: Function) { + if (node != null) { + callback(node.key); + this.preOrderTraverseNode(node.left, callback); + this.preOrderTraverseNode(node.right, callback); + } + } + + postOrderTraverse(callback: Function) { + this.postOrderTraverseNode(this.root, callback); + } + + private postOrderTraverseNode(node: Node, callback: Function) { + if (node != null) { + this.postOrderTraverseNode(node.left, callback); + this.postOrderTraverseNode(node.right, callback); + callback(node.key); + } + } + + min() { + return this.minNode(this.root); + } + + protected minNode(node: Node) { + let current = node; + while (current != null && current.left != null) { + current = current.left; + } + return current; + } + + max() { + return this.maxNode(this.root); + } + + protected maxNode(node: Node) { + let current = node; + while (current != null && current.right != null) { + current = current.right; + } + return current; + } + + remove(key: T) { + this.root = this.removeNode(this.root, key); + } + + protected removeNode(node: Node, key: T) { + if (node == null) { + return null; + } + + if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + node.left = this.removeNode(node.left, key); + return node; + } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { + node.right = this.removeNode(node.right, key); + return node; + } else { + // key is equal to node.item + + // handle 3 special conditions + // 1 - a leaf node + // 2 - a node with only 1 child + // 3 - a node with 2 children + + // case 1 + if (node.left == null && node.right == null) { + node = null; + return node; + } + + // case 2 + if (node.left == null) { + node = node.right; + return node; + } else if (node.right == null) { + node = node.left; + return node; + } + + // case 3 + const aux = this.minNode(node.right); + node.key = aux.key; + node.right = this.removeNode(node.right, aux.key); + return node; + } + } +} diff --git a/src/ts/data-structures/models/node.ts b/src/ts/data-structures/models/node.ts new file mode 100644 index 00000000..f3e3f9aa --- /dev/null +++ b/src/ts/data-structures/models/node.ts @@ -0,0 +1,10 @@ +export class Node { + left: Node; + right: Node; + + constructor(public key: K) {} + + toString() { + return `${this.key}`; + } +} diff --git a/src/ts/data-structures/models/red-black-node.ts b/src/ts/data-structures/models/red-black-node.ts new file mode 100644 index 00000000..256bd7f5 --- /dev/null +++ b/src/ts/data-structures/models/red-black-node.ts @@ -0,0 +1,28 @@ +export enum Colors { + RED = 0, + BLACK = 1 +} + +export class RedBlackNode { + left: RedBlackNode; + right: RedBlackNode; + color: Colors; + + constructor(public key: K) {} + + isRed() { + return this.color === Colors.RED; + } + + flipColor() { + if (this.color === Colors.RED) { + this.color = Colors.BLACK; + } else { + this.color = Colors.RED; + } + } + + toString() { + return `${this.key}`; + } +} diff --git a/src/ts/data-structures/red-black-tree.ts b/src/ts/data-structures/red-black-tree.ts new file mode 100644 index 00000000..d7730cf7 --- /dev/null +++ b/src/ts/data-structures/red-black-tree.ts @@ -0,0 +1,10 @@ +import { Compare, defaultCompare, ICompareFunction } from '../util'; +import BinarySearchTree from './binary-search-tree'; +import { Node } from './models/node'; + +export default class RedBlackTree extends BinarySearchTree { + + constructor(protected compareFn: ICompareFunction = defaultCompare) { + super(compareFn); + } +} diff --git a/src/ts/index.ts b/src/ts/index.ts index 717316be..5afc3398 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -20,6 +20,10 @@ export { fibonacci as fibonacci} from './others/fibonacci'; export { fibonacciIterative as fibonacciIterative} from './others/fibonacci'; export { fibonacciMemoization as fibonacciMemoization} from './others/fibonacci'; +// chapter 08 +export { default as BinarySearchTree } from './data-structures/binary-search-tree'; +export { default as AVLTree } from './data-structures/avl-tree'; + /* import { hotPotato } from './others/hot-potato'; import { palindromeChecker } from './others/palindrome-checker'; diff --git a/test/ts/data-structures/avl-tree.spec.ts b/test/ts/data-structures/avl-tree.spec.ts new file mode 100644 index 00000000..95562b95 --- /dev/null +++ b/test/ts/data-structures/avl-tree.spec.ts @@ -0,0 +1,32 @@ +import 'mocha'; +import { expect } from 'chai'; +import { AVLTree } from '../../../src/ts/index'; + +describe('AVLTree', () => { + let tree: AVLTree; + + beforeEach(() => { + tree = new AVLTree(); + }); + + it('starts empty', () => { + expect(tree.getRoot()).to.equal(undefined); + }); + + it('inserts elements in the AVLTree', () => { + expect(tree.getRoot()).to.equal(undefined); + + tree.insert(1); + tree.insert(2); + tree.insert(3); + tree.insert(4); + tree.insert(5); + tree.insert(6); + tree.insert(7); + tree.insert(14); + tree.insert(15); + tree.insert(13); + tree.insert(12); + tree.insert(11); + }); +}); diff --git a/test/ts/data-structures/binary-search-tree.spec.ts b/test/ts/data-structures/binary-search-tree.spec.ts new file mode 100644 index 00000000..419f8e10 --- /dev/null +++ b/test/ts/data-structures/binary-search-tree.spec.ts @@ -0,0 +1,109 @@ +import 'mocha'; +import { expect } from 'chai'; +import { BinarySearchTree } from '../../../src/ts/index'; + +describe('BinarySearchTree', () => { + let tree: BinarySearchTree; + + beforeEach(() => { + tree = new BinarySearchTree(); + }); + + it('starts empty', () => { + expect(tree.getRoot()).to.equal(undefined); + }); + + function assertNode(node: any, key: number, left: number, right: number) { + + if (key != null) { + expect(node.key).to.equal(key); + } else { + expect(node).to.equal(key); + return; + } + + if (left != null) { + expect(node.left.key).to.equal(left); + } else { + expect(node.left).to.equal(left); + } + + if (right != null) { + expect(node.right.key).to.equal(right); + } else { + expect(node.right).to.equal(right); + } + } + + it('inserts elements in the BST', () => { + expect(tree.getRoot()).to.equal(undefined); + + tree.insert(11); + tree.insert(7); + tree.insert(15); + tree.insert(5); + tree.insert(3); + tree.insert(9); + tree.insert(8); + tree.insert(10); + tree.insert(13); + tree.insert(12); + tree.insert(14); + tree.insert(20); + tree.insert(18); + tree.insert(25); + + let node = tree.getRoot(); + assertNode(node, 11, 7, 15); + + node = node.left; + assertNode(node, 7, 5, 9); + + node = node.left; + assertNode(node, 5, 3, undefined); + + node = node.left; + assertNode(node, 3, undefined, undefined); + + node = tree.getRoot().left.left.right; + assertNode(node, undefined, undefined, undefined); + + node = tree.getRoot().left.right; + assertNode(node, 9, 8, 10); + + node = node.left; + assertNode(node, 8, undefined, undefined); + + node = tree.getRoot().left.right.right; + assertNode(node, 10, undefined, undefined); + + node = tree.getRoot().right; + assertNode(node, 15, 13, 20); + + node = node.left; + assertNode(node, 13, 12, 14); + + node = node.left; + assertNode(node, 12, undefined, undefined); + + node = tree.getRoot().right.left.right; + assertNode(node, 14, undefined, undefined); + + node = tree.getRoot().right.right; + assertNode(node, 20, 18, 25); + + node = node.left; + assertNode(node, 18, undefined, undefined); + + node = tree.getRoot().right.right.right; + assertNode(node, 25, undefined, undefined); + }); + + it('verifies if element exists', () => { + expect(tree.getRoot()).to.equal(undefined); + }); + + it('removes a leaf', () => { + expect(tree.getRoot()).to.equal(undefined); + }); +}); From aa0bb5090b123403cb71aee49c149e09d5d67b0f Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 16 Dec 2017 09:58:17 -0200 Subject: [PATCH 042/188] chapter 10: [Heap] --- README.md | 1 + src/js/data-structures/heap.js | 95 ++++++++++++++++++++++ src/js/index.js | 9 +++ src/js/sorting/heap-sort.js | 34 ++++++++ src/js/util.js | 10 +++ src/ts/data-structures/graph.ts | 0 src/ts/data-structures/heap.ts | 113 +++++++++++++++++++++++++++ src/ts/index.ts | 7 +- src/ts/sorting/heap-sort.ts | 37 +++++++++ src/ts/util.ts | 11 +++ test/ts/data-structures/heap.spec.ts | 51 ++++++++++++ 11 files changed, 367 insertions(+), 1 deletion(-) create mode 100644 src/js/data-structures/heap.js create mode 100644 src/js/sorting/heap-sort.js create mode 100644 src/ts/data-structures/graph.ts create mode 100644 src/ts/data-structures/heap.ts create mode 100644 src/ts/sorting/heap-sort.ts create mode 100644 test/ts/data-structures/heap.spec.ts diff --git a/README.md b/README.md index 0ee93f3d..26a15d77 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Work in Progress. * 07: [Dictionaries and Hashes](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter07) * 08: [Recursion](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter08) * 09: [Trees](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter09) +* 10: [Heap](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter10) ### Third Edition Updates diff --git a/src/js/data-structures/heap.js b/src/js/data-structures/heap.js new file mode 100644 index 00000000..b7fb61aa --- /dev/null +++ b/src/js/data-structures/heap.js @@ -0,0 +1,95 @@ +import { Compare, defaultCompare, reverseCompare, swap } from '../util'; + +export class MinHeap { + constructor(compareFn = defaultCompare) { + this.compareFn = compareFn; + this.heap = []; + } + getLeftIndex(index) { + return 2 * index + 1; + } + getRightIndex(index) { + return 2 * index + 2; + } + getParentIndex(index) { + if (index === 0) { + return undefined; + } + return Math.floor((index - 1) / 2); + } + size() { + return this.heap.length; + } + isEmpty() { + return this.size() <= 0; + } + clear() { + this.heap = []; + } + find() { + return this.isEmpty() ? undefined : this.heap[0]; + } + insert(value) { + if (value != null) { + const index = this.heap.length; + this.heap.push(value); + this.siftUp(index); + return true; + } + return false; + } + siftDown(index) { + let element = index; + const left = this.getLeftIndex(index); + const right = this.getRightIndex(index); + const size = this.size(); + if (left < size && this.compareFn(this.heap[element], this.heap[left]) > Compare.BIGGER_THAN) { + element = left; + } + if ( + right < size && + this.compareFn(this.heap[element], this.heap[right]) > Compare.BIGGER_THAN + ) { + element = right; + } + if (index !== element) { + swap(this.heap, index, element); + this.siftDown(element); + } + } + siftUp(index) { + let parent = this.getParentIndex(index); + while (index > 0 && this.compareFn(this.heap[parent], this.heap[index]) > Compare.BIGGER_THAN) { + swap(this.heap, parent, index); + index = parent; + parent = this.getParentIndex(index); + } + } + extract() { + if (this.isEmpty()) { + return undefined; + } + if (this.size() === 1) { + return this.heap.shift(); + } + const removedValue = this.heap.shift(); + this.siftDown(0); + return removedValue; + } + heapify(array) { + if (array) { + this.heap = array; + this.heap.unshift(null); // remove all null elements + } + for (let i = this.size() - 1; i > 0; i--) { + this.siftDown(i); + } + } +} +export class MaxHeap extends MinHeap { + constructor(compareFn = defaultCompare) { + super(compareFn); + this.compareFn = compareFn; + this.compareFn = reverseCompare(compareFn); + } +} diff --git a/src/js/index.js b/src/js/index.js index 8cf28f99..8c78ce47 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -41,3 +41,12 @@ export { default as factorial } from './others/factorial'; export { default as fibonacci } from './others/fibonacci'; export { default as fibonacciIterative } from './others/fibonacci'; export { default as fibonacciMemoization } from './others/fibonacci'; + +// chapter 09 +export { default as BinarySearchTree } from './data-structures/binary-search-tree'; +export { default as AVLTree } from './data-structures/avl-tree'; + +// chapter 10 +export { MinHeap as MinHeap } from './data-structures/heap'; +export { MaxHeap as MaxHeap } from './data-structures/heap'; +export { default as heapSort } from './data-structures/sorting/heap-sort'; diff --git a/src/js/sorting/heap-sort.js b/src/js/sorting/heap-sort.js new file mode 100644 index 00000000..3d783078 --- /dev/null +++ b/src/js/sorting/heap-sort.js @@ -0,0 +1,34 @@ +import { defaultCompare, swap } from '../util'; + +function heapify(array, index, heapSize, compareFn) { + let largest = index; + const left = 2 * index + 1; + const right = 2 * index + 2; + if (left < heapSize && compareFn(array[left], array[index]) > 0) { + largest = left; + } + if (right < heapSize && compareFn(array[right], array[largest]) > 0) { + largest = right; + } + if (largest !== index) { + swap(array, index, largest); + heapify(array, largest, heapSize, compareFn); + } +} + +function buildMaxHeap(array, compareFn) { + for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) { + heapify(array, i, array.length, compareFn); + } + return array; +} + +export default function heapSort(array, compareFn = defaultCompare) { + let heapSize = array.length; + buildMaxHeap(array, compareFn); + while (heapSize > 1) { + swap(array, 0, --heapSize); + heapify(array, 0, heapSize, compareFn); + } + return array; +} diff --git a/src/js/util.js b/src/js/util.js index 1d671762..47bc0f6c 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -24,3 +24,13 @@ export function defaultToString(item) { } return item.toString(); } + +export function swap(array, a, b) { + /* const temp = array[a]; + array[a] = array[b]; + array[b] = temp; */ + [array[a], array[b]] = [array[b], array[a]]; +} +export function reverseCompare(compareFn) { + return (a, b) => compareFn(b, a); +} diff --git a/src/ts/data-structures/graph.ts b/src/ts/data-structures/graph.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/ts/data-structures/heap.ts b/src/ts/data-structures/heap.ts new file mode 100644 index 00000000..f0f8222c --- /dev/null +++ b/src/ts/data-structures/heap.ts @@ -0,0 +1,113 @@ +import { Compare, defaultCompare, ICompareFunction, reverseCompare, swap } from '../util'; + +export class MinHeap { + protected heap: T[] = []; + + constructor(protected compareFn: ICompareFunction = defaultCompare) {} + + private getLeftIndex(index: number) { + return 2 * index + 1; + } + + private getRightIndex(index: number) { + return 2 * index + 2; + } + + private getParentIndex(index: number) { + if (index === 0) { + return undefined; + } + return Math.floor((index - 1) / 2); + } + + size() { + return this.heap.length; + } + + isEmpty() { + return this.size() <= 0; + } + + clear() { + this.heap = []; + } + + findMinimum() { + return this.isEmpty() ? undefined : this.heap[0]; + } + + insert(value: T) { + if (value != null) { + const index = this.heap.length; + this.heap.push(value); + this.siftUp(index); + return true; + } + return false; + } + + private siftDown(index: number) { + let element = index; + const left = this.getLeftIndex(index); + const right = this.getRightIndex(index); + const size = this.size(); + + if (left < size && this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN) { + element = left; + } + + if ( + right < size && + this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN + ) { + element = right; + } + + if (index !== element) { + swap(this.heap, index, element); + this.siftDown(element); + } + } + + private siftUp(index: number): void { + let parent = this.getParentIndex(index); + while (index > 0 && this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN) { + swap(this.heap, parent, index); + index = parent; + parent = this.getParentIndex(index); + } + } + + extract() { + if (this.isEmpty()) { + return undefined; + } + if (this.size() === 1) { + return this.heap.shift(); + } + const removedValue = this.heap.shift(); + this.siftDown(0); + return removedValue; + } + + heapify(array: T[]) { + if (array) { + this.heap = array; + } + + const maxIndex = Math.floor(this.size() / 2) - 1; + + for (let i = 0; i <= maxIndex; i++) { + this.siftDown(i); + } + + return this.heap; + } +} + +export class MaxHeap extends MinHeap { + constructor(protected compareFn: ICompareFunction = defaultCompare) { + super(compareFn); + this.compareFn = reverseCompare(compareFn); + } +} diff --git a/src/ts/index.ts b/src/ts/index.ts index 5afc3398..c1182bae 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -20,10 +20,14 @@ export { fibonacci as fibonacci} from './others/fibonacci'; export { fibonacciIterative as fibonacciIterative} from './others/fibonacci'; export { fibonacciMemoization as fibonacciMemoization} from './others/fibonacci'; -// chapter 08 +// chapter 09 export { default as BinarySearchTree } from './data-structures/binary-search-tree'; export { default as AVLTree } from './data-structures/avl-tree'; +// chapter 10 +export { MinHeap as MinHeap } from './data-structures/heap'; +export { MaxHeap as MaxHeap } from './data-structures/heap'; + /* import { hotPotato } from './others/hot-potato'; import { palindromeChecker } from './others/palindrome-checker'; @@ -34,6 +38,7 @@ import { baseConverter, decimalToBinary } from './others/base-converter'; import StackArray from './data-structures/stack-array'; import Stack from './data-structures/stack'; import { parenthesesChecker } from './others/balanced-symbols'; +import { MinHeap, MaxHeap } from './data-structures/heap'; export { diff --git a/src/ts/sorting/heap-sort.ts b/src/ts/sorting/heap-sort.ts new file mode 100644 index 00000000..094f0842 --- /dev/null +++ b/src/ts/sorting/heap-sort.ts @@ -0,0 +1,37 @@ +import { defaultCompare, ICompareFunction, swap } from '../util'; + +function heapify(array: any[], index: number, heapSize: number, compareFn: ICompareFunction) { + let largest = index; + const left = 2 * index + 1; + const right = 2 * index + 2; + + if (left < heapSize && compareFn(array[left], array[index]) > 0) { + largest = left; + } + + if (right < heapSize && compareFn(array[right], array[largest]) > 0) { + largest = right; + } + + if (largest !== index) { + swap(array, index, largest); + heapify(array, largest, heapSize, compareFn); + } +} + +function buildMaxHeap(array: any[], compareFn: ICompareFunction) { + for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) { + heapify(array, i, array.length, compareFn); + } + return array; +} + +export default function heapSort(array: any[], compareFn = defaultCompare) { + let heapSize = array.length; + buildMaxHeap(array, compareFn); + while (heapSize > 1) { + swap(array, 0, --heapSize); + heapify(array, 0, heapSize, compareFn); + } + return array; +} diff --git a/src/ts/util.ts b/src/ts/util.ts index 80021194..dc0e65ee 100644 --- a/src/ts/util.ts +++ b/src/ts/util.ts @@ -28,3 +28,14 @@ export function defaultToString(item: any): string { } return item.toString(); } + +export function swap(array: any[], a: number, b: number) { + /* const temp = array[a]; + array[a] = array[b]; + array[b] = temp; */ + [array[a], array[b]] = [array[b], array[a]]; +} + +export function reverseCompare(compareFn: ICompareFunction): ICompareFunction { + return (a, b) => compareFn(b, a); +} diff --git a/test/ts/data-structures/heap.spec.ts b/test/ts/data-structures/heap.spec.ts new file mode 100644 index 00000000..fe01b0b2 --- /dev/null +++ b/test/ts/data-structures/heap.spec.ts @@ -0,0 +1,51 @@ +import 'mocha'; +// import { expect } from 'chai'; +import { MinHeap } from '../../../src/ts/index'; +import { MaxHeap } from '../../../src/ts/data-structures/heap'; +import heapSort from '../../../src/ts/sorting/heap-sort'; + +describe('Heap', () => { + let heap: MinHeap; + + beforeEach(() => { + heap = new MinHeap(); + }); + + it('starts empty', () => { + + }); + + it('inserts elements in the AVLTree', () => { + + heap.insert(3); + heap.insert(2); + heap.insert(1); + heap.insert(4); + + heap.extract(); + heap.extract(); + heap.extract(); + heap.extract(); + + heap.isEmpty(); + + const maxHeap = new MaxHeap(); + maxHeap.insert(3); + maxHeap.insert(2); + maxHeap.insert(1); + maxHeap.insert(4); + + maxHeap.extract(); + maxHeap.extract(); + maxHeap.extract(); + maxHeap.extract(); + + maxHeap.isEmpty(); + }); + + it('Heap Sort', () => { + const array = [3, 2, 5, 6, 1, 7, 8, 9]; + + heapSort(array); + }); +}); From 1829d34890cf440bb3a5aeb60ccedce652c6e9ca Mon Sep 17 00:00:00 2001 From: loiane Date: Thu, 21 Dec 2017 16:41:41 -0200 Subject: [PATCH 043/188] chapter 10: [Heap] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- src/js/data-structures/binary-search-tree.js | 56 +++++++++---------- src/js/data-structures/heap.js | 4 +- src/js/index.js | 6 +- src/js/sorting/heap-sort.js | 4 +- src/ts/data-structures/binary-search-tree.ts | 13 ++--- src/ts/data-structures/graph.ts | 16 ++++++ src/ts/data-structures/heap.ts | 4 +- src/ts/sorting/heap-sort.ts | 4 +- 9 files changed, 59 insertions(+), 50 deletions(-) diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index c5a7d232..76bf7080 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=8)}([function(e,t,n){var i,r,u;!function(n,o){r=[t],i=o,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e){"use strict";function t(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;r(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return u(e,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new i.Node(e);if(0===t){var r=this.head;n.next=r,this.head=n}else{var u=this.getElementAt(t-1);n.next=u.next,u.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;u(this,t);var i=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.tail=void 0,i}return a(t,e),s(t,[{key:"push",value:function(e){var t=new r.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.DoublyNode(e),i=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)i=this.tail,i.next=n,n.prev=i,this.tail=n;else{var u=this.getElementAt(t-1);i=u.next,n.next=i,u.next=n,i.prev=n,n.prev=u}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return l;if(1===e){r.push(t.pop());var s={};s[u]=t.toString(),s[o]=i.toString(),s[a]=r.toString(),l.push(s)}else{n(e-1,t,r,i,u,a,o,l),r.push(t.pop());var f={};f[u]=t.toString(),f[o]=i.toString(),f[a]=r.toString(),l.push(f),n(e-1,i,t,r,o,u,a,l)}return l}function i(e){for(var t=new u.default,i=new u.default,r=new u.default,o=e;o>0;o--)t.push(o);return n(e,t,r,i,"source","helper","dest")}function r(e,t,n,i){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?u:(1===e?u.push([t,i]):(r(e-1,t,i,n,u),u.push([t,i]),r(e-1,n,t,i,u)),u)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=i,e.hanoi=r;var u=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(3)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n=e,i=void 0,u="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)u+=t.pop().toString();return u}function i(e,t){var n=new r.default,i=e,u=void 0,o="";if(!(t>=2&&t<=36))return"";for(;i>0;)u=Math.floor(i%t),n.push(u),i=Math.floor(i/t);for(;!n.isEmpty();)o+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return o}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=i;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(3)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n="([{",r=")]}",u=!0,o=0,a=void 0,l=void 0;o=0?t.push(a):t.isEmpty()?u=!1:(l=t.pop(),n.indexOf(l)!==r.indexOf(a)&&(u=!1)),o++;return!(!u||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(5)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e,t){for(var n=new i.default,r=[],u=0;u1;){for(var o=0;o1&&r;)u=t.removeFront(),o=t.removeBack(),u!==o&&(r=!1);return r}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(1)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(e){return e&&e.__esModule?e:{default:e}}(i),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;r(this,t);var o=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return o.equalsFn=e,o.compareFn=i,o}return o(t,e),l(t,[{key:"push",value:function(e){if(this.isEmpty())s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var i=this.getIndexNextSortedElement(e);return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,i)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,i=0;i0&&(u=r,o=i),o.forEach(function(e){u.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new i.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(1),n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i,r){"use strict";function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){return e&&e.__esModule?e:{default:e}}(i),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;u(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(23)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;r(this,e),this.toStrFn=t,this.table={}}return u(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,i=0;i "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})},function(e,t,n){var i,r,u;!function(o,a){r=[t,n(2)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,r){var u=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var o=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,r));return o.key=e,o.value=r,o.isDeleted=u,o}return r(t,e),t}(t.ValuePair)})},function(e,t,n){var i,r,u;!function(n,o){r=[t],i=o,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var i,r,u;!function(n,o){r=[t],i=o,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,i=e,r=2;r<=e;r++)i=n+t,t=n,n=i;return i}function i(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=i})},function(e,t,n){var i,r,u;!function(o,a){r=[e,t,n(0),n(1),n(4)],i=a,void 0!==(u="function"==typeof i?i.apply(t,r):i)&&(e.exports=u)}(0,function(e,t,n,i,r){"use strict";function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(i),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return u(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new r.Node(e),i=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=i,i=this.getElementAt(this.size()),this.head=n,i.next=this.head);else{var u=this.getElementAt(t-1);n.next=u.next,u.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return l;if(1===e){i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s)}else{n(e-1,t,i,r,o,a,u,l),i.push(t.pop());var f={};f[o]=t.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f),n(e-1,r,t,i,u,o,a,l)}return l}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,l=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(l=t.pop(),n.indexOf(l)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),l(t,[{key:"push",value:function(e){if(this.isEmpty())s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(e){return e&&e.__esModule?e:{default:e}}(r),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(25)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(8),n(9)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),s(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(l.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,l=2*t+2;a0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(7)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n 0) { largest = left; } diff --git a/src/ts/data-structures/binary-search-tree.ts b/src/ts/data-structures/binary-search-tree.ts index d02c9541..dd7141ff 100644 --- a/src/ts/data-structures/binary-search-tree.ts +++ b/src/ts/data-structures/binary-search-tree.ts @@ -22,12 +22,10 @@ export default class BinarySearchTree { } else { this.insertNode(node.left, key); } + } else if (node.right == null) { + node.right = new Node(key); } else { - if (node.right == null) { - node.right = new Node(key); - } else { - this.insertNode(node.right, key); - } + this.insertNode(node.right, key); } } @@ -48,10 +46,9 @@ export default class BinarySearchTree { return this.searchNode(node.left, key); } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { return this.searchNode(node.right, key); - } else { - // key is equal to node.item - return true; } + // key is equal to node.item + return true; } inOrderTraverse(callback: Function) { diff --git a/src/ts/data-structures/graph.ts b/src/ts/data-structures/graph.ts index e69de29b..871c5e9f 100644 --- a/src/ts/data-structures/graph.ts +++ b/src/ts/data-structures/graph.ts @@ -0,0 +1,16 @@ +import Dictionary from './dictionary'; + +export default class Graph { + private vertices: T[] = []; + private adjList: Dictionary = new Dictionary(); + + addVertex(v: T) { + this.vertices.push(v); + this.adjList.set(v, []); // initialize adjacency list with array as well; + } + + addEdge(v: T, w: T) { + this.adjList.get(v).push(w); + // adjList.get(w).push(v); //commented to run the improved DFS with topological sorting + } +} diff --git a/src/ts/data-structures/heap.ts b/src/ts/data-structures/heap.ts index f0f8222c..6dc06585 100644 --- a/src/ts/data-structures/heap.ts +++ b/src/ts/data-structures/heap.ts @@ -6,11 +6,11 @@ export class MinHeap { constructor(protected compareFn: ICompareFunction = defaultCompare) {} private getLeftIndex(index: number) { - return 2 * index + 1; + return (2 * index) + 1; } private getRightIndex(index: number) { - return 2 * index + 2; + return (2 * index) + 2; } private getParentIndex(index: number) { diff --git a/src/ts/sorting/heap-sort.ts b/src/ts/sorting/heap-sort.ts index 094f0842..d36ae89a 100644 --- a/src/ts/sorting/heap-sort.ts +++ b/src/ts/sorting/heap-sort.ts @@ -2,8 +2,8 @@ import { defaultCompare, ICompareFunction, swap } from '../util'; function heapify(array: any[], index: number, heapSize: number, compareFn: ICompareFunction) { let largest = index; - const left = 2 * index + 1; - const right = 2 * index + 2; + const left = (2 * index) + 1; + const right = (2 * index) + 2; if (left < heapSize && compareFn(array[left], array[index]) > 0) { largest = left; From 354cf533712117de055b2d5014bb98e82cca8696 Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 23 Dec 2017 10:59:43 -0200 Subject: [PATCH 044/188] chapter 11: [Graphs] --- .eslintrc.json | 5 +- README.md | 1 + examples/PacktDataStructuresAlgorithms.min.js | 2 +- examples/chapter11/01-UsingGraphs.html | 11 ++ examples/chapter11/01-UsingGraphs.js | 23 ++++ examples/chapter11/02-BFS.html | 11 ++ examples/chapter11/02-BFS.js | 54 +++++++++ examples/chapter11/03-DFS.html | 11 ++ examples/chapter11/03-DFS.js | 67 ++++++++++++ examples/chapter11/04-Dijkstra.html | 11 ++ examples/chapter11/04-Dijkstra.js | 18 +++ examples/chapter11/05-Floyd-Warshall.html | 11 ++ examples/chapter11/05-Floyd-Warshall.js | 25 +++++ examples/chapter11/06-Prim.html | 11 ++ examples/chapter11/06-Prim.js | 19 ++++ examples/chapter11/07-Kruskal.html | 11 ++ examples/chapter11/07-Kruskal.js | 19 ++++ examples/index.html | 17 ++- .../algorithms/graph/breadth-first-search.js | 74 +++++++++++++ src/js/algorithms/graph/depth-first-search.js | 86 +++++++++++++++ src/js/algorithms/graph/dijkstra.js | 32 ++++++ src/js/algorithms/graph/floyd-warshall.js | 26 +++++ src/js/algorithms/graph/kruskal.js | 57 ++++++++++ src/js/algorithms/graph/prim.js | 36 ++++++ src/js/data-structures/graph.js | 46 ++++++++ src/js/index.js | 11 ++ .../algorithms/graph/breadth-first-search.ts | 77 +++++++++++++ src/ts/algorithms/graph/depth-first-search.ts | 103 ++++++++++++++++++ src/ts/algorithms/graph/dijkstra.ts | 42 +++++++ src/ts/algorithms/graph/floyd-warshall.ts | 29 +++++ src/ts/algorithms/graph/kruskal.ts | 67 ++++++++++++ src/ts/algorithms/graph/prim.ts | 45 ++++++++ src/ts/data-structures/graph.ts | 52 +++++++-- src/ts/data-structures/red-black-tree.ts | 3 +- 34 files changed, 1100 insertions(+), 13 deletions(-) create mode 100644 examples/chapter11/01-UsingGraphs.html create mode 100644 examples/chapter11/01-UsingGraphs.js create mode 100644 examples/chapter11/02-BFS.html create mode 100644 examples/chapter11/02-BFS.js create mode 100644 examples/chapter11/03-DFS.html create mode 100644 examples/chapter11/03-DFS.js create mode 100644 examples/chapter11/04-Dijkstra.html create mode 100644 examples/chapter11/04-Dijkstra.js create mode 100644 examples/chapter11/05-Floyd-Warshall.html create mode 100644 examples/chapter11/05-Floyd-Warshall.js create mode 100644 examples/chapter11/06-Prim.html create mode 100644 examples/chapter11/06-Prim.js create mode 100644 examples/chapter11/07-Kruskal.html create mode 100644 examples/chapter11/07-Kruskal.js create mode 100644 src/js/algorithms/graph/breadth-first-search.js create mode 100644 src/js/algorithms/graph/depth-first-search.js create mode 100644 src/js/algorithms/graph/dijkstra.js create mode 100644 src/js/algorithms/graph/floyd-warshall.js create mode 100644 src/js/algorithms/graph/kruskal.js create mode 100644 src/js/algorithms/graph/prim.js create mode 100644 src/js/data-structures/graph.js create mode 100644 src/ts/algorithms/graph/breadth-first-search.ts create mode 100644 src/ts/algorithms/graph/depth-first-search.ts create mode 100644 src/ts/algorithms/graph/dijkstra.ts create mode 100644 src/ts/algorithms/graph/floyd-warshall.ts create mode 100644 src/ts/algorithms/graph/kruskal.ts create mode 100644 src/ts/algorithms/graph/prim.ts diff --git a/.eslintrc.json b/.eslintrc.json index 8728a2e3..af313c2f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -26,6 +26,9 @@ "comma-dangle": 0, "no-underscore-dangle": 0, "no-param-reassign": 0, - "no-return-assign": 0 + "no-return-assign": 0, + "no-restricted-globals": 0, + "no-multi-assign": 0, + "prefer-destructuring": ["error", {"object": true, "array": false}] } } diff --git a/README.md b/README.md index 26a15d77..2664eba9 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ Work in Progress. * 08: [Recursion](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter08) * 09: [Trees](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter09) * 10: [Heap](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter10) +* 11: [Graphs](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter11) ### Third Edition Updates diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index 76bf7080..27d8c672 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=10)}([function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return l;if(1===e){i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s)}else{n(e-1,t,i,r,o,a,u,l),i.push(t.pop());var f={};f[o]=t.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f),n(e-1,r,t,i,u,o,a,l)}return l}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,l=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(l=t.pop(),n.indexOf(l)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),l(t,[{key:"push",value:function(e){if(this.isEmpty())s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(e){return e&&e.__esModule?e:{default:e}}(r),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(25)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(8),n(9)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),s(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(l.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,l=2*t+2;a0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(7)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return l;if(1===e){i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s)}else{n(e-1,t,i,r,o,a,u,l),i.push(t.pop());var f={};f[o]=t.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f),n(e-1,r,t,i,u,o,a,l)}return l}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,l=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(l=t.pop(),n.indexOf(l)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),l(t,[{key:"push",value:function(e){if(this.isEmpty())s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(25)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(9),n(10)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),s(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(l.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,l=2*t+2;a0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(8)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];r(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})}])}); \ No newline at end of file diff --git a/examples/chapter11/01-UsingGraphs.html b/examples/chapter11/01-UsingGraphs.html new file mode 100644 index 00000000..49eb9bff --- /dev/null +++ b/examples/chapter11/01-UsingGraphs.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter11/01-UsingGraphs.js b/examples/chapter11/01-UsingGraphs.js new file mode 100644 index 00000000..dde70c0d --- /dev/null +++ b/examples/chapter11/01-UsingGraphs.js @@ -0,0 +1,23 @@ +const { Graph } = PacktDataStructuresAlgorithms; + +const graph = new Graph(); + +const myVertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; + +for (let i = 0; i < myVertices.length; i++) { + graph.addVertex(myVertices[i]); +} +graph.addEdge('A', 'B'); +graph.addEdge('A', 'C'); +graph.addEdge('A', 'D'); +graph.addEdge('C', 'D'); +graph.addEdge('C', 'G'); +graph.addEdge('D', 'G'); +graph.addEdge('D', 'H'); +graph.addEdge('B', 'E'); +graph.addEdge('B', 'F'); +graph.addEdge('E', 'I'); + +console.log('********* printing graph ***********'); + +console.log(graph.toString()); diff --git a/examples/chapter11/02-BFS.html b/examples/chapter11/02-BFS.html new file mode 100644 index 00000000..044da5d6 --- /dev/null +++ b/examples/chapter11/02-BFS.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter11/02-BFS.js b/examples/chapter11/02-BFS.js new file mode 100644 index 00000000..8cf8fe1b --- /dev/null +++ b/examples/chapter11/02-BFS.js @@ -0,0 +1,54 @@ +const { Graph } = PacktDataStructuresAlgorithms; +const { Stack } = PacktDataStructuresAlgorithms; +const { BFS } = PacktDataStructuresAlgorithms; +const { breadthFirstSearch } = PacktDataStructuresAlgorithms; + +const graph = new Graph(); + +const myVertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; + +for (let i = 0; i < myVertices.length; i++) { + graph.addVertex(myVertices[i]); +} +graph.addEdge('A', 'B'); +graph.addEdge('A', 'C'); +graph.addEdge('A', 'D'); +graph.addEdge('C', 'D'); +graph.addEdge('C', 'G'); +graph.addEdge('D', 'G'); +graph.addEdge('D', 'H'); +graph.addEdge('B', 'E'); +graph.addEdge('B', 'F'); +graph.addEdge('E', 'I'); + +console.log('********* printing graph ***********'); + +console.log(graph.toString()); + +console.log('********* bfs with callback ***********'); + +const printNode = (value) => console.log('Visited vertex: ' + value); + +breadthFirstSearch(graph, myVertices[0], printNode); + +console.log('********* sorthest path - BFS ***********'); +var shortestPathA = BFS(graph, myVertices[0]); +console.log(shortestPathA.distances); +console.log(shortestPathA.predecessors); + +//from A to all other vertices +var fromVertex = myVertices[0]; + +for (i = 1; i < myVertices.length; i++) { + var toVertex = myVertices[i], + path = new Stack(); + for (var v = toVertex; v !== fromVertex; v = shortestPathA.predecessors[v]) { + path.push(v); + } + path.push(fromVertex); + var s = path.pop(); + while (!path.isEmpty()) { + s += ' - ' + path.pop(); + } + console.log(s); +} diff --git a/examples/chapter11/03-DFS.html b/examples/chapter11/03-DFS.html new file mode 100644 index 00000000..1a5bd4f3 --- /dev/null +++ b/examples/chapter11/03-DFS.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter11/03-DFS.js b/examples/chapter11/03-DFS.js new file mode 100644 index 00000000..9cb4832b --- /dev/null +++ b/examples/chapter11/03-DFS.js @@ -0,0 +1,67 @@ +const { Graph } = PacktDataStructuresAlgorithms; +const { depthFirstSearch } = PacktDataStructuresAlgorithms; +const { DFS } = PacktDataStructuresAlgorithms; + +let graph = new Graph(); + +let myVertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; + +for (let i = 0; i < myVertices.length; i++) { + graph.addVertex(myVertices[i]); +} +graph.addEdge('A', 'B'); +graph.addEdge('A', 'C'); +graph.addEdge('A', 'D'); +graph.addEdge('C', 'D'); +graph.addEdge('C', 'G'); +graph.addEdge('D', 'G'); +graph.addEdge('D', 'H'); +graph.addEdge('B', 'E'); +graph.addEdge('B', 'F'); +graph.addEdge('E', 'I'); + +console.log('********* printing graph ***********'); + +console.log(graph.toString()); + +console.log('********* dfs with callback ***********'); + +const printNode = value => console.log('Visited vertex: ' + value); + +depthFirstSearch(graph, printNode); + +console.log('********* topological sort - DFS ***********'); + +graph = new Graph(); + +myVertices = ['A', 'B', 'C', 'D', 'E', 'F']; +for (i = 0; i < myVertices.length; i++) { + graph.addVertex(myVertices[i]); +} +graph.addEdge('A', 'C'); +graph.addEdge('A', 'D'); +graph.addEdge('B', 'D'); +graph.addEdge('B', 'E'); +graph.addEdge('C', 'F'); +graph.addEdge('F', 'E'); + +const result = DFS(graph); +console.log(result.discovery); +console.log(result.finished); +console.log(result.predecessors); + +const fTimes = result.finished; +s = ''; +for (let count = 0; count < myVertices.length; count++) { + let max = 0; + let maxName = null; + for (i = 0; i < myVertices.length; i++) { + if (fTimes[myVertices[i]] > max) { + max = fTimes[myVertices[i]]; + maxName = myVertices[i]; + } + } + s += ' - ' + maxName; + delete fTimes[maxName]; +} +console.log(s); diff --git a/examples/chapter11/04-Dijkstra.html b/examples/chapter11/04-Dijkstra.html new file mode 100644 index 00000000..8b9e0f74 --- /dev/null +++ b/examples/chapter11/04-Dijkstra.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter11/04-Dijkstra.js b/examples/chapter11/04-Dijkstra.js new file mode 100644 index 00000000..fbba7ec1 --- /dev/null +++ b/examples/chapter11/04-Dijkstra.js @@ -0,0 +1,18 @@ +const { dijkstra } = PacktDataStructuresAlgorithms; + +const graph = [ + [0, 2, 4, 0, 0, 0], + [0, 0, 2, 4, 2, 0], + [0, 0, 0, 0, 3, 0], + [0, 0, 0, 0, 0, 2], + [0, 0, 0, 3, 0, 2], + [0, 0, 0, 0, 0, 0] +]; + +console.log("********* Dijkstra's Algorithm - Shortest Path ***********"); + +var dist = dijkstra(graph, 0); + +for (i = 0; i < dist.length; i++){ + console.log(i + '\t\t' + dist[i]); +} diff --git a/examples/chapter11/05-Floyd-Warshall.html b/examples/chapter11/05-Floyd-Warshall.html new file mode 100644 index 00000000..be411625 --- /dev/null +++ b/examples/chapter11/05-Floyd-Warshall.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter11/05-Floyd-Warshall.js b/examples/chapter11/05-Floyd-Warshall.js new file mode 100644 index 00000000..18c2dee6 --- /dev/null +++ b/examples/chapter11/05-Floyd-Warshall.js @@ -0,0 +1,25 @@ +const { floydWarshall } = PacktDataStructuresAlgorithms; + +const INF = Infinity; +const graph = [ + [INF, 2, 4, INF, INF, INF], + [INF, INF, 2, 4, 2, INF], + [INF, INF, INF, INF, 3, INF], + [INF, INF, INF, INF, INF, 2], + [INF, INF, INF, 3, INF, 2], + [INF, INF, INF, INF, INF, INF] +]; + +console.log('********* Floyd-Warshall Algorithm - All-Pairs Shortest Path ***********'); + +dist = floydWarshall(graph); + +let s = ''; +for (let i = 0; i < dist.length; ++i) { + s = ''; + for (var j = 0; j < dist.length; ++j) { + if (dist[i][j] === INF) s += 'INF '; + else s += dist[i][j] + ' '; + } + console.log(s); +} diff --git a/examples/chapter11/06-Prim.html b/examples/chapter11/06-Prim.html new file mode 100644 index 00000000..7cbb2537 --- /dev/null +++ b/examples/chapter11/06-Prim.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter11/06-Prim.js b/examples/chapter11/06-Prim.js new file mode 100644 index 00000000..cb971a4e --- /dev/null +++ b/examples/chapter11/06-Prim.js @@ -0,0 +1,19 @@ +const { prim } = PacktDataStructuresAlgorithms; + +const graph = [ + [0, 2, 4, 0, 0, 0], + [2, 0, 2, 4, 2, 0], + [4, 2, 0, 0, 3, 0], + [0, 4, 0, 0, 3, 2], + [0, 2, 3, 3, 0, 2], + [0, 0, 0, 2, 2, 0] +]; + +console.log("********* Prim's Algorithm - Minimum Spanning Tree ***********"); + +const parent = prim(graph); + +console.log('Edge Weight'); +for (let i = 1; i < graph.length; i++) { + console.log(parent[i] + ' - ' + i + ' ' + graph[i][parent[i]]); +} diff --git a/examples/chapter11/07-Kruskal.html b/examples/chapter11/07-Kruskal.html new file mode 100644 index 00000000..89e214fb --- /dev/null +++ b/examples/chapter11/07-Kruskal.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter11/07-Kruskal.js b/examples/chapter11/07-Kruskal.js new file mode 100644 index 00000000..460fbd83 --- /dev/null +++ b/examples/chapter11/07-Kruskal.js @@ -0,0 +1,19 @@ +const { kruskal } = PacktDataStructuresAlgorithms; + +const graph = [ + [0, 2, 4, 0, 0, 0], + [2, 0, 2, 4, 2, 0], + [4, 2, 0, 0, 3, 0], + [0, 4, 0, 0, 3, 2], + [0, 2, 3, 3, 0, 2], + [0, 0, 0, 2, 2, 0] +]; + +console.log('********* Kruskal Algorithm - Minimum Spanning Tree ***********'); + +const parent = kruskal(graph); + +console.log('Edge Weight'); +for (i = 1; i < graph.length; i++) { + console.log(parent[i] + ' - ' + i + ' ' + graph[i][parent[i]]); +} diff --git a/examples/index.html b/examples/index.html index 068c5626..5a9bb80c 100644 --- a/examples/index.html +++ b/examples/index.html @@ -46,6 +46,9 @@ 06 07 08 + 09 + 10 + 11
@@ -187,9 +190,19 @@
-
+
- Soon. +
diff --git a/src/js/algorithms/graph/breadth-first-search.js b/src/js/algorithms/graph/breadth-first-search.js new file mode 100644 index 00000000..7cf3f395 --- /dev/null +++ b/src/js/algorithms/graph/breadth-first-search.js @@ -0,0 +1,74 @@ +import Queue from '../../data-structures/queue'; + +const Colors = { + WHITE: 0, + GREY: 1, + BLACK: 2 +}; + +const initializeColor = vertices => { + const color = {}; + for (let i = 0; i < vertices.length; i++) { + color[vertices[i]] = Colors.WHITE; + } + return color; +}; + +export const breadthFirstSearch = (graph, startVertex, callback) => { + const vertices = graph.getVertices(); + const adjList = graph.getAdjList(); + const color = initializeColor(vertices); + const queue = new Queue(); + + queue.enqueue(startVertex); + + while (!queue.isEmpty()) { + const u = queue.dequeue(); + const neighbors = adjList.get(u); + color[u] = Colors.GREY; + for (let i = 0; i < neighbors.length; i++) { + const w = neighbors[i]; + if (color[w] === Colors.WHITE) { + color[w] = Colors.GREY; + queue.enqueue(w); + } + } + color[u] = Colors.BLACK; + if (callback) { + callback(u); + } + } +}; + +export const BFS = (graph, startVertex) => { + const vertices = graph.getVertices(); + const adjList = graph.getAdjList(); + const color = initializeColor(vertices); + const queue = new Queue(); + const distances = {}; + const predecessors = {}; + queue.enqueue(startVertex); + for (let i = 0; i < vertices.length; i++) { + distances[vertices[i]] = 0; + predecessors[vertices[i]] = null; + } + while (!queue.isEmpty()) { + const u = queue.dequeue(); + const neighbors = adjList.get(u); + color[u] = Colors.GREY; + for (let i = 0; i < neighbors.length; i++) { + const w = neighbors[i]; + if (color[w] === Colors.WHITE) { + color[w] = Colors.GREY; + distances[w] = distances[u] + 1; + predecessors[w] = u; + queue.enqueue(w); + } + } + color[u] = Colors.BLACK; + } + return { + distances, + predecessors + }; +}; diff --git a/src/js/algorithms/graph/depth-first-search.js b/src/js/algorithms/graph/depth-first-search.js new file mode 100644 index 00000000..7d91d261 --- /dev/null +++ b/src/js/algorithms/graph/depth-first-search.js @@ -0,0 +1,86 @@ +// import Graph from '../../data-structures/graph'; + +const Colors = { + WHITE: 0, + GREY: 1, + BLACK: 2 +}; + +const initializeColor = vertices => { + const color = {}; + for (let i = 0; i < vertices.length; i++) { + color[vertices[i]] = Colors.WHITE; + } + return color; +}; + +const depthFirstSearchVisit = (u, color, adjList, callback) => { + color[u] = 'grey'; + if (callback) { + callback(u); + } + // console.log('Discovered ' + u); + const neighbors = adjList.get(u); + for (let i = 0; i < neighbors.length; i++) { + const w = neighbors[i]; + if (color[w] === Colors.WHITE) { + depthFirstSearchVisit(w, color, adjList, callback); + } + } + color[u] = Colors.BLACK; + // console.log('explored ' + u); +}; + +export const depthFirstSearch = (graph, callback) => { + const vertices = graph.getVertices(); + const adjList = graph.getAdjList(); + const color = initializeColor(vertices); + + for (let i = 0; i < vertices.length; i++) { + if (color[vertices[i]] === Colors.WHITE) { + depthFirstSearchVisit(vertices[i], color, adjList, callback); + } + } +}; + +const DFSVisit = (u, color, d, f, p, time, adjList) => { + // console.log('discovered ' + u); + color[u] = Colors.GREY; + d[u] = ++time; + const neighbors = adjList.get(u); + for (let i = 0; i < neighbors.length; i++) { + const w = neighbors[i]; + if (color[w] === Colors.WHITE) { + p[w] = u; + DFSVisit(w, color, d, f, p, time, adjList); + } + } + color[u] = Colors.BLACK; + f[u] = ++time; + // console.log('explored ' + u); +}; + +export const DFS = graph => { + const vertices = graph.getVertices(); + const adjList = graph.getAdjList(); + const color = initializeColor(vertices); + const d = {}; + const f = {}; + const p = {}; + const time = 0; + for (let i = 0; i < vertices.length; i++) { + f[vertices[i]] = 0; + d[vertices[i]] = 0; + p[vertices[i]] = null; + } + for (let i = 0; i < vertices.length; i++) { + if (color[vertices[i]] === Colors.WHITE) { + DFSVisit(vertices[i], color, d, f, p, time, adjList); + } + } + return { + discovery: d, + finished: f, + predecessors: p + }; +}; diff --git a/src/js/algorithms/graph/dijkstra.js b/src/js/algorithms/graph/dijkstra.js new file mode 100644 index 00000000..ec223687 --- /dev/null +++ b/src/js/algorithms/graph/dijkstra.js @@ -0,0 +1,32 @@ +const INF = Number.MAX_SAFE_INTEGER; +const minDistance = (dist, visited) => { + let min = INF; + let minIndex = -1; + for (let v = 0; v < dist.length; v++) { + if (visited[v] === false && dist[v] <= min) { + min = dist[v]; + minIndex = v; + } + } + return minIndex; +}; +export const dijkstra = (graph, src) => { + const dist = []; + const visited = []; + const { length } = graph; + for (let i = 0; i < length; i++) { + dist[i] = INF; + visited[i] = false; + } + dist[src] = 0; + for (let i = 0; i < length - 1; i++) { + const u = minDistance(dist, visited); + visited[u] = true; + for (let v = 0; v < length; v++) { + if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) { + dist[v] = dist[u] + graph[u][v]; + } + } + } + return dist; +}; diff --git a/src/js/algorithms/graph/floyd-warshall.js b/src/js/algorithms/graph/floyd-warshall.js new file mode 100644 index 00000000..d8bb875e --- /dev/null +++ b/src/js/algorithms/graph/floyd-warshall.js @@ -0,0 +1,26 @@ +export const floydWarshall = graph => { + const dist = []; + const { length } = graph; + for (let i = 0; i < length; i++) { + dist[i] = []; + for (let j = 0; j < length; j++) { + if (i === j) { + dist[i][j] = 0; + } else if (!isFinite(graph[i][j])) { + dist[i][j] = Infinity; + } else { + dist[i][j] = graph[i][j]; + } + } + } + for (let k = 0; k < length; k++) { + for (let i = 0; i < length; i++) { + for (let j = 0; j < length; j++) { + if (dist[i][k] + dist[k][j] < dist[i][j]) { + dist[i][j] = dist[i][k] + dist[k][j]; + } + } + } + } + return dist; +}; diff --git a/src/js/algorithms/graph/kruskal.js b/src/js/algorithms/graph/kruskal.js new file mode 100644 index 00000000..d1435c28 --- /dev/null +++ b/src/js/algorithms/graph/kruskal.js @@ -0,0 +1,57 @@ +const INF = Number.MAX_SAFE_INTEGER; +const find = (i, parent) => { + while (parent[i]) { + i = parent[i]; // eslint-disable-line prefer-destructuring + } + return i; +}; +const union = (i, j, parent) => { + if (i !== j) { + parent[j] = i; + return true; + } + return false; +}; +const initializeCost = graph => { + const cost = []; + const { length } = graph; + for (let i = 0; i < length; i++) { + cost[i] = []; + for (let j = 0; j < length; j++) { + if (graph[i][j] === 0) { + cost[i][j] = INF; + } else { + cost[i][j] = graph[i][j]; + } + } + } + return cost; +}; +export const kruskal = graph => { + const { length } = graph; + const parent = []; + let ne = 0; + let a; + let b; + let u; + let v; + const cost = initializeCost(graph); + while (ne < length - 1) { + for (let i = 0, min = INF; i < length; i++) { + for (let j = 0; j < length; j++) { + if (cost[i][j] < min) { + min = cost[i][j]; + a = u = i; + b = v = j; + } + } + } + u = find(u, parent); + v = find(v, parent); + if (union(u, v, parent)) { + ne++; + } + cost[a][b] = cost[b][a] = INF; + } + return parent; +}; diff --git a/src/js/algorithms/graph/prim.js b/src/js/algorithms/graph/prim.js new file mode 100644 index 00000000..d65fff42 --- /dev/null +++ b/src/js/algorithms/graph/prim.js @@ -0,0 +1,36 @@ +const INF = Number.MAX_SAFE_INTEGER; +const minKey = (graph, key, visited) => { + // Initialize min value + let min = INF; + let minIndex = 0; + for (let v = 0; v < graph.length; v++) { + if (visited[v] === false && key[v] < min) { + min = key[v]; + minIndex = v; + } + } + return minIndex; +}; +export const prim = graph => { + const parent = []; + const key = []; + const visited = []; + const { length } = graph; + for (let i = 0; i < length; i++) { + key[i] = INF; + visited[i] = false; + } + key[0] = 0; + parent[0] = -1; + for (let i = 0; i < length - 1; i++) { + const u = minKey(graph, key, visited); + visited[u] = true; + for (let v = 0; v < length; v++) { + if (graph[u][v] && visited[v] === false && graph[u][v] < key[v]) { + parent[v] = u; + key[v] = graph[u][v]; + } + } + } + return parent; +}; diff --git a/src/js/data-structures/graph.js b/src/js/data-structures/graph.js new file mode 100644 index 00000000..c197adc8 --- /dev/null +++ b/src/js/data-structures/graph.js @@ -0,0 +1,46 @@ +import Dictionary from './dictionary'; + +export default class Graph { + constructor(isDirected = false) { + this.isDirected = isDirected; + this.vertices = []; + this.adjList = new Dictionary(); + } + addVertex(v) { + if (!this.vertices.includes(v)) { + this.vertices.push(v); + this.adjList.set(v, []); // initialize adjacency list with array as well; + } + } + addEdge(a, b) { + if (!this.adjList.get(a)) { + this.addVertex(a); + } + if (!this.adjList.get(b)) { + this.addVertex(b); + } + this.adjList.get(a).push(b); + if (!this.isDirected) { + // this.adjList.get(b).push(a); + } + // adjList.get(w).push(v); //commented to run the improved DFS with topological sorting + } + getVertices() { + return this.vertices; + } + getAdjList() { + return this.adjList; + } + toString() { + let s = ''; + for (let i = 0; i < this.vertices.length; i++) { + s += `${this.vertices[i]} -> `; + const neighbors = this.adjList.get(this.vertices[i]); + for (let j = 0; j < neighbors.length; j++) { + s += `${neighbors[j]} `; + } + s += '\n'; + } + return s; + } +} diff --git a/src/js/index.js b/src/js/index.js index a54e678c..731232c1 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -50,3 +50,14 @@ export { default as AVLTree } from './data-structures/avl-tree'; export { MinHeap } from './data-structures/heap'; export { MaxHeap } from './data-structures/heap'; export { default as heapSort } from './sorting/heap-sort'; + +// chapter 11 +export { default as Graph } from './data-structures/graph'; +export { breadthFirstSearch } from './algorithms/graph/breadth-first-search'; +export { BFS } from './algorithms/graph/breadth-first-search'; +export { depthFirstSearch } from './algorithms/graph/depth-first-search'; +export { DFS } from './algorithms/graph/depth-first-search'; +export { dijkstra } from './algorithms/graph/dijkstra'; +export { floydWarshall } from './algorithms/graph/floyd-warshall'; +export { prim } from './algorithms/graph/prim'; +export { kruskal } from './algorithms/graph/kruskal'; diff --git a/src/ts/algorithms/graph/breadth-first-search.ts b/src/ts/algorithms/graph/breadth-first-search.ts new file mode 100644 index 00000000..147bebe7 --- /dev/null +++ b/src/ts/algorithms/graph/breadth-first-search.ts @@ -0,0 +1,77 @@ +import Graph from '../../data-structures/graph'; +import Queue from '../../data-structures/queue'; + +enum Colors { + WHITE = 0, + GREY = 1, + BLACK = 2 +} + +const initializeColor = (vertices: (string | number)[]) => { + const color: any = {}; + for (let i = 0; i < vertices.length; i++) { + color[vertices[i]] = Colors.WHITE; + } + return color; +}; + +export const breadthFirstSearch = (graph: Graph, callback: Function) => { + const vertices = graph.getVertices(); + const adjList = graph.getAdjList(); + const color = initializeColor(vertices); + const queue = new Queue(); + queue.enqueue(vertices); + + while (!queue.isEmpty()) { + const u = queue.dequeue(), + neighbors = adjList.get(u); + color[u] = Colors.GREY; + for (let i = 0; i < neighbors.length; i++) { + const w = neighbors[i]; + if (color[w] === Colors.WHITE) { + color[w] = Colors.GREY; + queue.enqueue(w); + } + } + color[u] = Colors.BLACK; + if (callback) { + callback(u); + } + } +}; + +export const bfs = (graph: Graph, startVertex: number) => { + const vertices = graph.getVertices(); + const adjList = graph.getAdjList(); + const color = initializeColor(vertices); + const queue = new Queue(); + const distances: any = {}; + const predecessors: any = {}; + queue.enqueue(startVertex); + + for (let i = 0; i < vertices.length; i++) { + distances[vertices[i]] = 0; + predecessors[vertices[i]] = null; + } + + while (!queue.isEmpty()) { + const u = queue.dequeue(), + neighbors = adjList.get(u); + color[u] = Colors.GREY; + for (let i = 0; i < neighbors.length; i++) { + const w = neighbors[i]; + if (color[w] === Colors.WHITE) { + color[w] = Colors.GREY; + distances[w] = distances[u] + 1; + predecessors[w] = u; + queue.enqueue(w); + } + } + color[u] = Colors.BLACK; + } + + return { + distances: distances, + predecessors: predecessors + }; +}; diff --git a/src/ts/algorithms/graph/depth-first-search.ts b/src/ts/algorithms/graph/depth-first-search.ts new file mode 100644 index 00000000..e47ef54c --- /dev/null +++ b/src/ts/algorithms/graph/depth-first-search.ts @@ -0,0 +1,103 @@ +import Graph from '../../data-structures/graph'; + +enum Colors { + WHITE = 0, + GREY = 1, + BLACK = 2 +} + +const initializeColor = (vertices: (string | number)[]) => { + const color: any = {}; + for (let i = 0; i < vertices.length; i++) { + color[vertices[i]] = Colors.WHITE; + } + return color; +}; + +const depthFirstSearchVisit = ( + u: string | number, + color: any, + adjList: any, + callback: Function +) => { + color[u] = 'grey'; + if (callback) { + callback(u); + } + // console.log('Discovered ' + u); + const neighbors = adjList.get(u); + for (let i = 0; i < neighbors.length; i++) { + const w = neighbors[i]; + if (color[w] === Colors.WHITE) { + depthFirstSearchVisit(w, color, adjList, callback); + } + } + color[u] = Colors.BLACK; + // console.log('explored ' + u); +}; + +export const depthFirstSearch = (graph: Graph, callback: Function) => { + const vertices = graph.getVertices(); + const adjList = graph.getAdjList(); + const color = initializeColor(vertices); + + for (let i = 0; i < vertices.length; i++) { + if (color[vertices[i]] === Colors.WHITE) { + depthFirstSearchVisit(vertices[i], color, adjList, callback); + } + } +}; + +const DFSVisit = ( + u: string | number, + color: any, + d: any, + f: any, + p: any, + time: number, + adjList: any +) => { + // console.log('discovered ' + u); + color[u] = Colors.GREY; + d[u] = ++time; + const neighbors = adjList.get(u); + for (let i = 0; i < neighbors.length; i++) { + const w = neighbors[i]; + if (color[w] === Colors.WHITE) { + p[w] = u; + DFSVisit(w, color, d, f, p, time, adjList); + } + } + color[u] = Colors.BLACK; + f[u] = ++time; + // console.log('explored ' + u); +}; + +export const DFS = (graph: Graph) => { + + const vertices = graph.getVertices(); + const adjList = graph.getAdjList(); + const color = initializeColor(vertices); + const d: any = {}; + const f: any = {}; + const p: any = {}; + const time = 0; + + for (let i = 0; i < vertices.length; i++) { + f[vertices[i]] = 0; + d[vertices[i]] = 0; + p[vertices[i]] = null; + } + + for (let i = 0; i < vertices.length; i++) { + if (color[vertices[i]] === Colors.WHITE) { + DFSVisit(vertices[i], color, d, f, p, time, adjList); + } + } + + return { + discovery: d, + finished: f, + predecessors: p + }; +}; diff --git a/src/ts/algorithms/graph/dijkstra.ts b/src/ts/algorithms/graph/dijkstra.ts new file mode 100644 index 00000000..a3dd4752 --- /dev/null +++ b/src/ts/algorithms/graph/dijkstra.ts @@ -0,0 +1,42 @@ +const INF = Number.MAX_SAFE_INTEGER; + +const minDistance = (dist: number[], visited: boolean[]) => { + let min = INF; + let minIndex = -1; + + for (let v = 0; v < dist.length; v++) { + if (visited[v] === false && dist[v] <= min) { + min = dist[v]; + minIndex = v; + } + } + + return minIndex; +}; + +export const dijkstra = (graph: number[][], src: number) => { + const dist: number[] = []; + const visited: boolean[] = []; + const length = graph.length; + + for (let i = 0; i < length; i++) { + dist[i] = INF; + visited[i] = false; + } + + dist[src] = 0; + + for (let i = 0; i < length - 1; i++) { + const u = minDistance(dist, visited); + + visited[u] = true; + + for (let v = 0; v < length; v++) { + if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) { + dist[v] = dist[u] + graph[u][v]; + } + } + } + + return dist; +}; diff --git a/src/ts/algorithms/graph/floyd-warshall.ts b/src/ts/algorithms/graph/floyd-warshall.ts new file mode 100644 index 00000000..7699c6e8 --- /dev/null +++ b/src/ts/algorithms/graph/floyd-warshall.ts @@ -0,0 +1,29 @@ +export const floydWarshall = (graph: number[][]) => { + const dist: number[][] = []; + const length = graph.length; + + for (let i = 0; i < length; i++) { + dist[i] = []; + for (let j = 0; j < length; j++) { + if (i === j) { + dist[i][j] = 0; + } else if (!isFinite(graph[i][j])) { + dist[i][j] = Infinity; + } else { + dist[i][j] = graph[i][j]; + } + } + } + + for (let k = 0; k < length; k++) { + for (let i = 0; i < length; i++) { + for (let j = 0; j < length; j++) { + if (dist[i][k] + dist[k][j] < dist[i][j]) { + dist[i][j] = dist[i][k] + dist[k][j]; + } + } + } + } + + return dist; +}; diff --git a/src/ts/algorithms/graph/kruskal.ts b/src/ts/algorithms/graph/kruskal.ts new file mode 100644 index 00000000..978b1e3b --- /dev/null +++ b/src/ts/algorithms/graph/kruskal.ts @@ -0,0 +1,67 @@ +const INF = Number.MAX_SAFE_INTEGER; + +const find = (i: number, parent: number[]) => { + while (parent[i]) { + i = parent[i]; + } + return i; +}; + +const union = (i: number, j: number, parent: number[]) => { + if (i !== j) { + parent[j] = i; + return true; + } + return false; +}; + +const initializeCost = (graph: number[][]) => { + const cost: number[][] = []; + const length = graph.length; + for (let i = 0; i < length; i++) { + cost[i] = []; + for (let j = 0; j < length; j++) { + if (graph[i][j] === 0) { + cost[i][j] = INF; + } else { + cost[i][j] = graph[i][j]; + } + } + } + return cost; +}; + +export const kruskal = (graph: number[][]) => { + const length = graph.length; + const parent: number[] = []; + let ne = 0; + let a; + let b; + let u; + let v; + + const cost = initializeCost(graph); + + while (ne < length - 1) { + for (let i = 0, min = INF; i < length; i++) { + for (let j = 0; j < length; j++) { + if (cost[i][j] < min) { + min = cost[i][j]; + a = u = i; + b = v = j; + } + } + } + + u = find(u, parent); + v = find(v, parent); + + if (union(u, v, parent)) { + ne++; + } + + cost[a][b] = cost[b][a] = INF; + } + + return parent; +}; diff --git a/src/ts/algorithms/graph/prim.ts b/src/ts/algorithms/graph/prim.ts new file mode 100644 index 00000000..85892d03 --- /dev/null +++ b/src/ts/algorithms/graph/prim.ts @@ -0,0 +1,45 @@ +const INF = Number.MAX_SAFE_INTEGER; + +const minKey = (graph: number[][], key: number[], visited: boolean[]) => { + // Initialize min value + let min = INF; + let minIndex = 0; + + for (let v = 0; v < graph.length; v++) { + if (visited[v] === false && key[v] < min) { + min = key[v]; + minIndex = v; + } + } + + return minIndex; +}; + +export const prim = (graph: number[][]) => { + const parent: number[] = []; + const key: number[] = []; + const visited: boolean[] = []; + const length = graph.length; + + for (let i = 0; i < length; i++) { + key[i] = INF; + visited[i] = false; + } + + key[0] = 0; + parent[0] = -1; + + for (let i = 0; i < length - 1; i++) { + const u = minKey(graph, key, visited); + visited[u] = true; + + for (let v = 0; v < length; v++) { + if (graph[u][v] && visited[v] === false && graph[u][v] < key[v]) { + parent[v] = u; + key[v] = graph[u][v]; + } + } + } + + return parent; +}; diff --git a/src/ts/data-structures/graph.ts b/src/ts/data-structures/graph.ts index 871c5e9f..2123d407 100644 --- a/src/ts/data-structures/graph.ts +++ b/src/ts/data-structures/graph.ts @@ -1,16 +1,52 @@ import Dictionary from './dictionary'; -export default class Graph { - private vertices: T[] = []; - private adjList: Dictionary = new Dictionary(); +export default class Graph { + private vertices: (string | number)[] = []; + private adjList: Dictionary = new Dictionary(); - addVertex(v: T) { - this.vertices.push(v); - this.adjList.set(v, []); // initialize adjacency list with array as well; + constructor(private isDirected = false) {} + + addVertex(v: string | number) { + if (!this.vertices.includes(v)) { + this.vertices.push(v); + this.adjList.set(v, []); // initialize adjacency list with array as well; + } } - addEdge(v: T, w: T) { - this.adjList.get(v).push(w); + addEdge(a: string | number, b: string | number) { + if (!this.adjList.get(a)) { + this.addVertex(a); + } + if (!this.adjList.get(b)) { + this.addVertex(b); + } + + this.adjList.get(a).push(b); + + if (!this.isDirected) { + this.adjList.get(b).push(a); + } // adjList.get(w).push(v); //commented to run the improved DFS with topological sorting } + + getVertices() { + return this.vertices; + } + + getAdjList() { + return this.adjList; + } + + toString() { + let s = ''; + for (let i = 0; i < this.vertices.length; i++) { + s += this.vertices[i] + ' -> '; + const neighbors = this.adjList.get(this.vertices[i]); + for (let j = 0; j < neighbors.length; j++) { + s += neighbors[j] + ' '; + } + s += '\n'; + } + return s; + } } diff --git a/src/ts/data-structures/red-black-tree.ts b/src/ts/data-structures/red-black-tree.ts index d7730cf7..001a2fb4 100644 --- a/src/ts/data-structures/red-black-tree.ts +++ b/src/ts/data-structures/red-black-tree.ts @@ -1,4 +1,4 @@ -import { Compare, defaultCompare, ICompareFunction } from '../util'; +/*import { Compare, defaultCompare, ICompareFunction } from '../util'; import BinarySearchTree from './binary-search-tree'; import { Node } from './models/node'; @@ -8,3 +8,4 @@ export default class RedBlackTree extends BinarySearchTree { super(compareFn); } } +*/ From 2ca9447ee7f015361cbd847f326b9b8e41d50f80 Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 23 Dec 2017 16:36:06 -0200 Subject: [PATCH 045/188] moving heap-sort to algorithms/sorting --- src/js/{ => algorithms}/sorting/heap-sort.js | 0 src/js/index.js | 2 +- src/ts/{ => algorithms}/sorting/heap-sort.ts | 0 src/ts/index.ts | 12 ++++++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) rename src/js/{ => algorithms}/sorting/heap-sort.js (100%) rename src/ts/{ => algorithms}/sorting/heap-sort.ts (100%) diff --git a/src/js/sorting/heap-sort.js b/src/js/algorithms/sorting/heap-sort.js similarity index 100% rename from src/js/sorting/heap-sort.js rename to src/js/algorithms/sorting/heap-sort.js diff --git a/src/js/index.js b/src/js/index.js index 731232c1..8e468247 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -49,7 +49,7 @@ export { default as AVLTree } from './data-structures/avl-tree'; // chapter 10 export { MinHeap } from './data-structures/heap'; export { MaxHeap } from './data-structures/heap'; -export { default as heapSort } from './sorting/heap-sort'; +export { default as heapSort } from './algorithms/sorting/heap-sort'; // chapter 11 export { default as Graph } from './data-structures/graph'; diff --git a/src/ts/sorting/heap-sort.ts b/src/ts/algorithms/sorting/heap-sort.ts similarity index 100% rename from src/ts/sorting/heap-sort.ts rename to src/ts/algorithms/sorting/heap-sort.ts diff --git a/src/ts/index.ts b/src/ts/index.ts index c1182bae..589f2106 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -27,6 +27,18 @@ export { default as AVLTree } from './data-structures/avl-tree'; // chapter 10 export { MinHeap as MinHeap } from './data-structures/heap'; export { MaxHeap as MaxHeap } from './data-structures/heap'; +export { default as heapSort } from './algorithms/sorting/heap-sort'; + +// chapter 11 +export { default as Graph } from './data-structures/graph'; +export { breadthFirstSearch as breadthFirstSearch } from './algorithms/graph/breadth-first-search'; +export { bfs as BFS } from './algorithms/graph/breadth-first-search'; +export { depthFirstSearch as depthFirstSearch } from './algorithms/graph/depth-first-search'; +export { DFS as DFS } from './algorithms/graph/depth-first-search'; +export { dijkstra as dijkstra } from './algorithms/graph/dijkstra'; +export { floydWarshall as floydWarshall } from './algorithms/graph/floyd-warshall'; +export { prim as prim } from './algorithms/graph/prim'; +export { kruskal as kruskal } from './algorithms/graph/kruskal'; /* import { hotPotato } from './others/hot-potato'; From d916fb1d859705760cf60795ef19b3afdc400d4a Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 23 Dec 2017 16:40:55 -0200 Subject: [PATCH 046/188] moved heap-sort to algorithms/sorting --- src/js/algorithms/sorting/heap-sort.js | 2 +- src/ts/algorithms/sorting/heap-sort.ts | 2 +- test/ts/data-structures/heap.spec.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/js/algorithms/sorting/heap-sort.js b/src/js/algorithms/sorting/heap-sort.js index 812e3239..ff1c10f1 100644 --- a/src/js/algorithms/sorting/heap-sort.js +++ b/src/js/algorithms/sorting/heap-sort.js @@ -1,4 +1,4 @@ -import { defaultCompare, swap } from '../util'; +import { defaultCompare, swap } from '../../util'; function heapify(array, index, heapSize, compareFn) { let largest = index; diff --git a/src/ts/algorithms/sorting/heap-sort.ts b/src/ts/algorithms/sorting/heap-sort.ts index d36ae89a..7f461860 100644 --- a/src/ts/algorithms/sorting/heap-sort.ts +++ b/src/ts/algorithms/sorting/heap-sort.ts @@ -1,4 +1,4 @@ -import { defaultCompare, ICompareFunction, swap } from '../util'; +import { defaultCompare, ICompareFunction, swap } from '../../util'; function heapify(array: any[], index: number, heapSize: number, compareFn: ICompareFunction) { let largest = index; diff --git a/test/ts/data-structures/heap.spec.ts b/test/ts/data-structures/heap.spec.ts index fe01b0b2..7296bf63 100644 --- a/test/ts/data-structures/heap.spec.ts +++ b/test/ts/data-structures/heap.spec.ts @@ -2,7 +2,7 @@ import 'mocha'; // import { expect } from 'chai'; import { MinHeap } from '../../../src/ts/index'; import { MaxHeap } from '../../../src/ts/data-structures/heap'; -import heapSort from '../../../src/ts/sorting/heap-sort'; +import heapSort from '../../../src/ts/algorithms/sorting/heap-sort'; describe('Heap', () => { let heap: MinHeap; From 9607ab504273558622dd0f861cd8c7ec24624263 Mon Sep 17 00:00:00 2001 From: loiane Date: Mon, 25 Dec 2017 19:01:40 -0200 Subject: [PATCH 047/188] chapter 11: [Graphs] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- examples/chapter11/02-BFS.js | 18 +++++++++--------- examples/chapter11/03-DFS.js | 8 ++++---- src/js/algorithms/graph/depth-first-search.js | 2 +- src/js/algorithms/graph/prim.js | 2 +- src/js/data-structures/graph.js | 3 +-- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index 27d8c672..30aba433 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=11)}([function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return l;if(1===e){i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s)}else{n(e-1,t,i,r,o,a,u,l),i.push(t.pop());var f={};f[o]=t.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f),n(e-1,r,t,i,u,o,a,l)}return l}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,l=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(l=t.pop(),n.indexOf(l)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),l(t,[{key:"push",value:function(e){if(this.isEmpty())s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(25)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(9),n(10)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),s(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(l.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,l=2*t+2;a0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(8)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];r(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=11)}([function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return l;if(1===e){i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s)}else{n(e-1,t,i,r,o,a,u,l),i.push(t.pop());var f={};f[o]=t.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f),n(e-1,r,t,i,u,o,a,l)}return l}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,l=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(l=t.pop(),n.indexOf(l)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),l(t,[{key:"push",value:function(e){if(this.isEmpty())s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(25)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(9),n(10)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),s(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(l.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,l=2*t+2;a0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(8)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];r(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected||this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})}])}); \ No newline at end of file diff --git a/examples/chapter11/02-BFS.js b/examples/chapter11/02-BFS.js index 8cf8fe1b..d65c8b66 100644 --- a/examples/chapter11/02-BFS.js +++ b/examples/chapter11/02-BFS.js @@ -27,26 +27,26 @@ console.log(graph.toString()); console.log('********* bfs with callback ***********'); -const printNode = (value) => console.log('Visited vertex: ' + value); +const printVertex = (value) => console.log('Visited vertex: ' + value); -breadthFirstSearch(graph, myVertices[0], printNode); +breadthFirstSearch(graph, myVertices[0], printVertex); console.log('********* sorthest path - BFS ***********'); -var shortestPathA = BFS(graph, myVertices[0]); +const shortestPathA = BFS(graph, myVertices[0]); console.log(shortestPathA.distances); console.log(shortestPathA.predecessors); //from A to all other vertices -var fromVertex = myVertices[0]; +const fromVertex = myVertices[0]; -for (i = 1; i < myVertices.length; i++) { - var toVertex = myVertices[i], - path = new Stack(); - for (var v = toVertex; v !== fromVertex; v = shortestPathA.predecessors[v]) { +for (let i = 1; i < myVertices.length; i++) { + const toVertex = myVertices[i]; + const path = new Stack(); + for (let v = toVertex; v !== fromVertex; v = shortestPathA.predecessors[v]) { path.push(v); } path.push(fromVertex); - var s = path.pop(); + let s = path.pop(); while (!path.isEmpty()) { s += ' - ' + path.pop(); } diff --git a/examples/chapter11/03-DFS.js b/examples/chapter11/03-DFS.js index 9cb4832b..c29686eb 100644 --- a/examples/chapter11/03-DFS.js +++ b/examples/chapter11/03-DFS.js @@ -2,7 +2,7 @@ const { Graph } = PacktDataStructuresAlgorithms; const { depthFirstSearch } = PacktDataStructuresAlgorithms; const { DFS } = PacktDataStructuresAlgorithms; -let graph = new Graph(); +let graph = new Graph(true); let myVertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; @@ -26,13 +26,13 @@ console.log(graph.toString()); console.log('********* dfs with callback ***********'); -const printNode = value => console.log('Visited vertex: ' + value); +const printVertex = value => console.log('Visited vertex: ' + value); -depthFirstSearch(graph, printNode); +depthFirstSearch(graph, printVertex); console.log('********* topological sort - DFS ***********'); -graph = new Graph(); +graph = new Graph(true); // directed graph myVertices = ['A', 'B', 'C', 'D', 'E', 'F']; for (i = 0; i < myVertices.length; i++) { diff --git a/src/js/algorithms/graph/depth-first-search.js b/src/js/algorithms/graph/depth-first-search.js index 7d91d261..208925ce 100644 --- a/src/js/algorithms/graph/depth-first-search.js +++ b/src/js/algorithms/graph/depth-first-search.js @@ -15,7 +15,7 @@ const initializeColor = vertices => { }; const depthFirstSearchVisit = (u, color, adjList, callback) => { - color[u] = 'grey'; + color[u] = Colors.GREY; if (callback) { callback(u); } diff --git a/src/js/algorithms/graph/prim.js b/src/js/algorithms/graph/prim.js index d65fff42..bbb54e95 100644 --- a/src/js/algorithms/graph/prim.js +++ b/src/js/algorithms/graph/prim.js @@ -26,7 +26,7 @@ export const prim = graph => { const u = minKey(graph, key, visited); visited[u] = true; for (let v = 0; v < length; v++) { - if (graph[u][v] && visited[v] === false && graph[u][v] < key[v]) { + if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) { parent[v] = u; key[v] = graph[u][v]; } diff --git a/src/js/data-structures/graph.js b/src/js/data-structures/graph.js index c197adc8..d838c4f6 100644 --- a/src/js/data-structures/graph.js +++ b/src/js/data-structures/graph.js @@ -21,9 +21,8 @@ export default class Graph { } this.adjList.get(a).push(b); if (!this.isDirected) { - // this.adjList.get(b).push(a); + this.adjList.get(b).push(a); } - // adjList.get(w).push(v); //commented to run the improved DFS with topological sorting } getVertices() { return this.vertices; From 56a41533ac5ddec71009c109a9a7536c50830b95 Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 26 Dec 2017 19:07:41 -0200 Subject: [PATCH 048/188] Sorting and Searching Algorithms --- .vscode/launch.json | 3 +- README.md | 1 + package.json | 22 +++--- .../sorting/bubble-sort-improved.js | 16 ++++ src/js/algorithms/sorting/bubble-sort.js | 16 ++++ src/js/algorithms/sorting/insertion-sort.js | 19 +++++ src/js/algorithms/sorting/merge-sort.js | 21 ++++++ src/js/algorithms/sorting/quicksort.js | 41 +++++++++++ src/js/algorithms/sorting/selection-sort.js | 21 ++++++ src/js/algorithms/sorting/shell-sort.js | 22 ++++++ src/ts/algorithms/search/binary-search.ts | 25 +++++++ .../algorithms/search/interpolation-search.ts | 41 +++++++++++ src/ts/algorithms/search/min-max-search.ts | 27 +++++++ src/ts/algorithms/search/sequential-search.ts | 10 +++ .../shuffle/fisher\342\200\223yates.ts" | 13 ++++ .../sorting/bubble-sort-improved.ts | 18 +++++ src/ts/algorithms/sorting/bubble-sort.ts | 18 +++++ src/ts/algorithms/sorting/bucket-sort.ts | 50 +++++++++++++ src/ts/algorithms/sorting/counting-sort.ts | 30 ++++++++ src/ts/algorithms/sorting/insertion-sort.ts | 20 +++++ src/ts/algorithms/sorting/merge-sort.ts | 25 +++++++ src/ts/algorithms/sorting/quicksort.ts | 61 ++++++++++++++++ src/ts/algorithms/sorting/radix-sort.ts | 57 +++++++++++++++ src/ts/algorithms/sorting/selection-sort.ts | 23 ++++++ src/ts/algorithms/sorting/shell-sort.ts | 25 +++++++ src/ts/index.ts | 21 ++++++ src/ts/util.ts | 21 +++++- .../algorithms/search/binary-search.spec.ts | 5 ++ .../search/interpolation-search.spec.ts | 5 ++ .../algorithms/search/min-max-search.spec.ts | 32 ++++++++ .../search/search-algorithms-tests.ts | 49 +++++++++++++ .../search/sequential-search.spec.ts | 5 ++ .../shuffle/fisher\342\200\223yates.spec.ts" | 33 +++++++++ .../sorting/bubble-sort-improved.spec.ts | 5 ++ .../ts/algorithms/sorting/bubble-sort.spec.ts | 5 ++ .../ts/algorithms/sorting/bucket-sort.spec.ts | 4 + .../algorithms/sorting/counting-sort.spec.ts | 4 + test/ts/algorithms/sorting/heap-sort.spec.ts | 5 ++ .../algorithms/sorting/insertion-sort.spec.ts | 5 ++ test/ts/algorithms/sorting/merge-sort.spec.ts | 5 ++ test/ts/algorithms/sorting/quicksort.spec.ts | 5 ++ test/ts/algorithms/sorting/radix-sort.spec.ts | 5 ++ .../algorithms/sorting/selection-sort.spec.ts | 5 ++ test/ts/algorithms/sorting/shell-sort.spec.ts | 5 ++ .../sorting/sort-algorithm-tests.ts | 73 +++++++++++++++++++ 45 files changed, 909 insertions(+), 13 deletions(-) create mode 100644 src/js/algorithms/sorting/bubble-sort-improved.js create mode 100644 src/js/algorithms/sorting/bubble-sort.js create mode 100644 src/js/algorithms/sorting/insertion-sort.js create mode 100644 src/js/algorithms/sorting/merge-sort.js create mode 100644 src/js/algorithms/sorting/quicksort.js create mode 100644 src/js/algorithms/sorting/selection-sort.js create mode 100644 src/js/algorithms/sorting/shell-sort.js create mode 100644 src/ts/algorithms/search/binary-search.ts create mode 100644 src/ts/algorithms/search/interpolation-search.ts create mode 100644 src/ts/algorithms/search/min-max-search.ts create mode 100644 src/ts/algorithms/search/sequential-search.ts create mode 100644 "src/ts/algorithms/shuffle/fisher\342\200\223yates.ts" create mode 100644 src/ts/algorithms/sorting/bubble-sort-improved.ts create mode 100644 src/ts/algorithms/sorting/bubble-sort.ts create mode 100644 src/ts/algorithms/sorting/bucket-sort.ts create mode 100644 src/ts/algorithms/sorting/counting-sort.ts create mode 100644 src/ts/algorithms/sorting/insertion-sort.ts create mode 100644 src/ts/algorithms/sorting/merge-sort.ts create mode 100644 src/ts/algorithms/sorting/quicksort.ts create mode 100644 src/ts/algorithms/sorting/radix-sort.ts create mode 100644 src/ts/algorithms/sorting/selection-sort.ts create mode 100644 src/ts/algorithms/sorting/shell-sort.ts create mode 100644 test/ts/algorithms/search/binary-search.spec.ts create mode 100644 test/ts/algorithms/search/interpolation-search.spec.ts create mode 100644 test/ts/algorithms/search/min-max-search.spec.ts create mode 100644 test/ts/algorithms/search/search-algorithms-tests.ts create mode 100644 test/ts/algorithms/search/sequential-search.spec.ts create mode 100644 "test/ts/algorithms/shuffle/fisher\342\200\223yates.spec.ts" create mode 100644 test/ts/algorithms/sorting/bubble-sort-improved.spec.ts create mode 100644 test/ts/algorithms/sorting/bubble-sort.spec.ts create mode 100644 test/ts/algorithms/sorting/bucket-sort.spec.ts create mode 100644 test/ts/algorithms/sorting/counting-sort.spec.ts create mode 100644 test/ts/algorithms/sorting/heap-sort.spec.ts create mode 100644 test/ts/algorithms/sorting/insertion-sort.spec.ts create mode 100644 test/ts/algorithms/sorting/merge-sort.spec.ts create mode 100644 test/ts/algorithms/sorting/quicksort.spec.ts create mode 100644 test/ts/algorithms/sorting/radix-sort.spec.ts create mode 100644 test/ts/algorithms/sorting/selection-sort.spec.ts create mode 100644 test/ts/algorithms/sorting/shell-sort.spec.ts create mode 100644 test/ts/algorithms/sorting/sort-algorithm-tests.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index 24399b76..8b53d61d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -41,8 +41,9 @@ "-r", "ts-node/register", "--colors", - "${workspaceRoot}/test/ts/**/*.spec.ts" + "${workspaceRoot}/test/ts/**/**/*.spec.ts" ], + "protocol": "auto", "internalConsoleOptions": "openOnSessionStart" } ] diff --git a/README.md b/README.md index 2664eba9..6aa2ac45 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Work in Progress. * 09: [Trees](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter09) * 10: [Heap](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter10) * 11: [Graphs](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter11) +* 12: [Sorting and Searching Algorithms](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter12) ### Third Edition Updates diff --git a/package.json b/package.json index a36c0076..85c8af80 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "lint:js": "eslint src/js && eslint test/js", "lint:ts": "tslint -c tslint.json 'src/ts/**/*.ts' && tslint -c tslint.json 'test/ts/**/*.ts'", "lint": "npm run lint:js && npm run lint:ts", - "test:js": "mocha --compilers js:babel-core/register ./test/js/**/*.spec.js --reporter mochawesome", - "test:ts": "mocha -r ts-node/register --recursive ./test/ts/**/*.spec.ts", + "test:js": "mocha --compilers js:babel-core/register ./test/js/**/**/*.spec.js --reporter mochawesome", + "test:ts": "mocha -r ts-node/register --recursive ./test/ts/**/**/*.spec.ts", "test": "npm run test:js && npm run test:ts", "dev": "npm run clean && npm run lint && npm run webpack && npm run generate-report", "dev2": "npm run clean && npm run lint && npm run webpack && npm run generate-report2", @@ -53,28 +53,28 @@ "all": true }, "devDependencies": { - "@types/chai": "^4.0.4", - "@types/mocha": "^2.2.44", + "@types/chai": "^4.0.10", + "@types/mocha": "^2.2.45", "babel-cli": "^6.26.0", "babel-core": "^6.26.0", - "babel-eslint": "^8.0.1", + "babel-eslint": "^8.1.0", "babel-loader": "^7.1.2", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-es2015-modules-umd": "^6.24.1", "babel-preset-env": "^1.6.1", "chai": "^4.1.2", "codecov": "^3.0.0", - "eslint": "^4.10.0", + "eslint": "^4.14.0", "eslint-config-airbnb-base": "^12.1.0", "eslint-plugin-import": "^2.8.0", "istanbul": "^v1.1.0-alpha.1", "mocha": "^4.0.1", - "mochawesome": "^2.3.1", - "nyc": "^11.2.1", - "ts-node": "^3.3.0", + "mochawesome": "^3.0.0", + "nyc": "^11.4.1", + "ts-node": "^4.1.0", "tslint": "^5.8.0", - "typescript": "^2.5.3", - "webpack": "^3.8.1", + "typescript": "^2.6.2", + "webpack": "^3.10.0", "yargs": "^10.0.3" } } diff --git a/src/js/algorithms/sorting/bubble-sort-improved.js b/src/js/algorithms/sorting/bubble-sort-improved.js new file mode 100644 index 00000000..a0aba370 --- /dev/null +++ b/src/js/algorithms/sorting/bubble-sort-improved.js @@ -0,0 +1,16 @@ +import { Compare, defaultCompare, swap } from '../../util'; + +export function modifiedBubbleSort(array, compareFn = defaultCompare) { + const { length } = array; + for (let i = 0; i < length; i++) { + // console.log('--- '); + for (let j = 0; j < length - 1 - i; j++) { + // console.log('compare ' + array[j] + ' with ' + array[j + 1]); + if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) { + // console.log('swap ' + array[j] + ' with ' + array[j + 1]); + swap(array, j, j + 1); + } + } + } + return array; +} diff --git a/src/js/algorithms/sorting/bubble-sort.js b/src/js/algorithms/sorting/bubble-sort.js new file mode 100644 index 00000000..7d5b928e --- /dev/null +++ b/src/js/algorithms/sorting/bubble-sort.js @@ -0,0 +1,16 @@ +import { Compare, defaultCompare, swap } from '../../util'; + +export function bubbleSort(array, compareFn = defaultCompare) { + const { length } = array; + for (let i = 0; i < length; i++) { + // console.log('--- '); + for (let j = 0; j < length - 1; j++) { + // console.log('compare ' + array[j] + ' with ' + array[j + 1]); + if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) { + // console.log('swap ' + array[j] + ' with ' + array[j + 1]); + swap(array, j, j + 1); + } + } + } + return array; +} diff --git a/src/js/algorithms/sorting/insertion-sort.js b/src/js/algorithms/sorting/insertion-sort.js new file mode 100644 index 00000000..e48689e6 --- /dev/null +++ b/src/js/algorithms/sorting/insertion-sort.js @@ -0,0 +1,19 @@ +import { Compare, defaultCompare } from '../../util'; + +export const insertionSort = (array, compareFn = defaultCompare) => { + const { length } = array; + let temp; + for (let i = 1; i < length; i++) { + let j = i; + temp = array[i]; + // console.log('to be inserted ' + temp); + while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) { + // console.log('shift ' + array[j - 1]); + array[j] = array[j - 1]; + j--; + } + // console.log('insert ' + temp); + array[j] = temp; + } + return array; +}; diff --git a/src/js/algorithms/sorting/merge-sort.js b/src/js/algorithms/sorting/merge-sort.js new file mode 100644 index 00000000..5371e714 --- /dev/null +++ b/src/js/algorithms/sorting/merge-sort.js @@ -0,0 +1,21 @@ +import { Compare, defaultCompare } from '../../util'; + +function merge(left, right, compareFn) { + let i = 0; + let j = 0; + const result = []; + while (i < left.length && j < right.length) { + result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]); + } + return result.concat(i < left.length ? left.slice(i) : right.slice(j)); +} +export function mergeSort(array, compareFn = defaultCompare) { + if (array.length > 1) { + const { length } = array; + const middle = Math.floor(length / 2); + const left = mergeSort(array.slice(0, middle), compareFn); + const right = mergeSort(array.slice(middle, length), compareFn); + array = merge(left, right, compareFn); + } + return array; +} diff --git a/src/js/algorithms/sorting/quicksort.js b/src/js/algorithms/sorting/quicksort.js new file mode 100644 index 00000000..2ac40b4a --- /dev/null +++ b/src/js/algorithms/sorting/quicksort.js @@ -0,0 +1,41 @@ +import { Compare, defaultCompare, swap } from '../../util'; + +function partition(array, left, right, compareFn) { + const pivot = array[Math.floor((right + left) / 2)]; + let i = left; + let j = right; + // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right); + while (i <= j) { + while (compareFn(array[i], pivot) === Compare.LESS_THAN) { + i++; + // console.log('i = ' + i); + } + while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) { + j--; + // console.log('j = ' + j); + } + if (i <= j) { + // console.log('swap ' + array[i] + ' with ' + array[j]); + swap(array, i, j); + i++; + j--; + } + } + return i; +} +function quick(array, left, right, compareFn) { + let index; + if (array.length > 1) { + index = partition(array, left, right, compareFn); + if (left < index - 1) { + quick(array, left, index - 1, compareFn); + } + if (index < right) { + quick(array, index, right, compareFn); + } + } + return array; +} +export function quickSort(array, compareFn = defaultCompare) { + return quick(array, 0, array.length - 1, compareFn); +} diff --git a/src/js/algorithms/sorting/selection-sort.js b/src/js/algorithms/sorting/selection-sort.js new file mode 100644 index 00000000..55a9c2c0 --- /dev/null +++ b/src/js/algorithms/sorting/selection-sort.js @@ -0,0 +1,21 @@ +import { Compare, defaultCompare, swap } from '../../util'; + +export const selectionSort = (array, compareFn = defaultCompare) => { + const { length } = array; + let indexMin; + for (let i = 0; i < length - 1; i++) { + indexMin = i; + // console.log('index ' + array[i]); + for (let j = i; j < length; j++) { + if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) { + // console.log('new index min ' + array[j]); + indexMin = j; + } + } + if (i !== indexMin) { + // console.log('swap ' + array[i] + ' with ' + array[indexMin]); + swap(array, i, indexMin); + } + } + return array; +}; diff --git a/src/js/algorithms/sorting/shell-sort.js b/src/js/algorithms/sorting/shell-sort.js new file mode 100644 index 00000000..e13127f1 --- /dev/null +++ b/src/js/algorithms/sorting/shell-sort.js @@ -0,0 +1,22 @@ +import { Compare, defaultCompare } from '../../util'; + +export function shellSort(array, compareFn = defaultCompare) { + let increment = array.length / 2; + while (increment > 0) { + for (let i = increment; i < array.length; i++) { + let j = i; + const temp = array[i]; + while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) { + array[j] = array[j - increment]; + j -= increment; + } + array[j] = temp; + } + if (increment === 2) { + increment = 1; + } else { + increment = Math.floor((increment * 5) / 11); + } + } + return array; +} diff --git a/src/ts/algorithms/search/binary-search.ts b/src/ts/algorithms/search/binary-search.ts new file mode 100644 index 00000000..2e8513bf --- /dev/null +++ b/src/ts/algorithms/search/binary-search.ts @@ -0,0 +1,25 @@ +import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util'; +import { quickSort } from '../sorting/quicksort'; + +export function binarySearch (array: T[], value: T, compareFn = defaultCompare) { + const sortedArray = quickSort(array); + let low = 0; + let high = sortedArray.length - 1; + + while (low <= high) { + const mid = Math.floor((low + high) / 2); + const element = sortedArray[mid]; + // console.log('mid element is ' + element); + if (compareFn(element, value) === Compare.LESS_THAN) { + low = mid + 1; + // console.log('low is ' + low); + } else if (compareFn(element, value) === Compare.BIGGER_THAN) { + high = mid - 1; + // console.log('high is ' + high); + } else { + // console.log('found it'); + return mid; + } + } + return DOES_NOT_EXIST; +} diff --git a/src/ts/algorithms/search/interpolation-search.ts b/src/ts/algorithms/search/interpolation-search.ts new file mode 100644 index 00000000..aebdeb09 --- /dev/null +++ b/src/ts/algorithms/search/interpolation-search.ts @@ -0,0 +1,41 @@ +import { + biggerEquals, + Compare, + defaultCompare, + defaultEquals, + defaultDiff, + DOES_NOT_EXIST, + lesserEquals +} from '../../util'; + +export function interpolationSearch( + array: T[], + value: T, + compareFn = defaultCompare, + equalsFn = defaultEquals, + diffFn = defaultDiff +) { + const { length } = array; + let low = 0; + let high = length - 1; + let position = -1; + let delta = -1; + while ( + low <= high && + biggerEquals(value, array[low], compareFn) && + lesserEquals(value, array[high], compareFn) + ) { + delta = diffFn(value, array[low]) / diffFn(array[high], array[low]); + position = low + Math.floor((high - low) * delta); + if (equalsFn(array[position], value)) { + return position; + } + if (compareFn(array[position], value) === Compare.LESS_THAN) { + low = position + 1; + } else { + high = position - 1; + } + } + + return DOES_NOT_EXIST; +} diff --git a/src/ts/algorithms/search/min-max-search.ts b/src/ts/algorithms/search/min-max-search.ts new file mode 100644 index 00000000..1869f412 --- /dev/null +++ b/src/ts/algorithms/search/min-max-search.ts @@ -0,0 +1,27 @@ +import { defaultCompare, Compare } from '../../util'; + +export function findMaxValue(array: T[], compareFn = defaultCompare) { + if (array && array.length > 0) { + let max = array[0]; + for (let i = 1; i < array.length; i++) { + if (compareFn(max, array[i]) === Compare.LESS_THAN) { + max = array[i]; + } + } + return max; + } + return undefined; +} + +export function findMinValue(array: T[], compareFn = defaultCompare) { + if (array && array.length > 0) { + let min = array[0]; + for (let i = 1; i < array.length; i++) { + if (compareFn(min, array[i]) === Compare.BIGGER_THAN) { + min = array[i]; + } + } + return min; + } + return undefined; +} diff --git a/src/ts/algorithms/search/sequential-search.ts b/src/ts/algorithms/search/sequential-search.ts new file mode 100644 index 00000000..ba9ddf6c --- /dev/null +++ b/src/ts/algorithms/search/sequential-search.ts @@ -0,0 +1,10 @@ +import { defaultEquals, DOES_NOT_EXIST, IEqualsFunction } from '../../util'; + +export function sequentialSearch(array: T[], value: T, equalsFn: IEqualsFunction = defaultEquals) { + for (let i = 0; i < array.length; i++) { + if (equalsFn(value, array[i])) { + return i; + } + } + return DOES_NOT_EXIST; +} diff --git "a/src/ts/algorithms/shuffle/fisher\342\200\223yates.ts" "b/src/ts/algorithms/shuffle/fisher\342\200\223yates.ts" new file mode 100644 index 00000000..2196a1d9 --- /dev/null +++ "b/src/ts/algorithms/shuffle/fisher\342\200\223yates.ts" @@ -0,0 +1,13 @@ +import { swap } from '../../util'; + +export function shuffle(array: T[]) { + let currentIndex = array.length; + + while (currentIndex !== 0) { + const randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex--; + swap(array, currentIndex, randomIndex); + } + + return array; +} diff --git a/src/ts/algorithms/sorting/bubble-sort-improved.ts b/src/ts/algorithms/sorting/bubble-sort-improved.ts new file mode 100644 index 00000000..6e016d4d --- /dev/null +++ b/src/ts/algorithms/sorting/bubble-sort-improved.ts @@ -0,0 +1,18 @@ +import { Compare, defaultCompare, swap } from '../../util'; + +export function modifiedBubbleSort(array: T[], compareFn = defaultCompare) { + const { length } = array; + + for (let i = 0; i < length; i++) { + // console.log('--- '); + for (let j = 0; j < length - 1 - i; j++) { + // console.log('compare ' + array[j] + ' with ' + array[j + 1]); + if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) { + // console.log('swap ' + array[j] + ' with ' + array[j + 1]); + swap(array, j, j + 1); + } + } + } + + return array; +} diff --git a/src/ts/algorithms/sorting/bubble-sort.ts b/src/ts/algorithms/sorting/bubble-sort.ts new file mode 100644 index 00000000..41074f6f --- /dev/null +++ b/src/ts/algorithms/sorting/bubble-sort.ts @@ -0,0 +1,18 @@ +import { Compare, defaultCompare, swap } from '../../util'; + +export function bubbleSort(array: T[], compareFn = defaultCompare) { + const { length } = array; + + for (let i = 0; i < length; i++) { + // console.log('--- '); + for (let j = 0; j < length - 1; j++) { + // console.log('compare ' + array[j] + ' with ' + array[j + 1]); + if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) { + // console.log('swap ' + array[j] + ' with ' + array[j + 1]); + swap(array, j, j + 1); + } + } + } + + return array; +} diff --git a/src/ts/algorithms/sorting/bucket-sort.ts b/src/ts/algorithms/sorting/bucket-sort.ts new file mode 100644 index 00000000..c6d5a255 --- /dev/null +++ b/src/ts/algorithms/sorting/bucket-sort.ts @@ -0,0 +1,50 @@ +import { insertionSort } from './insertion-sort'; + +function createBuckets(array: number[], bucketSize: number): number[][] { + let minValue = array[0]; + let maxValue = array[0]; + for (let i = 1; i < array.length; i++) { + if (array[i] < minValue) { + minValue = array[i]; + } else if (array[i] > maxValue) { + maxValue = array[i]; + } + } + + const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1; + const buckets = []; + for (let i = 0; i < bucketCount; i++) { + buckets[i] = []; + } + + for (let i = 0; i < array.length; i++) { + buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]); + } + + return buckets; +} + +function sortBuckets(buckets: number[][]) { + const sortedArray = []; + for (let i = 0; i < buckets.length; i++) { + if (buckets[i] != null) { + insertionSort(buckets[i]); + + for (let j = 0; j < buckets[i].length; j++) { + sortedArray.push(buckets[i][j]); + } + } + } + + return sortedArray; +} + +export function bucketSort(array: number[], bucketSize = 5) { + if (array.length < 2) { + return array; + } + + const buckets = createBuckets(array, bucketSize); + + return sortBuckets(buckets); +} diff --git a/src/ts/algorithms/sorting/counting-sort.ts b/src/ts/algorithms/sorting/counting-sort.ts new file mode 100644 index 00000000..3720c605 --- /dev/null +++ b/src/ts/algorithms/sorting/counting-sort.ts @@ -0,0 +1,30 @@ +import { findMaxValue } from '../..'; + +export function countingSort(array: number[]) { + + if (array.length < 2) { + return array; + } + + const maxValue = findMaxValue(array); + let sortedIndex = 0; + const counts = new Array(maxValue + 1); + + array.forEach(element => { + if (!counts[element]) { + counts[element] = 0; + } + counts[element]++; + }); + + // console.log('Frequencies: ' + counts.join()); + + counts.forEach((element, i) => { + while (element > 0) { + array[sortedIndex++] = i; + element--; + } + }); + + return array; +} diff --git a/src/ts/algorithms/sorting/insertion-sort.ts b/src/ts/algorithms/sorting/insertion-sort.ts new file mode 100644 index 00000000..e67c4f34 --- /dev/null +++ b/src/ts/algorithms/sorting/insertion-sort.ts @@ -0,0 +1,20 @@ +import { Compare, defaultCompare } from '../../util'; + +export const insertionSort = (array: any[], compareFn = defaultCompare) => { + const { length } = array; + let temp; + for (let i = 1; i < length; i++) { + let j = i; + temp = array[i]; + // console.log('to be inserted ' + temp); + while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) { + // console.log('shift ' + array[j - 1]); + array[j] = array[j - 1]; + j--; + } + // console.log('insert ' + temp); + array[j] = temp; + } + + return array; +}; diff --git a/src/ts/algorithms/sorting/merge-sort.ts b/src/ts/algorithms/sorting/merge-sort.ts new file mode 100644 index 00000000..b4f20f65 --- /dev/null +++ b/src/ts/algorithms/sorting/merge-sort.ts @@ -0,0 +1,25 @@ +import { Compare, defaultCompare, ICompareFunction } from '../../util'; + +function merge(left: T[], right: T[], compareFn: ICompareFunction) { + let i = 0; + let j = 0; + const result = []; + + while (i < left.length && j < right.length) { + result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]); + } + + return result.concat(i < left.length ? left.slice(i) : right.slice(j)); +} + +export function mergeSort(array: T[], compareFn = defaultCompare): T[] { + if (array.length > 1) { + const { length } = array; + const middle = Math.floor(length / 2); + const left = mergeSort(array.slice(0, middle), compareFn); + const right = mergeSort(array.slice(middle, length), compareFn); + array = merge(left, right, compareFn); + } + + return array; +} diff --git a/src/ts/algorithms/sorting/quicksort.ts b/src/ts/algorithms/sorting/quicksort.ts new file mode 100644 index 00000000..97c9f9ce --- /dev/null +++ b/src/ts/algorithms/sorting/quicksort.ts @@ -0,0 +1,61 @@ +import { Compare, defaultCompare, ICompareFunction, swap } from '../../util'; + +const partition = function( + array: any[], + left: number, + right: number, + compareFn: ICompareFunction +) { + const pivot = array[Math.floor((right + left) / 2)]; + let i = left; + let j = right; + + // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right); + + while (i <= j) { + while (compareFn(array[i], pivot) === Compare.LESS_THAN) { + i++; + // console.log('i = ' + i); + } + + while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) { + j--; + // console.log('j = ' + j); + } + + if (i <= j) { + // console.log('swap ' + array[i] + ' with ' + array[j]); + swap(array, i, j); + i++; + j--; + } + } + + return i; +}; + +const quick = function( + array: any[], + left: number, + right: number, + compareFn: ICompareFunction +) { + let index; + + if (array.length > 1) { + index = partition(array, left, right, compareFn); + + if (left < index - 1) { + quick(array, left, index - 1, compareFn); + } + + if (index < right) { + quick(array, index, right, compareFn); + } + } + return array; +}; + +export const quickSort = (array: any[], compareFn = defaultCompare) => { + return quick(array, 0, array.length - 1, compareFn); +}; diff --git a/src/ts/algorithms/sorting/radix-sort.ts b/src/ts/algorithms/sorting/radix-sort.ts new file mode 100644 index 00000000..95ce4cac --- /dev/null +++ b/src/ts/algorithms/sorting/radix-sort.ts @@ -0,0 +1,57 @@ +import { findMaxValue, findMinValue } from '../search/min-max-search'; + +const countingSortForRadix = ( + array: number[], + radixBase: number, + significantDigit: number, + minValue: any +) => { + let bucketsIndex; + const buckets: number[] = []; + const aux: number[] = []; + + for (let i = 0; i < radixBase; i++) { + buckets[i] = 0; + } + + for (let i = 0; i < array.length; i++) { + bucketsIndex = Math.floor(((array[i] - minValue) / significantDigit) % radixBase); + buckets[bucketsIndex]++; + } + + for (let i = 1; i < radixBase; i++) { + buckets[i] += buckets[i - 1]; + } + + for (let i = array.length - 1; i >= 0; i--) { + bucketsIndex = Math.floor(((array[i] - minValue) / significantDigit) % radixBase); + aux[--buckets[bucketsIndex]] = array[i]; + } + + for (let i = 0; i < array.length; i++) { + array[i] = aux[i]; + } + + return array; +}; + +export function radixSort(array: number[], radixBase = 10) { + + if (array.length < 2) { + return array; + } + + const minValue = findMinValue(array); + const maxValue = findMaxValue(array); + + // Perform counting sort for each significant digit, starting at 1 + let significantDigit = 1; + while ((maxValue - minValue) / significantDigit >= 1) { + // console.log('radix sort for digit ' + significantDigit); + array = countingSortForRadix(array, radixBase, significantDigit, minValue); + // console.log(array.join()); + significantDigit *= radixBase; + } + + return array; +} diff --git a/src/ts/algorithms/sorting/selection-sort.ts b/src/ts/algorithms/sorting/selection-sort.ts new file mode 100644 index 00000000..465e78a1 --- /dev/null +++ b/src/ts/algorithms/sorting/selection-sort.ts @@ -0,0 +1,23 @@ +import { Compare, defaultCompare, swap } from '../../util'; + +export const selectionSort = (array: any[], compareFn = defaultCompare) => { + const { length } = array; + let indexMin; + + for (let i = 0; i < length - 1; i++) { + indexMin = i; + // console.log('index ' + array[i]); + for (let j = i; j < length; j++) { + if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) { + // console.log('new index min ' + array[j]); + indexMin = j; + } + } + if (i !== indexMin) { + // console.log('swap ' + array[i] + ' with ' + array[indexMin]); + swap(array, i, indexMin); + } + } + + return array; +}; diff --git a/src/ts/algorithms/sorting/shell-sort.ts b/src/ts/algorithms/sorting/shell-sort.ts new file mode 100644 index 00000000..19e11bf9 --- /dev/null +++ b/src/ts/algorithms/sorting/shell-sort.ts @@ -0,0 +1,25 @@ +import { Compare, defaultCompare } from '../../util'; + +export function shellSort(array: T[], compareFn = defaultCompare) { + let increment = array.length / 2; + while (increment > 0) { + for (let i = increment; i < array.length; i++) { + let j = i; + const temp = array[i]; + + while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) { + array[j] = array[j - increment]; + j = j - increment; + } + + array[j] = temp; + } + + if (increment === 2) { + increment = 1; + } else { + increment = Math.floor(increment * 5 / 11); + } + } + return array; +} diff --git a/src/ts/index.ts b/src/ts/index.ts index 589f2106..804aae68 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -40,6 +40,27 @@ export { floydWarshall as floydWarshall } from './algorithms/graph/floyd-warshal export { prim as prim } from './algorithms/graph/prim'; export { kruskal as kruskal } from './algorithms/graph/kruskal'; +// chapter 12 +export { shuffle as shuffle } from './algorithms/shuffle/fisher–yates'; + +export { bubbleSort as bubbleSort } from './algorithms/sorting/bubble-sort'; +export { modifiedBubbleSort as modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved'; +export { bucketSort as bucketSort } from './algorithms/sorting/bucket-sort'; +export { countingSort as countingSort } from './algorithms/sorting/counting-sort'; +export { insertionSort as insertionSort } from './algorithms/sorting/insertion-sort'; +export { mergeSort as mergeSort } from './algorithms/sorting/merge-sort'; +export { quickSort as quickSort } from './algorithms/sorting/quicksort'; +export { radixSort as radixSort } from './algorithms/sorting/radix-sort'; +export { selectionSort as selectionSort } from './algorithms/sorting/selection-sort'; +export { shellSort as shellSort } from './algorithms/sorting/shell-sort'; + +export { binarySearch as binarySearch } from './algorithms/search/binary-search'; +export { interpolationSearch as interpolationSearch } from './algorithms/search/interpolation-search'; +export { sequentialSearch as sequentialSearch } from './algorithms/search/sequential-search'; +export { findMaxValue as findMaxValue } from './algorithms/search/min-max-search'; +export { findMinValue as findMinValue } from './algorithms/search/min-max-search'; + + /* import { hotPotato } from './others/hot-potato'; import { palindromeChecker } from './others/palindrome-checker'; diff --git a/src/ts/util.ts b/src/ts/util.ts index dc0e65ee..3202d19d 100644 --- a/src/ts/util.ts +++ b/src/ts/util.ts @@ -2,9 +2,24 @@ export type ICompareFunction = (a: T, b: T) => number; export type IEqualsFunction = (a: T, b: T) => boolean; +export type IDiffFunction = (a: T, b: T) => number; + +export const DOES_NOT_EXIST = -1; + export enum Compare { LESS_THAN = -1, - BIGGER_THAN = 1 + BIGGER_THAN = 1, + EQUALS = 0 +} + +export function lesserEquals(a: T, b: T, compareFn: ICompareFunction) { + const comp = compareFn(a, b); + return comp === Compare.LESS_THAN || comp === Compare.EQUALS; +} + +export function biggerEquals(a: T, b: T, compareFn: ICompareFunction) { + const comp = compareFn(a, b); + return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS; } export function defaultCompare(a: T, b: T): number { @@ -39,3 +54,7 @@ export function swap(array: any[], a: number, b: number) { export function reverseCompare(compareFn: ICompareFunction): ICompareFunction { return (a, b) => compareFn(b, a); } + +export function defaultDiff(a: T, b: T): number { + return Number(a) - Number(b); +} diff --git a/test/ts/algorithms/search/binary-search.spec.ts b/test/ts/algorithms/search/binary-search.spec.ts new file mode 100644 index 00000000..f62d0e96 --- /dev/null +++ b/test/ts/algorithms/search/binary-search.spec.ts @@ -0,0 +1,5 @@ +import { binarySearch } from '../../../../src/ts/index'; +import { testSearchAlgorithm } from './search-algorithms-tests'; + +testSearchAlgorithm(binarySearch, 'Binary Search'); + diff --git a/test/ts/algorithms/search/interpolation-search.spec.ts b/test/ts/algorithms/search/interpolation-search.spec.ts new file mode 100644 index 00000000..287351f2 --- /dev/null +++ b/test/ts/algorithms/search/interpolation-search.spec.ts @@ -0,0 +1,5 @@ +import { interpolationSearch } from '../../../../src/ts/index'; +import { testSearchAlgorithm } from './search-algorithms-tests'; + +testSearchAlgorithm(interpolationSearch, 'Interpolation Search', { customEquals: false }); + diff --git a/test/ts/algorithms/search/min-max-search.spec.ts b/test/ts/algorithms/search/min-max-search.spec.ts new file mode 100644 index 00000000..d0dd76c3 --- /dev/null +++ b/test/ts/algorithms/search/min-max-search.spec.ts @@ -0,0 +1,32 @@ +import 'mocha'; +import { expect } from 'chai'; +import { findMinValue, findMaxValue } from '../../../../src/ts/index'; + +describe('Min and Max Values Search', () => { + + const SIZE = 10; + + function createSortedArray() { + const array: number[] = []; + for (let i = 1; i <= SIZE; i++) { + array.push(i); + } + return array; + } + + it('min value - works with empty arrays', () => { + expect(findMinValue([])).to.equal(undefined); + }); + + it('max value - works with empty arrays', () => { + expect(findMaxValue([])).to.equal(undefined); + }); + + it('min value', () => { + expect(findMinValue(createSortedArray())).to.equal(1); + }); + + it('max value', () => { + expect(findMaxValue(createSortedArray())).to.equal(SIZE); + }); +}); diff --git a/test/ts/algorithms/search/search-algorithms-tests.ts b/test/ts/algorithms/search/search-algorithms-tests.ts new file mode 100644 index 00000000..05d1d88d --- /dev/null +++ b/test/ts/algorithms/search/search-algorithms-tests.ts @@ -0,0 +1,49 @@ +import 'mocha'; +import { expect } from 'chai'; +import { IEqualsFunction } from '../../../../src/ts/util'; + +interface CustomObject { + key: number; +} + +const customEquals: IEqualsFunction = (a: CustomObject, b: CustomObject) => + a.key === b.key; + +export function testSearchAlgorithm( + searchAlgorithm: Function, + algorithmName: string, + config = { customEquals: true } +) { + describe(algorithmName, () => { + const SIZE = 10; + + function createSortedArray() { + const array: number[] = []; + for (let i = 1; i <= SIZE; i++) { + array.push(i); + } + return array; + } + + it('works with empty arrays', () => { + expect(searchAlgorithm([], 1)).to.equal(-1); + }); + + it('finds value at the first position', () => { + const array = createSortedArray(); + expect(searchAlgorithm(array, 1)).to.equal(0); + }); + + it('finds value at the last position', () => { + const array = createSortedArray(); + expect(searchAlgorithm(array, SIZE)).to.equal(SIZE - 1); + }); + + if (config.customEquals) { + it('finds value with custom equals function', () => { + const array = [{ key: 1 }, { key: 2 }, { key: 3 }]; + expect(searchAlgorithm(array, { key: 2 }, customEquals)).to.equal(1); + }); + } + }); +} diff --git a/test/ts/algorithms/search/sequential-search.spec.ts b/test/ts/algorithms/search/sequential-search.spec.ts new file mode 100644 index 00000000..94ddf885 --- /dev/null +++ b/test/ts/algorithms/search/sequential-search.spec.ts @@ -0,0 +1,5 @@ +import { sequentialSearch } from '../../../../src/ts/index'; +import { testSearchAlgorithm } from './search-algorithms-tests'; + +testSearchAlgorithm(sequentialSearch, 'Sequential Search'); + diff --git "a/test/ts/algorithms/shuffle/fisher\342\200\223yates.spec.ts" "b/test/ts/algorithms/shuffle/fisher\342\200\223yates.spec.ts" new file mode 100644 index 00000000..da450f41 --- /dev/null +++ "b/test/ts/algorithms/shuffle/fisher\342\200\223yates.spec.ts" @@ -0,0 +1,33 @@ +import 'mocha'; +import { expect } from 'chai'; +import { shuffle } from '../../../../src/ts/index'; + +describe('Fisher-Yates Suffle', () => { + + const SIZE = 100; + + function createSortedArray() { + const array: number[] = []; + for (let i = 1; i <= SIZE; i++) { + array.push(i); + } + return array; + } + + it('works with empty arrays', () => { + expect(shuffle([])).to.deep.equal([]); + }); + + it('works with arrays with a single value', () => { + const array = [1]; + expect(shuffle(array)).to.deep.equal(array); + }); + + it('works with sorted arrays', () => { + let array = createSortedArray(); + const sortedArray = createSortedArray(); + array = shuffle(array); + expect(array).to.not.deep.equal(sortedArray); + }); + +}); diff --git a/test/ts/algorithms/sorting/bubble-sort-improved.spec.ts b/test/ts/algorithms/sorting/bubble-sort-improved.spec.ts new file mode 100644 index 00000000..7686a5fd --- /dev/null +++ b/test/ts/algorithms/sorting/bubble-sort-improved.spec.ts @@ -0,0 +1,5 @@ +import { modifiedBubbleSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(modifiedBubbleSort, 'Bubble Sort - Improved'); + diff --git a/test/ts/algorithms/sorting/bubble-sort.spec.ts b/test/ts/algorithms/sorting/bubble-sort.spec.ts new file mode 100644 index 00000000..2804fe9c --- /dev/null +++ b/test/ts/algorithms/sorting/bubble-sort.spec.ts @@ -0,0 +1,5 @@ +import { bubbleSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(bubbleSort, 'Bubble Sort'); + diff --git a/test/ts/algorithms/sorting/bucket-sort.spec.ts b/test/ts/algorithms/sorting/bucket-sort.spec.ts new file mode 100644 index 00000000..1a4ec458 --- /dev/null +++ b/test/ts/algorithms/sorting/bucket-sort.spec.ts @@ -0,0 +1,4 @@ +import { bucketSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(bucketSort, 'Bucket Sort', {reverseCompare: false}); diff --git a/test/ts/algorithms/sorting/counting-sort.spec.ts b/test/ts/algorithms/sorting/counting-sort.spec.ts new file mode 100644 index 00000000..c3fee9a5 --- /dev/null +++ b/test/ts/algorithms/sorting/counting-sort.spec.ts @@ -0,0 +1,4 @@ +import { countingSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(countingSort, 'Counting Sort', {reverseCompare: false}); diff --git a/test/ts/algorithms/sorting/heap-sort.spec.ts b/test/ts/algorithms/sorting/heap-sort.spec.ts new file mode 100644 index 00000000..b0b95da9 --- /dev/null +++ b/test/ts/algorithms/sorting/heap-sort.spec.ts @@ -0,0 +1,5 @@ +import { heapSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(heapSort, 'Heap Sort'); + diff --git a/test/ts/algorithms/sorting/insertion-sort.spec.ts b/test/ts/algorithms/sorting/insertion-sort.spec.ts new file mode 100644 index 00000000..86beb941 --- /dev/null +++ b/test/ts/algorithms/sorting/insertion-sort.spec.ts @@ -0,0 +1,5 @@ +import { insertionSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(insertionSort, 'Insertion Sort'); + diff --git a/test/ts/algorithms/sorting/merge-sort.spec.ts b/test/ts/algorithms/sorting/merge-sort.spec.ts new file mode 100644 index 00000000..cf4a7418 --- /dev/null +++ b/test/ts/algorithms/sorting/merge-sort.spec.ts @@ -0,0 +1,5 @@ +import { mergeSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(mergeSort, 'Merge Sort'); + diff --git a/test/ts/algorithms/sorting/quicksort.spec.ts b/test/ts/algorithms/sorting/quicksort.spec.ts new file mode 100644 index 00000000..348c58f4 --- /dev/null +++ b/test/ts/algorithms/sorting/quicksort.spec.ts @@ -0,0 +1,5 @@ +import { quickSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(quickSort, 'Quick Sort'); + diff --git a/test/ts/algorithms/sorting/radix-sort.spec.ts b/test/ts/algorithms/sorting/radix-sort.spec.ts new file mode 100644 index 00000000..36f909ce --- /dev/null +++ b/test/ts/algorithms/sorting/radix-sort.spec.ts @@ -0,0 +1,5 @@ +import { radixSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(radixSort, 'Radix Sort', {reverseCompare: false}); + diff --git a/test/ts/algorithms/sorting/selection-sort.spec.ts b/test/ts/algorithms/sorting/selection-sort.spec.ts new file mode 100644 index 00000000..a1359074 --- /dev/null +++ b/test/ts/algorithms/sorting/selection-sort.spec.ts @@ -0,0 +1,5 @@ +import { selectionSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(selectionSort, 'Selection Sort'); + diff --git a/test/ts/algorithms/sorting/shell-sort.spec.ts b/test/ts/algorithms/sorting/shell-sort.spec.ts new file mode 100644 index 00000000..4683a70c --- /dev/null +++ b/test/ts/algorithms/sorting/shell-sort.spec.ts @@ -0,0 +1,5 @@ +import { shellSort } from '../../../../src/ts/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(shellSort, 'Shell Sort'); + diff --git a/test/ts/algorithms/sorting/sort-algorithm-tests.ts b/test/ts/algorithms/sorting/sort-algorithm-tests.ts new file mode 100644 index 00000000..c1bacf3d --- /dev/null +++ b/test/ts/algorithms/sorting/sort-algorithm-tests.ts @@ -0,0 +1,73 @@ +import 'mocha'; +import { expect } from 'chai'; +import { Compare } from '../../../../src/ts/util'; + +export function testSortAlgorithm( + sortAlgorithm: Function, + algorithmName: string, + config = { reverseCompare: true } +) { + describe(algorithmName, () => { + const SIZE = 100; + + function createNonSortedArray() { + const array: number[] = []; + for (let i = SIZE; i > 0; i--) { + array.push(i); + } + return array; + } + + function createSortedArray() { + const array: number[] = []; + for (let i = 1; i <= SIZE; i++) { + array.push(i); + } + return array; + } + + it('works with empty arrays', () => { + expect(sortAlgorithm([])).to.deep.equal([]); + }); + + it('works with sorted arrays', () => { + let array = createSortedArray(); + const sortedArray = createSortedArray(); + array = sortAlgorithm(array); + expect(array).to.deep.equal(sortedArray); + }); + + it('works with non-sorted arrays', () => { + let array = createNonSortedArray(); + const sortedArray = createSortedArray(); + array = sortAlgorithm(array); + + expect(array).to.deep.equal(sortedArray); + + for (let i = 0; i < array.length - 1; i++) { + expect(array[i] <= array[i + 1]).to.equal(true); + } + }); + + function reverseCompare(a: T, b: T): number { + if (a === b) { + return 0; + } + return a < b ? Compare.BIGGER_THAN : Compare.LESS_THAN; + } + + if (config.reverseCompare) { + it('works with reverse comparator - descending order', () => { + let array = createSortedArray(); + const sortedArray = createNonSortedArray(); + array = sortAlgorithm(array, reverseCompare); + + expect(array).to.deep.equal(sortedArray); + + for (let i = 0; i < array.length - 1; i++) { + expect(array[i] >= array[i + 1]).to.equal(true); + } + }); + } + }); +} From e6c72793be7066bdc9cfb7db29000ef1ea2c9b51 Mon Sep 17 00:00:00 2001 From: loiane Date: Wed, 27 Dec 2017 18:20:15 -0200 Subject: [PATCH 049/188] [Sorting and Searching Algorithms] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- package.json | 4 +- src/js/algorithms/search/binary-search.js | 24 +++++++ .../algorithms/search/interpolation-search.js | 40 +++++++++++ src/js/algorithms/search/min-max-search.js | 26 +++++++ src/js/algorithms/search/sequential-search.js | 10 +++ .../shuffle/fisher\342\200\223yates.js" | 11 +++ src/js/algorithms/sorting/bucket-sort.js | 41 +++++++++++ src/js/algorithms/sorting/counting-sort.js | 24 +++++++ src/js/algorithms/sorting/radix-sort.js | 41 +++++++++++ src/js/index.js | 20 ++++++ src/js/util.js | 19 ++++- src/ts/algorithms/sorting/counting-sort.ts | 2 +- .../algorithms/search/binary-search.spec.js | 4 ++ .../search/interpolation-search.spec.js | 4 ++ .../algorithms/search/min-max-search.spec.js | 31 +++++++++ .../search/search-algorithms-tests.js | 43 ++++++++++++ .../search/sequential-search.spec.js | 4 ++ .../shuffle/fisher\342\200\223yates.spec.js" | 31 +++++++++ .../sorting/bubble-sort-improved.spec.js | 4 ++ .../js/algorithms/sorting/bubble-sort.spec.js | 5 ++ .../js/algorithms/sorting/bucket-sort.spec.js | 4 ++ .../algorithms/sorting/counting-sort.spec.js | 4 ++ test/js/algorithms/sorting/heap-sort.spec.js | 5 ++ .../algorithms/sorting/insertion-sort.spec.js | 5 ++ test/js/algorithms/sorting/merge-sort.spec.js | 5 ++ test/js/algorithms/sorting/quicksort.spec.js | 5 ++ test/js/algorithms/sorting/radix-sort.spec.js | 5 ++ .../algorithms/sorting/selection-sort.spec.js | 5 ++ test/js/algorithms/sorting/shell-sort.spec.js | 5 ++ .../sorting/sort-algorithm-tests.js | 69 +++++++++++++++++++ 31 files changed, 497 insertions(+), 5 deletions(-) create mode 100644 src/js/algorithms/search/binary-search.js create mode 100644 src/js/algorithms/search/interpolation-search.js create mode 100644 src/js/algorithms/search/min-max-search.js create mode 100644 src/js/algorithms/search/sequential-search.js create mode 100644 "src/js/algorithms/shuffle/fisher\342\200\223yates.js" create mode 100644 src/js/algorithms/sorting/bucket-sort.js create mode 100644 src/js/algorithms/sorting/counting-sort.js create mode 100644 src/js/algorithms/sorting/radix-sort.js create mode 100644 test/js/algorithms/search/binary-search.spec.js create mode 100644 test/js/algorithms/search/interpolation-search.spec.js create mode 100644 test/js/algorithms/search/min-max-search.spec.js create mode 100644 test/js/algorithms/search/search-algorithms-tests.js create mode 100644 test/js/algorithms/search/sequential-search.spec.js create mode 100644 "test/js/algorithms/shuffle/fisher\342\200\223yates.spec.js" create mode 100644 test/js/algorithms/sorting/bubble-sort-improved.spec.js create mode 100644 test/js/algorithms/sorting/bubble-sort.spec.js create mode 100644 test/js/algorithms/sorting/bucket-sort.spec.js create mode 100644 test/js/algorithms/sorting/counting-sort.spec.js create mode 100644 test/js/algorithms/sorting/heap-sort.spec.js create mode 100644 test/js/algorithms/sorting/insertion-sort.spec.js create mode 100644 test/js/algorithms/sorting/merge-sort.spec.js create mode 100644 test/js/algorithms/sorting/quicksort.spec.js create mode 100644 test/js/algorithms/sorting/radix-sort.spec.js create mode 100644 test/js/algorithms/sorting/selection-sort.spec.js create mode 100644 test/js/algorithms/sorting/shell-sort.spec.js create mode 100644 test/js/algorithms/sorting/sort-algorithm-tests.js diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index 30aba433..a6e66bef 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=11)}([function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return l;if(1===e){i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s)}else{n(e-1,t,i,r,o,a,u,l),i.push(t.pop());var f={};f[o]=t.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f),n(e-1,r,t,i,u,o,a,l)}return l}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,l=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(l=t.pop(),n.indexOf(l)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),l(t,[{key:"push",value:function(e){if(this.isEmpty())s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(25)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(9),n(10)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(e){return e&&e.__esModule?e:{default:e}}(r),s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),s(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=f(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(l.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,l=2*t+2;a0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(8)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];r(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected||this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=14)}([function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t,n){var r=n(e,t);return r===l.LESS_THAN||r===l.EQUALS}function n(e,t,n){var r=n(e,t);return r===l.BIGGER_THAN||r===l.EQUALS}function r(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}function r(e,t,i,o){var u=void 0;return e.length>1&&(u=n(e,t,i,o),t1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return r(e,0,e.length-1,n)}Object.defineProperty(e,"__esModule",{value:!0}),e.quickSort=i})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(15),n(3),n(16),n(17),n(18),n(4),n(7),n(19),n(20),n(1),n(8),n(21),n(22),n(23),n(24),n(9),n(25),n(26),n(27),n(28),n(30),n(31),n(10),n(32),n(53),n(33),n(34),n(35),n(36),n(37),n(38),n(39),n(40),n(41),n(42),n(43),n(44),n(45),n(12),n(46),n(13),n(47),n(48),n(49),n(50),n(51),n(52),n(6),n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i,o,u,a,f,l,s,c,h,p,v,d,y,b,g,m,k,_,O,E,S,j,P,w,x,C,T,N,L,A,M,H,F,B,I,D,R,G,z,q,V,U,Y,W,K,X){"use strict";function Q(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(e,"__esModule",{value:!0}),e.findMinValue=e.findMaxValue=e.sequentialSearch=e.interpolationSearch=e.binarySearch=e.shellSort=e.selectionSort=e.radixSort=e.quickSort=e.mergeSort=e.insertionSort=e.countingSort=e.bucketSort=e.modifiedBubbleSort=e.bubbleSort=e.shuffle=e.kruskal=e.prim=e.floydWarshall=e.dijkstra=e.DFS=e.depthFirstSearch=e.BFS=e.breadthFirstSearch=e.Graph=e.heapSort=e.MaxHeap=e.MinHeap=e.AVLTree=e.BinarySearchTree=e.fibonacciMemoization=e.fibonacciIterative=e.fibonacci=e.factorial=e.factorialIterative=e.HashTableLinearProbingLazy=e.HashTableLinearProbing=e.HashTableSeparateChaining=e.HashTable=e.Dictionary=e.Set=e.StackLinkedList=e.SortedLinkedList=e.CircularLinkedList=e.DoublyLinkedList=e.LinkedList=e.palindromeChecker=e.hotPotato=e.Deque=e.Queue=e.parenthesesChecker=e.decimalToBinary=e.baseConverter=e.hanoiStack=e.hanoi=e.Stack=e.StackArray=e.util=void 0,Object.defineProperty(e,"StackArray",{enumerable:!0,get:function(){return Q(t).default}}),Object.defineProperty(e,"Stack",{enumerable:!0,get:function(){return Q(n).default}}),Object.defineProperty(e,"hanoi",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"hanoiStack",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"baseConverter",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"decimalToBinary",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"parenthesesChecker",{enumerable:!0,get:function(){return Q(o).default}}),Object.defineProperty(e,"Queue",{enumerable:!0,get:function(){return Q(u).default}}),Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return Q(a).default}}),Object.defineProperty(e,"hotPotato",{enumerable:!0,get:function(){return Q(f).default}}),Object.defineProperty(e,"palindromeChecker",{enumerable:!0,get:function(){return Q(l).default}}),Object.defineProperty(e,"LinkedList",{enumerable:!0,get:function(){return Q(s).default}}),Object.defineProperty(e,"DoublyLinkedList",{enumerable:!0,get:function(){return Q(c).default}}),Object.defineProperty(e,"CircularLinkedList",{enumerable:!0,get:function(){return Q(h).default}}),Object.defineProperty(e,"SortedLinkedList",{enumerable:!0,get:function(){return Q(p).default}}),Object.defineProperty(e,"StackLinkedList",{enumerable:!0,get:function(){return Q(v).default}}),Object.defineProperty(e,"Set",{enumerable:!0,get:function(){return Q(d).default}}),Object.defineProperty(e,"Dictionary",{enumerable:!0,get:function(){return Q(y).default}}),Object.defineProperty(e,"HashTable",{enumerable:!0,get:function(){return Q(b).default}}),Object.defineProperty(e,"HashTableSeparateChaining",{enumerable:!0,get:function(){return Q(g).default}}),Object.defineProperty(e,"HashTableLinearProbing",{enumerable:!0,get:function(){return Q(m).default}}),Object.defineProperty(e,"HashTableLinearProbingLazy",{enumerable:!0,get:function(){return Q(k).default}}),Object.defineProperty(e,"factorialIterative",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"factorial",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"fibonacci",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciIterative",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciMemoization",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"BinarySearchTree",{enumerable:!0,get:function(){return Q(E).default}}),Object.defineProperty(e,"AVLTree",{enumerable:!0,get:function(){return Q(S).default}}),Object.defineProperty(e,"MinHeap",{enumerable:!0,get:function(){return j.MinHeap}}),Object.defineProperty(e,"MaxHeap",{enumerable:!0,get:function(){return j.MaxHeap}}),Object.defineProperty(e,"heapSort",{enumerable:!0,get:function(){return Q(P).default}}),Object.defineProperty(e,"Graph",{enumerable:!0,get:function(){return Q(w).default}}),Object.defineProperty(e,"breadthFirstSearch",{enumerable:!0,get:function(){return x.breadthFirstSearch}}),Object.defineProperty(e,"BFS",{enumerable:!0,get:function(){return x.BFS}}),Object.defineProperty(e,"depthFirstSearch",{enumerable:!0,get:function(){return C.depthFirstSearch}}),Object.defineProperty(e,"DFS",{enumerable:!0,get:function(){return C.DFS}}),Object.defineProperty(e,"dijkstra",{enumerable:!0,get:function(){return T.dijkstra}}),Object.defineProperty(e,"floydWarshall",{enumerable:!0,get:function(){return N.floydWarshall}}),Object.defineProperty(e,"prim",{enumerable:!0,get:function(){return L.prim}}),Object.defineProperty(e,"kruskal",{enumerable:!0,get:function(){return A.kruskal}}),Object.defineProperty(e,"shuffle",{enumerable:!0,get:function(){return M.shuffle}}),Object.defineProperty(e,"bubbleSort",{enumerable:!0,get:function(){return H.bubbleSort}}),Object.defineProperty(e,"modifiedBubbleSort",{enumerable:!0,get:function(){return F.modifiedBubbleSort}}),Object.defineProperty(e,"bucketSort",{enumerable:!0,get:function(){return B.bucketSort}}),Object.defineProperty(e,"countingSort",{enumerable:!0,get:function(){return I.countingSort}}),Object.defineProperty(e,"insertionSort",{enumerable:!0,get:function(){return D.insertionSort}}),Object.defineProperty(e,"mergeSort",{enumerable:!0,get:function(){return R.mergeSort}}),Object.defineProperty(e,"quickSort",{enumerable:!0,get:function(){return G.quickSort}}),Object.defineProperty(e,"radixSort",{enumerable:!0,get:function(){return z.radixSort}}),Object.defineProperty(e,"selectionSort",{enumerable:!0,get:function(){return q.selectionSort}}),Object.defineProperty(e,"shellSort",{enumerable:!0,get:function(){return V.shellSort}}),Object.defineProperty(e,"binarySearch",{enumerable:!0,get:function(){return U.binarySearch}}),Object.defineProperty(e,"interpolationSearch",{enumerable:!0,get:function(){return Y.interpolationSearch}}),Object.defineProperty(e,"sequentialSearch",{enumerable:!0,get:function(){return W.sequentialSearch}}),Object.defineProperty(e,"findMaxValue",{enumerable:!0,get:function(){return K.findMaxValue}}),Object.defineProperty(e,"findMinValue",{enumerable:!0,get:function(){return K.findMinValue}});var J=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(X);e.util=J})},function(e,t,n){var r,i,o;!function(n,u){i=[e,t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return f;if(1===e){i.push(t.pop());var l={};l[o]=t.toString(),l[u]=r.toString(),l[a]=i.toString(),f.push(l)}else{n(e-1,t,i,r,o,a,u,f),i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),f.push(s),n(e-1,r,t,i,u,o,a,f)}return f}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,f=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(f=t.pop(),n.indexOf(f)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),f(t,[{key:"push",value:function(e){if(this.isEmpty())l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(e){return e&&e.__esModule?e:{default:e}}(r),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=f,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(29)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(10),n(11)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),l(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(f.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,f=2*t+2;a0&&(u=a),f0&&(u=f),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(9)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];r(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected||this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:r(n(e,t))}Object.defineProperty(e,"__esModule",{value:!0}),e.bucketSort=i})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){if(e.length<2)return e;var n=(0,t.findMaxValue)(e),r=0,i=new Array(n+1);return e.forEach(function(e){i[e]||(i[e]=0),i[e]++}),i.forEach(function(t,n){for(;t>0;)e[r++]=n,t--}),e}Object.defineProperty(e,"__esModule",{value:!0}),e.countingSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r){for(var i=0,o=0,u=[];i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e.length>1){var o=e,u=o.length,a=Math.floor(u/2);e=n(r(e.slice(0,a),i),r(e.slice(a,u),i),i)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.mergeSort=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e}Object.defineProperty(e,"__esModule",{value:!0}),e.radixSort=n;var r=function(e,t,n,r){for(var i=void 0,o=[],u=[],a=0;a=0;s--)i=Math.floor((e[s]-r)/n%t),u[--o[i]]=e[s];for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0),n(13)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var f=Math.floor((u+a)/2),l=o[f];if(i(l,r)===t.Compare.LESS_THAN)u=f+1;else{if(i(l,r)!==t.Compare.BIGGER_THAN)return f;a=f-1}}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=e.length,a=0,f=u-1,l=-1,s=-1;a<=f&&(0,t.biggerEquals)(n,e[a],r)&&(0,t.lesserEquals)(n,e[f],r);){if(s=o(n,e[a])/o(e[f],e[a]),l=a+Math.floor((f-a)*s),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?a=l+1:f=l-1}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.interpolationSearch=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})}])}); \ No newline at end of file diff --git a/package.json b/package.json index 85c8af80..28aa6962 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "lint:js": "eslint src/js && eslint test/js", "lint:ts": "tslint -c tslint.json 'src/ts/**/*.ts' && tslint -c tslint.json 'test/ts/**/*.ts'", "lint": "npm run lint:js && npm run lint:ts", - "test:js": "mocha --compilers js:babel-core/register ./test/js/**/**/*.spec.js --reporter mochawesome", - "test:ts": "mocha -r ts-node/register --recursive ./test/ts/**/**/*.spec.ts", + "test:js": "mocha --compilers js:babel-core/register ./test/js --recursive --reporter mochawesome", + "test:ts": "mocha -r ts-node/register ./test/ts/**/*.spec.ts ./test/ts/**/**/*.spec.ts --recursive", "test": "npm run test:js && npm run test:ts", "dev": "npm run clean && npm run lint && npm run webpack && npm run generate-report", "dev2": "npm run clean && npm run lint && npm run webpack && npm run generate-report2", diff --git a/src/js/algorithms/search/binary-search.js b/src/js/algorithms/search/binary-search.js new file mode 100644 index 00000000..0c2f9fba --- /dev/null +++ b/src/js/algorithms/search/binary-search.js @@ -0,0 +1,24 @@ +import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util'; +import { quickSort } from '../sorting/quicksort'; + +export function binarySearch(array, value, compareFn = defaultCompare) { + const sortedArray = quickSort(array); + let low = 0; + let high = sortedArray.length - 1; + while (low <= high) { + const mid = Math.floor((low + high) / 2); + const element = sortedArray[mid]; + // console.log('mid element is ' + element); + if (compareFn(element, value) === Compare.LESS_THAN) { + low = mid + 1; + // console.log('low is ' + low); + } else if (compareFn(element, value) === Compare.BIGGER_THAN) { + high = mid - 1; + // console.log('high is ' + high); + } else { + // console.log('found it'); + return mid; + } + } + return DOES_NOT_EXIST; +} diff --git a/src/js/algorithms/search/interpolation-search.js b/src/js/algorithms/search/interpolation-search.js new file mode 100644 index 00000000..e2153349 --- /dev/null +++ b/src/js/algorithms/search/interpolation-search.js @@ -0,0 +1,40 @@ +import { + biggerEquals, + Compare, + defaultCompare, + defaultEquals, + defaultDiff, + DOES_NOT_EXIST, + lesserEquals +} from '../../util'; + +export function interpolationSearch( + array, + value, + compareFn = defaultCompare, + equalsFn = defaultEquals, + diffFn = defaultDiff +) { + const { length } = array; + let low = 0; + let high = length - 1; + let position = -1; + let delta = -1; + while ( + low <= high && + biggerEquals(value, array[low], compareFn) && + lesserEquals(value, array[high], compareFn) + ) { + delta = diffFn(value, array[low]) / diffFn(array[high], array[low]); + position = low + Math.floor((high - low) * delta); + if (equalsFn(array[position], value)) { + return position; + } + if (compareFn(array[position], value) === Compare.LESS_THAN) { + low = position + 1; + } else { + high = position - 1; + } + } + return DOES_NOT_EXIST; +} diff --git a/src/js/algorithms/search/min-max-search.js b/src/js/algorithms/search/min-max-search.js new file mode 100644 index 00000000..ddefb113 --- /dev/null +++ b/src/js/algorithms/search/min-max-search.js @@ -0,0 +1,26 @@ +import { defaultCompare, Compare } from '../../util'; + +export function findMaxValue(array, compareFn = defaultCompare) { + if (array && array.length > 0) { + let max = array[0]; + for (let i = 1; i < array.length; i++) { + if (compareFn(max, array[i]) === Compare.LESS_THAN) { + max = array[i]; + } + } + return max; + } + return undefined; +} +export function findMinValue(array, compareFn = defaultCompare) { + if (array && array.length > 0) { + let min = array[0]; + for (let i = 1; i < array.length; i++) { + if (compareFn(min, array[i]) === Compare.BIGGER_THAN) { + min = array[i]; + } + } + return min; + } + return undefined; +} diff --git a/src/js/algorithms/search/sequential-search.js b/src/js/algorithms/search/sequential-search.js new file mode 100644 index 00000000..346c23ac --- /dev/null +++ b/src/js/algorithms/search/sequential-search.js @@ -0,0 +1,10 @@ +import { defaultEquals, DOES_NOT_EXIST } from '../../util'; + +export function sequentialSearch(array, value, equalsFn = defaultEquals) { + for (let i = 0; i < array.length; i++) { + if (equalsFn(value, array[i])) { + return i; + } + } + return DOES_NOT_EXIST; +} diff --git "a/src/js/algorithms/shuffle/fisher\342\200\223yates.js" "b/src/js/algorithms/shuffle/fisher\342\200\223yates.js" new file mode 100644 index 00000000..f951a3ca --- /dev/null +++ "b/src/js/algorithms/shuffle/fisher\342\200\223yates.js" @@ -0,0 +1,11 @@ +import { swap } from '../../util'; + +export function shuffle(array) { + let currentIndex = array.length; + while (currentIndex !== 0) { + const randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex--; + swap(array, currentIndex, randomIndex); + } + return array; +} diff --git a/src/js/algorithms/sorting/bucket-sort.js b/src/js/algorithms/sorting/bucket-sort.js new file mode 100644 index 00000000..be8527fe --- /dev/null +++ b/src/js/algorithms/sorting/bucket-sort.js @@ -0,0 +1,41 @@ +import { insertionSort } from './insertion-sort'; + +function createBuckets(array, bucketSize) { + let minValue = array[0]; + let maxValue = array[0]; + for (let i = 1; i < array.length; i++) { + if (array[i] < minValue) { + minValue = array[i]; + } else if (array[i] > maxValue) { + maxValue = array[i]; + } + } + const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1; + const buckets = []; + for (let i = 0; i < bucketCount; i++) { + buckets[i] = []; + } + for (let i = 0; i < array.length; i++) { + buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]); + } + return buckets; +} +function sortBuckets(buckets) { + const sortedArray = []; + for (let i = 0; i < buckets.length; i++) { + if (buckets[i] != null) { + insertionSort(buckets[i]); + for (let j = 0; j < buckets[i].length; j++) { + sortedArray.push(buckets[i][j]); + } + } + } + return sortedArray; +} +export function bucketSort(array, bucketSize = 5) { + if (array.length < 2) { + return array; + } + const buckets = createBuckets(array, bucketSize); + return sortBuckets(buckets); +} diff --git a/src/js/algorithms/sorting/counting-sort.js b/src/js/algorithms/sorting/counting-sort.js new file mode 100644 index 00000000..9a19201b --- /dev/null +++ b/src/js/algorithms/sorting/counting-sort.js @@ -0,0 +1,24 @@ +import { findMaxValue } from '../search/min-max-search'; + +export function countingSort(array) { + if (array.length < 2) { + return array; + } + const maxValue = findMaxValue(array); + let sortedIndex = 0; + const counts = new Array(maxValue + 1); + array.forEach(element => { + if (!counts[element]) { + counts[element] = 0; + } + counts[element]++; + }); + // console.log('Frequencies: ' + counts.join()); + counts.forEach((element, i) => { + while (element > 0) { + array[sortedIndex++] = i; + element--; + } + }); + return array; +} diff --git a/src/js/algorithms/sorting/radix-sort.js b/src/js/algorithms/sorting/radix-sort.js new file mode 100644 index 00000000..68de9e0f --- /dev/null +++ b/src/js/algorithms/sorting/radix-sort.js @@ -0,0 +1,41 @@ +import { findMaxValue, findMinValue } from '../search/min-max-search'; + +const countingSortForRadix = (array, radixBase, significantDigit, minValue) => { + let bucketsIndex; + const buckets = []; + const aux = []; + for (let i = 0; i < radixBase; i++) { + buckets[i] = 0; + } + for (let i = 0; i < array.length; i++) { + bucketsIndex = Math.floor(((array[i] - minValue) / significantDigit) % radixBase); + buckets[bucketsIndex]++; + } + for (let i = 1; i < radixBase; i++) { + buckets[i] += buckets[i - 1]; + } + for (let i = array.length - 1; i >= 0; i--) { + bucketsIndex = Math.floor(((array[i] - minValue) / significantDigit) % radixBase); + aux[--buckets[bucketsIndex]] = array[i]; + } + for (let i = 0; i < array.length; i++) { + array[i] = aux[i]; + } + return array; +}; +export function radixSort(array, radixBase = 10) { + if (array.length < 2) { + return array; + } + const minValue = findMinValue(array); + const maxValue = findMaxValue(array); + // Perform counting sort for each significant digit, starting at 1 + let significantDigit = 1; + while ((maxValue - minValue) / significantDigit >= 1) { + // console.log('radix sort for digit ' + significantDigit); + array = countingSortForRadix(array, radixBase, significantDigit, minValue); + // console.log(array.join()); + significantDigit *= radixBase; + } + return array; +} diff --git a/src/js/index.js b/src/js/index.js index 8e468247..5e16442e 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -61,3 +61,23 @@ export { dijkstra } from './algorithms/graph/dijkstra'; export { floydWarshall } from './algorithms/graph/floyd-warshall'; export { prim } from './algorithms/graph/prim'; export { kruskal } from './algorithms/graph/kruskal'; + +// chapter 12 +export { shuffle } from './algorithms/shuffle/fisher–yates'; + +export { bubbleSort } from './algorithms/sorting/bubble-sort'; +export { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved'; +export { bucketSort } from './algorithms/sorting/bucket-sort'; +export { countingSort } from './algorithms/sorting/counting-sort'; +export { insertionSort } from './algorithms/sorting/insertion-sort'; +export { mergeSort } from './algorithms/sorting/merge-sort'; +export { quickSort } from './algorithms/sorting/quicksort'; +export { radixSort } from './algorithms/sorting/radix-sort'; +export { selectionSort } from './algorithms/sorting/selection-sort'; +export { shellSort } from './algorithms/sorting/shell-sort'; + +export { binarySearch } from './algorithms/search/binary-search'; +export { interpolationSearch } from './algorithms/search/interpolation-search'; +export { sequentialSearch } from './algorithms/search/sequential-search'; +export { findMaxValue } from './algorithms/search/min-max-search'; +export { findMinValue } from './algorithms/search/min-max-search'; diff --git a/src/js/util.js b/src/js/util.js index 47bc0f6c..70e85181 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -1,8 +1,21 @@ export const Compare = { LESS_THAN: -1, - BIGGER_THAN: 1 + BIGGER_THAN: 1, + EQUALS: 0 }; +export const DOES_NOT_EXIST = -1; + +export function lesserEquals(a, b, compareFn) { + const comp = compareFn(a, b); + return comp === Compare.LESS_THAN || comp === Compare.EQUALS; +} + +export function biggerEquals(a, b, compareFn) { + const comp = compareFn(a, b); + return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS; +} + export function defaultCompare(a, b) { if (a === b) { return 0; @@ -34,3 +47,7 @@ export function swap(array, a, b) { export function reverseCompare(compareFn) { return (a, b) => compareFn(b, a); } + +export function defaultDiff(a, b) { + return Number(a) - Number(b); +} diff --git a/src/ts/algorithms/sorting/counting-sort.ts b/src/ts/algorithms/sorting/counting-sort.ts index 3720c605..be3d9046 100644 --- a/src/ts/algorithms/sorting/counting-sort.ts +++ b/src/ts/algorithms/sorting/counting-sort.ts @@ -1,4 +1,4 @@ -import { findMaxValue } from '../..'; +import { findMaxValue } from '../search/min-max-search'; export function countingSort(array: number[]) { diff --git a/test/js/algorithms/search/binary-search.spec.js b/test/js/algorithms/search/binary-search.spec.js new file mode 100644 index 00000000..220c1b28 --- /dev/null +++ b/test/js/algorithms/search/binary-search.spec.js @@ -0,0 +1,4 @@ +import { binarySearch } from '../../../../src/js/index'; +import { testSearchAlgorithm } from './search-algorithms-tests'; + +testSearchAlgorithm(binarySearch, 'Binary Search'); diff --git a/test/js/algorithms/search/interpolation-search.spec.js b/test/js/algorithms/search/interpolation-search.spec.js new file mode 100644 index 00000000..1daff1cc --- /dev/null +++ b/test/js/algorithms/search/interpolation-search.spec.js @@ -0,0 +1,4 @@ +import { interpolationSearch } from '../../../../src/js/index'; +import { testSearchAlgorithm } from './search-algorithms-tests'; + +testSearchAlgorithm(interpolationSearch, 'Interpolation Search', { customEquals: false }); diff --git a/test/js/algorithms/search/min-max-search.spec.js b/test/js/algorithms/search/min-max-search.spec.js new file mode 100644 index 00000000..0c789a2f --- /dev/null +++ b/test/js/algorithms/search/min-max-search.spec.js @@ -0,0 +1,31 @@ +import 'mocha'; +import { expect } from 'chai'; +import { findMinValue, findMaxValue } from '../../../../src/js/index'; + +describe('Min and Max Values Search', () => { + const SIZE = 10; + + function createSortedArray() { + const array = []; + for (let i = 1; i <= SIZE; i++) { + array.push(i); + } + return array; + } + + it('min value - works with empty arrays', () => { + expect(findMinValue([])).to.equal(undefined); + }); + + it('max value - works with empty arrays', () => { + expect(findMaxValue([])).to.equal(undefined); + }); + + it('min value', () => { + expect(findMinValue(createSortedArray())).to.equal(1); + }); + + it('max value', () => { + expect(findMaxValue(createSortedArray())).to.equal(SIZE); + }); +}); diff --git a/test/js/algorithms/search/search-algorithms-tests.js b/test/js/algorithms/search/search-algorithms-tests.js new file mode 100644 index 00000000..d3e1774e --- /dev/null +++ b/test/js/algorithms/search/search-algorithms-tests.js @@ -0,0 +1,43 @@ +import 'mocha'; +import { expect } from 'chai'; + +const customEquals = (a, b) => a.key === b.key; + +export function testSearchAlgorithm( + searchAlgorithm, + algorithmName, + config = { customEquals: true } +) { + describe(algorithmName, () => { + const SIZE = 10; + + function createSortedArray() { + const array = []; + for (let i = 1; i <= SIZE; i++) { + array.push(i); + } + return array; + } + + it('works with empty arrays', () => { + expect(searchAlgorithm([], 1)).to.equal(-1); + }); + + it('finds value at the first position', () => { + const array = createSortedArray(); + expect(searchAlgorithm(array, 1)).to.equal(0); + }); + + it('finds value at the last position', () => { + const array = createSortedArray(); + expect(searchAlgorithm(array, SIZE)).to.equal(SIZE - 1); + }); + + if (config.customEquals) { + it('finds value with custom equals function', () => { + const array = [{ key: 1 }, { key: 2 }, { key: 3 }]; + expect(searchAlgorithm(array, { key: 2 }, customEquals)).to.equal(1); + }); + } + }); +} diff --git a/test/js/algorithms/search/sequential-search.spec.js b/test/js/algorithms/search/sequential-search.spec.js new file mode 100644 index 00000000..a308474e --- /dev/null +++ b/test/js/algorithms/search/sequential-search.spec.js @@ -0,0 +1,4 @@ +import { sequentialSearch } from '../../../../src/js/index'; +import { testSearchAlgorithm } from './search-algorithms-tests'; + +testSearchAlgorithm(sequentialSearch, 'Sequential Search'); diff --git "a/test/js/algorithms/shuffle/fisher\342\200\223yates.spec.js" "b/test/js/algorithms/shuffle/fisher\342\200\223yates.spec.js" new file mode 100644 index 00000000..6e87916c --- /dev/null +++ "b/test/js/algorithms/shuffle/fisher\342\200\223yates.spec.js" @@ -0,0 +1,31 @@ +import 'mocha'; +import { expect } from 'chai'; +import { shuffle } from '../../../../src/js/index'; + +describe('Fisher-Yates Suffle', () => { + const SIZE = 100; + + function createSortedArray() { + const array = []; + for (let i = 1; i <= SIZE; i++) { + array.push(i); + } + return array; + } + + it('works with empty arrays', () => { + expect(shuffle([])).to.deep.equal([]); + }); + + it('works with arrays with a single value', () => { + const array = [1]; + expect(shuffle(array)).to.deep.equal(array); + }); + + it('works with sorted arrays', () => { + let array = createSortedArray(); + const sortedArray = createSortedArray(); + array = shuffle(array); + expect(array).to.not.deep.equal(sortedArray); + }); +}); diff --git a/test/js/algorithms/sorting/bubble-sort-improved.spec.js b/test/js/algorithms/sorting/bubble-sort-improved.spec.js new file mode 100644 index 00000000..1ad03b39 --- /dev/null +++ b/test/js/algorithms/sorting/bubble-sort-improved.spec.js @@ -0,0 +1,4 @@ +import { modifiedBubbleSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(modifiedBubbleSort, 'Bubble Sort - Improved'); diff --git a/test/js/algorithms/sorting/bubble-sort.spec.js b/test/js/algorithms/sorting/bubble-sort.spec.js new file mode 100644 index 00000000..fe3b31a2 --- /dev/null +++ b/test/js/algorithms/sorting/bubble-sort.spec.js @@ -0,0 +1,5 @@ +import { bubbleSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(bubbleSort, 'Bubble Sort'); + diff --git a/test/js/algorithms/sorting/bucket-sort.spec.js b/test/js/algorithms/sorting/bucket-sort.spec.js new file mode 100644 index 00000000..2a00d8db --- /dev/null +++ b/test/js/algorithms/sorting/bucket-sort.spec.js @@ -0,0 +1,4 @@ +import { bucketSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(bucketSort, 'Bucket Sort', { reverseCompare: false }); diff --git a/test/js/algorithms/sorting/counting-sort.spec.js b/test/js/algorithms/sorting/counting-sort.spec.js new file mode 100644 index 00000000..783a48a5 --- /dev/null +++ b/test/js/algorithms/sorting/counting-sort.spec.js @@ -0,0 +1,4 @@ +import { countingSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(countingSort, 'Counting Sort', { reverseCompare: false }); diff --git a/test/js/algorithms/sorting/heap-sort.spec.js b/test/js/algorithms/sorting/heap-sort.spec.js new file mode 100644 index 00000000..75505e4e --- /dev/null +++ b/test/js/algorithms/sorting/heap-sort.spec.js @@ -0,0 +1,5 @@ +import { heapSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(heapSort, 'Heap Sort'); + diff --git a/test/js/algorithms/sorting/insertion-sort.spec.js b/test/js/algorithms/sorting/insertion-sort.spec.js new file mode 100644 index 00000000..324e12c5 --- /dev/null +++ b/test/js/algorithms/sorting/insertion-sort.spec.js @@ -0,0 +1,5 @@ +import { insertionSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(insertionSort, 'Insertion Sort'); + diff --git a/test/js/algorithms/sorting/merge-sort.spec.js b/test/js/algorithms/sorting/merge-sort.spec.js new file mode 100644 index 00000000..f46ca6bb --- /dev/null +++ b/test/js/algorithms/sorting/merge-sort.spec.js @@ -0,0 +1,5 @@ +import { mergeSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(mergeSort, 'Merge Sort'); + diff --git a/test/js/algorithms/sorting/quicksort.spec.js b/test/js/algorithms/sorting/quicksort.spec.js new file mode 100644 index 00000000..d23694db --- /dev/null +++ b/test/js/algorithms/sorting/quicksort.spec.js @@ -0,0 +1,5 @@ +import { quickSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(quickSort, 'Quick Sort'); + diff --git a/test/js/algorithms/sorting/radix-sort.spec.js b/test/js/algorithms/sorting/radix-sort.spec.js new file mode 100644 index 00000000..b312af90 --- /dev/null +++ b/test/js/algorithms/sorting/radix-sort.spec.js @@ -0,0 +1,5 @@ +import { radixSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(radixSort, 'Radix Sort', { reverseCompare: false }); + diff --git a/test/js/algorithms/sorting/selection-sort.spec.js b/test/js/algorithms/sorting/selection-sort.spec.js new file mode 100644 index 00000000..ad372942 --- /dev/null +++ b/test/js/algorithms/sorting/selection-sort.spec.js @@ -0,0 +1,5 @@ +import { selectionSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(selectionSort, 'Selection Sort'); + diff --git a/test/js/algorithms/sorting/shell-sort.spec.js b/test/js/algorithms/sorting/shell-sort.spec.js new file mode 100644 index 00000000..eb9ba569 --- /dev/null +++ b/test/js/algorithms/sorting/shell-sort.spec.js @@ -0,0 +1,5 @@ +import { shellSort } from '../../../../src/js/index'; +import { testSortAlgorithm } from './sort-algorithm-tests'; + +testSortAlgorithm(shellSort, 'Shell Sort'); + diff --git a/test/js/algorithms/sorting/sort-algorithm-tests.js b/test/js/algorithms/sorting/sort-algorithm-tests.js new file mode 100644 index 00000000..6b883e83 --- /dev/null +++ b/test/js/algorithms/sorting/sort-algorithm-tests.js @@ -0,0 +1,69 @@ +import 'mocha'; +import { expect } from 'chai'; +import { Compare } from '../../../../src/js/util'; + +export function testSortAlgorithm(sortAlgorithm, algorithmName, config = { reverseCompare: true }) { + describe(algorithmName, () => { + const SIZE = 100; + + function createNonSortedArray() { + const array = []; + for (let i = SIZE; i > 0; i--) { + array.push(i); + } + return array; + } + + function createSortedArray() { + const array = []; + for (let i = 1; i <= SIZE; i++) { + array.push(i); + } + return array; + } + + it('works with empty arrays', () => { + expect(sortAlgorithm([])).to.deep.equal([]); + }); + + it('works with sorted arrays', () => { + let array = createSortedArray(); + const sortedArray = createSortedArray(); + array = sortAlgorithm(array); + expect(array).to.deep.equal(sortedArray); + }); + + it('works with non-sorted arrays', () => { + let array = createNonSortedArray(); + const sortedArray = createSortedArray(); + array = sortAlgorithm(array); + + expect(array).to.deep.equal(sortedArray); + + for (let i = 0; i < array.length - 1; i++) { + expect(array[i] <= array[i + 1]).to.equal(true); + } + }); + + function reverseCompare(a, b) { + if (a === b) { + return 0; + } + return a < b ? Compare.BIGGER_THAN : Compare.LESS_THAN; + } + + if (config.reverseCompare) { + it('works with reverse comparator - descending order', () => { + let array = createSortedArray(); + const sortedArray = createNonSortedArray(); + array = sortAlgorithm(array, reverseCompare); + + expect(array).to.deep.equal(sortedArray); + + for (let i = 0; i < array.length - 1; i++) { + expect(array[i] >= array[i + 1]).to.equal(true); + } + }); + } + }); +} From 6b5cc0ce2b118f8af977d1a13dcf5f49e986058c Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 30 Dec 2017 19:04:19 -0200 Subject: [PATCH 050/188] [Sorting and Searching Algorithms] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- src/js/algorithms/sorting/bucket-sort.js | 4 +--- src/ts/algorithms/sorting/bucket-sort.ts | 4 +--- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index a6e66bef..62b05880 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=14)}([function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t,n){var r=n(e,t);return r===l.LESS_THAN||r===l.EQUALS}function n(e,t,n){var r=n(e,t);return r===l.BIGGER_THAN||r===l.EQUALS}function r(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}function r(e,t,i,o){var u=void 0;return e.length>1&&(u=n(e,t,i,o),t1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return r(e,0,e.length-1,n)}Object.defineProperty(e,"__esModule",{value:!0}),e.quickSort=i})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(15),n(3),n(16),n(17),n(18),n(4),n(7),n(19),n(20),n(1),n(8),n(21),n(22),n(23),n(24),n(9),n(25),n(26),n(27),n(28),n(30),n(31),n(10),n(32),n(53),n(33),n(34),n(35),n(36),n(37),n(38),n(39),n(40),n(41),n(42),n(43),n(44),n(45),n(12),n(46),n(13),n(47),n(48),n(49),n(50),n(51),n(52),n(6),n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i,o,u,a,f,l,s,c,h,p,v,d,y,b,g,m,k,_,O,E,S,j,P,w,x,C,T,N,L,A,M,H,F,B,I,D,R,G,z,q,V,U,Y,W,K,X){"use strict";function Q(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(e,"__esModule",{value:!0}),e.findMinValue=e.findMaxValue=e.sequentialSearch=e.interpolationSearch=e.binarySearch=e.shellSort=e.selectionSort=e.radixSort=e.quickSort=e.mergeSort=e.insertionSort=e.countingSort=e.bucketSort=e.modifiedBubbleSort=e.bubbleSort=e.shuffle=e.kruskal=e.prim=e.floydWarshall=e.dijkstra=e.DFS=e.depthFirstSearch=e.BFS=e.breadthFirstSearch=e.Graph=e.heapSort=e.MaxHeap=e.MinHeap=e.AVLTree=e.BinarySearchTree=e.fibonacciMemoization=e.fibonacciIterative=e.fibonacci=e.factorial=e.factorialIterative=e.HashTableLinearProbingLazy=e.HashTableLinearProbing=e.HashTableSeparateChaining=e.HashTable=e.Dictionary=e.Set=e.StackLinkedList=e.SortedLinkedList=e.CircularLinkedList=e.DoublyLinkedList=e.LinkedList=e.palindromeChecker=e.hotPotato=e.Deque=e.Queue=e.parenthesesChecker=e.decimalToBinary=e.baseConverter=e.hanoiStack=e.hanoi=e.Stack=e.StackArray=e.util=void 0,Object.defineProperty(e,"StackArray",{enumerable:!0,get:function(){return Q(t).default}}),Object.defineProperty(e,"Stack",{enumerable:!0,get:function(){return Q(n).default}}),Object.defineProperty(e,"hanoi",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"hanoiStack",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"baseConverter",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"decimalToBinary",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"parenthesesChecker",{enumerable:!0,get:function(){return Q(o).default}}),Object.defineProperty(e,"Queue",{enumerable:!0,get:function(){return Q(u).default}}),Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return Q(a).default}}),Object.defineProperty(e,"hotPotato",{enumerable:!0,get:function(){return Q(f).default}}),Object.defineProperty(e,"palindromeChecker",{enumerable:!0,get:function(){return Q(l).default}}),Object.defineProperty(e,"LinkedList",{enumerable:!0,get:function(){return Q(s).default}}),Object.defineProperty(e,"DoublyLinkedList",{enumerable:!0,get:function(){return Q(c).default}}),Object.defineProperty(e,"CircularLinkedList",{enumerable:!0,get:function(){return Q(h).default}}),Object.defineProperty(e,"SortedLinkedList",{enumerable:!0,get:function(){return Q(p).default}}),Object.defineProperty(e,"StackLinkedList",{enumerable:!0,get:function(){return Q(v).default}}),Object.defineProperty(e,"Set",{enumerable:!0,get:function(){return Q(d).default}}),Object.defineProperty(e,"Dictionary",{enumerable:!0,get:function(){return Q(y).default}}),Object.defineProperty(e,"HashTable",{enumerable:!0,get:function(){return Q(b).default}}),Object.defineProperty(e,"HashTableSeparateChaining",{enumerable:!0,get:function(){return Q(g).default}}),Object.defineProperty(e,"HashTableLinearProbing",{enumerable:!0,get:function(){return Q(m).default}}),Object.defineProperty(e,"HashTableLinearProbingLazy",{enumerable:!0,get:function(){return Q(k).default}}),Object.defineProperty(e,"factorialIterative",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"factorial",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"fibonacci",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciIterative",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciMemoization",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"BinarySearchTree",{enumerable:!0,get:function(){return Q(E).default}}),Object.defineProperty(e,"AVLTree",{enumerable:!0,get:function(){return Q(S).default}}),Object.defineProperty(e,"MinHeap",{enumerable:!0,get:function(){return j.MinHeap}}),Object.defineProperty(e,"MaxHeap",{enumerable:!0,get:function(){return j.MaxHeap}}),Object.defineProperty(e,"heapSort",{enumerable:!0,get:function(){return Q(P).default}}),Object.defineProperty(e,"Graph",{enumerable:!0,get:function(){return Q(w).default}}),Object.defineProperty(e,"breadthFirstSearch",{enumerable:!0,get:function(){return x.breadthFirstSearch}}),Object.defineProperty(e,"BFS",{enumerable:!0,get:function(){return x.BFS}}),Object.defineProperty(e,"depthFirstSearch",{enumerable:!0,get:function(){return C.depthFirstSearch}}),Object.defineProperty(e,"DFS",{enumerable:!0,get:function(){return C.DFS}}),Object.defineProperty(e,"dijkstra",{enumerable:!0,get:function(){return T.dijkstra}}),Object.defineProperty(e,"floydWarshall",{enumerable:!0,get:function(){return N.floydWarshall}}),Object.defineProperty(e,"prim",{enumerable:!0,get:function(){return L.prim}}),Object.defineProperty(e,"kruskal",{enumerable:!0,get:function(){return A.kruskal}}),Object.defineProperty(e,"shuffle",{enumerable:!0,get:function(){return M.shuffle}}),Object.defineProperty(e,"bubbleSort",{enumerable:!0,get:function(){return H.bubbleSort}}),Object.defineProperty(e,"modifiedBubbleSort",{enumerable:!0,get:function(){return F.modifiedBubbleSort}}),Object.defineProperty(e,"bucketSort",{enumerable:!0,get:function(){return B.bucketSort}}),Object.defineProperty(e,"countingSort",{enumerable:!0,get:function(){return I.countingSort}}),Object.defineProperty(e,"insertionSort",{enumerable:!0,get:function(){return D.insertionSort}}),Object.defineProperty(e,"mergeSort",{enumerable:!0,get:function(){return R.mergeSort}}),Object.defineProperty(e,"quickSort",{enumerable:!0,get:function(){return G.quickSort}}),Object.defineProperty(e,"radixSort",{enumerable:!0,get:function(){return z.radixSort}}),Object.defineProperty(e,"selectionSort",{enumerable:!0,get:function(){return q.selectionSort}}),Object.defineProperty(e,"shellSort",{enumerable:!0,get:function(){return V.shellSort}}),Object.defineProperty(e,"binarySearch",{enumerable:!0,get:function(){return U.binarySearch}}),Object.defineProperty(e,"interpolationSearch",{enumerable:!0,get:function(){return Y.interpolationSearch}}),Object.defineProperty(e,"sequentialSearch",{enumerable:!0,get:function(){return W.sequentialSearch}}),Object.defineProperty(e,"findMaxValue",{enumerable:!0,get:function(){return K.findMaxValue}}),Object.defineProperty(e,"findMinValue",{enumerable:!0,get:function(){return K.findMinValue}});var J=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(X);e.util=J})},function(e,t,n){var r,i,o;!function(n,u){i=[e,t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return f;if(1===e){i.push(t.pop());var l={};l[o]=t.toString(),l[u]=r.toString(),l[a]=i.toString(),f.push(l)}else{n(e-1,t,i,r,o,a,u,f),i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),f.push(s),n(e-1,r,t,i,u,o,a,f)}return f}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,f=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(f=t.pop(),n.indexOf(f)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),f(t,[{key:"push",value:function(e){if(this.isEmpty())l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(e){return e&&e.__esModule?e:{default:e}}(r),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=f,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(29)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(10),n(11)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),l(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(f.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,f=2*t+2;a0&&(u=a),f0&&(u=f),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(9)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];r(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected||this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:r(n(e,t))}Object.defineProperty(e,"__esModule",{value:!0}),e.bucketSort=i})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){if(e.length<2)return e;var n=(0,t.findMaxValue)(e),r=0,i=new Array(n+1);return e.forEach(function(e){i[e]||(i[e]=0),i[e]++}),i.forEach(function(t,n){for(;t>0;)e[r++]=n,t--}),e}Object.defineProperty(e,"__esModule",{value:!0}),e.countingSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r){for(var i=0,o=0,u=[];i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e.length>1){var o=e,u=o.length,a=Math.floor(u/2);e=n(r(e.slice(0,a),i),r(e.slice(a,u),i),i)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.mergeSort=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e}Object.defineProperty(e,"__esModule",{value:!0}),e.radixSort=n;var r=function(e,t,n,r){for(var i=void 0,o=[],u=[],a=0;a=0;s--)i=Math.floor((e[s]-r)/n%t),u[--o[i]]=e[s];for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0),n(13)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var f=Math.floor((u+a)/2),l=o[f];if(i(l,r)===t.Compare.LESS_THAN)u=f+1;else{if(i(l,r)!==t.Compare.BIGGER_THAN)return f;a=f-1}}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=e.length,a=0,f=u-1,l=-1,s=-1;a<=f&&(0,t.biggerEquals)(n,e[a],r)&&(0,t.lesserEquals)(n,e[f],r);){if(s=o(n,e[a])/o(e[f],e[a]),l=a+Math.floor((f-a)*s),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?a=l+1:f=l-1}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.interpolationSearch=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=14)}([function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t,n){var r=n(e,t);return r===l.LESS_THAN||r===l.EQUALS}function n(e,t,n){var r=n(e,t);return r===l.BIGGER_THAN||r===l.EQUALS}function r(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}function r(e,t,i,o){var u=void 0;return e.length>1&&(u=n(e,t,i,o),t1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return r(e,0,e.length-1,n)}Object.defineProperty(e,"__esModule",{value:!0}),e.quickSort=i})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(15),n(3),n(16),n(17),n(18),n(4),n(7),n(19),n(20),n(1),n(8),n(21),n(22),n(23),n(24),n(9),n(25),n(26),n(27),n(28),n(30),n(31),n(10),n(32),n(53),n(33),n(34),n(35),n(36),n(37),n(38),n(39),n(40),n(41),n(42),n(43),n(44),n(45),n(12),n(46),n(13),n(47),n(48),n(49),n(50),n(51),n(52),n(6),n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i,o,u,a,f,l,s,c,h,p,v,d,y,b,g,m,k,_,O,E,S,j,P,w,x,C,T,N,L,A,M,H,F,B,I,D,R,G,z,q,V,U,Y,W,K,X){"use strict";function Q(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(e,"__esModule",{value:!0}),e.findMinValue=e.findMaxValue=e.sequentialSearch=e.interpolationSearch=e.binarySearch=e.shellSort=e.selectionSort=e.radixSort=e.quickSort=e.mergeSort=e.insertionSort=e.countingSort=e.bucketSort=e.modifiedBubbleSort=e.bubbleSort=e.shuffle=e.kruskal=e.prim=e.floydWarshall=e.dijkstra=e.DFS=e.depthFirstSearch=e.BFS=e.breadthFirstSearch=e.Graph=e.heapSort=e.MaxHeap=e.MinHeap=e.AVLTree=e.BinarySearchTree=e.fibonacciMemoization=e.fibonacciIterative=e.fibonacci=e.factorial=e.factorialIterative=e.HashTableLinearProbingLazy=e.HashTableLinearProbing=e.HashTableSeparateChaining=e.HashTable=e.Dictionary=e.Set=e.StackLinkedList=e.SortedLinkedList=e.CircularLinkedList=e.DoublyLinkedList=e.LinkedList=e.palindromeChecker=e.hotPotato=e.Deque=e.Queue=e.parenthesesChecker=e.decimalToBinary=e.baseConverter=e.hanoiStack=e.hanoi=e.Stack=e.StackArray=e.util=void 0,Object.defineProperty(e,"StackArray",{enumerable:!0,get:function(){return Q(t).default}}),Object.defineProperty(e,"Stack",{enumerable:!0,get:function(){return Q(n).default}}),Object.defineProperty(e,"hanoi",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"hanoiStack",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"baseConverter",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"decimalToBinary",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"parenthesesChecker",{enumerable:!0,get:function(){return Q(o).default}}),Object.defineProperty(e,"Queue",{enumerable:!0,get:function(){return Q(u).default}}),Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return Q(a).default}}),Object.defineProperty(e,"hotPotato",{enumerable:!0,get:function(){return Q(f).default}}),Object.defineProperty(e,"palindromeChecker",{enumerable:!0,get:function(){return Q(l).default}}),Object.defineProperty(e,"LinkedList",{enumerable:!0,get:function(){return Q(s).default}}),Object.defineProperty(e,"DoublyLinkedList",{enumerable:!0,get:function(){return Q(c).default}}),Object.defineProperty(e,"CircularLinkedList",{enumerable:!0,get:function(){return Q(h).default}}),Object.defineProperty(e,"SortedLinkedList",{enumerable:!0,get:function(){return Q(p).default}}),Object.defineProperty(e,"StackLinkedList",{enumerable:!0,get:function(){return Q(v).default}}),Object.defineProperty(e,"Set",{enumerable:!0,get:function(){return Q(d).default}}),Object.defineProperty(e,"Dictionary",{enumerable:!0,get:function(){return Q(y).default}}),Object.defineProperty(e,"HashTable",{enumerable:!0,get:function(){return Q(b).default}}),Object.defineProperty(e,"HashTableSeparateChaining",{enumerable:!0,get:function(){return Q(g).default}}),Object.defineProperty(e,"HashTableLinearProbing",{enumerable:!0,get:function(){return Q(m).default}}),Object.defineProperty(e,"HashTableLinearProbingLazy",{enumerable:!0,get:function(){return Q(k).default}}),Object.defineProperty(e,"factorialIterative",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"factorial",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"fibonacci",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciIterative",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciMemoization",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"BinarySearchTree",{enumerable:!0,get:function(){return Q(E).default}}),Object.defineProperty(e,"AVLTree",{enumerable:!0,get:function(){return Q(S).default}}),Object.defineProperty(e,"MinHeap",{enumerable:!0,get:function(){return j.MinHeap}}),Object.defineProperty(e,"MaxHeap",{enumerable:!0,get:function(){return j.MaxHeap}}),Object.defineProperty(e,"heapSort",{enumerable:!0,get:function(){return Q(P).default}}),Object.defineProperty(e,"Graph",{enumerable:!0,get:function(){return Q(w).default}}),Object.defineProperty(e,"breadthFirstSearch",{enumerable:!0,get:function(){return x.breadthFirstSearch}}),Object.defineProperty(e,"BFS",{enumerable:!0,get:function(){return x.BFS}}),Object.defineProperty(e,"depthFirstSearch",{enumerable:!0,get:function(){return C.depthFirstSearch}}),Object.defineProperty(e,"DFS",{enumerable:!0,get:function(){return C.DFS}}),Object.defineProperty(e,"dijkstra",{enumerable:!0,get:function(){return T.dijkstra}}),Object.defineProperty(e,"floydWarshall",{enumerable:!0,get:function(){return N.floydWarshall}}),Object.defineProperty(e,"prim",{enumerable:!0,get:function(){return L.prim}}),Object.defineProperty(e,"kruskal",{enumerable:!0,get:function(){return A.kruskal}}),Object.defineProperty(e,"shuffle",{enumerable:!0,get:function(){return M.shuffle}}),Object.defineProperty(e,"bubbleSort",{enumerable:!0,get:function(){return H.bubbleSort}}),Object.defineProperty(e,"modifiedBubbleSort",{enumerable:!0,get:function(){return F.modifiedBubbleSort}}),Object.defineProperty(e,"bucketSort",{enumerable:!0,get:function(){return B.bucketSort}}),Object.defineProperty(e,"countingSort",{enumerable:!0,get:function(){return I.countingSort}}),Object.defineProperty(e,"insertionSort",{enumerable:!0,get:function(){return D.insertionSort}}),Object.defineProperty(e,"mergeSort",{enumerable:!0,get:function(){return R.mergeSort}}),Object.defineProperty(e,"quickSort",{enumerable:!0,get:function(){return G.quickSort}}),Object.defineProperty(e,"radixSort",{enumerable:!0,get:function(){return z.radixSort}}),Object.defineProperty(e,"selectionSort",{enumerable:!0,get:function(){return q.selectionSort}}),Object.defineProperty(e,"shellSort",{enumerable:!0,get:function(){return V.shellSort}}),Object.defineProperty(e,"binarySearch",{enumerable:!0,get:function(){return U.binarySearch}}),Object.defineProperty(e,"interpolationSearch",{enumerable:!0,get:function(){return Y.interpolationSearch}}),Object.defineProperty(e,"sequentialSearch",{enumerable:!0,get:function(){return W.sequentialSearch}}),Object.defineProperty(e,"findMaxValue",{enumerable:!0,get:function(){return K.findMaxValue}}),Object.defineProperty(e,"findMinValue",{enumerable:!0,get:function(){return K.findMinValue}});var J=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(X);e.util=J})},function(e,t,n){var r,i,o;!function(n,u){i=[e,t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return f;if(1===e){i.push(t.pop());var l={};l[o]=t.toString(),l[u]=r.toString(),l[a]=i.toString(),f.push(l)}else{n(e-1,t,i,r,o,a,u,f),i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),f.push(s),n(e-1,r,t,i,u,o,a,f)}return f}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,f=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(f=t.pop(),n.indexOf(f)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),f(t,[{key:"push",value:function(e){if(this.isEmpty())l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(e){return e&&e.__esModule?e:{default:e}}(r),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=f,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(29)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(10),n(11)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),l(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(f.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,f=2*t+2;a0&&(u=a),f0&&(u=f),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(9)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];r(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected||this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:i(r(e,t))}Object.defineProperty(e,"__esModule",{value:!0}),e.bucketSort=o})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){if(e.length<2)return e;var n=(0,t.findMaxValue)(e),r=0,i=new Array(n+1);return e.forEach(function(e){i[e]||(i[e]=0),i[e]++}),i.forEach(function(t,n){for(;t>0;)e[r++]=n,t--}),e}Object.defineProperty(e,"__esModule",{value:!0}),e.countingSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r){for(var i=0,o=0,u=[];i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e.length>1){var o=e,u=o.length,a=Math.floor(u/2);e=n(r(e.slice(0,a),i),r(e.slice(a,u),i),i)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.mergeSort=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e}Object.defineProperty(e,"__esModule",{value:!0}),e.radixSort=n;var r=function(e,t,n,r){for(var i=void 0,o=[],u=[],a=0;a=0;s--)i=Math.floor((e[s]-r)/n%t),u[--o[i]]=e[s];for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0),n(13)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var f=Math.floor((u+a)/2),l=o[f];if(i(l,r)===t.Compare.LESS_THAN)u=f+1;else{if(i(l,r)!==t.Compare.BIGGER_THAN)return f;a=f-1}}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=e.length,a=0,f=u-1,l=-1,s=-1;a<=f&&(0,t.biggerEquals)(n,e[a],r)&&(0,t.lesserEquals)(n,e[f],r);){if(s=o(n,e[a])/o(e[f],e[a]),l=a+Math.floor((f-a)*s),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?a=l+1:f=l-1}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.interpolationSearch=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})}])}); \ No newline at end of file diff --git a/src/js/algorithms/sorting/bucket-sort.js b/src/js/algorithms/sorting/bucket-sort.js index be8527fe..1a11b699 100644 --- a/src/js/algorithms/sorting/bucket-sort.js +++ b/src/js/algorithms/sorting/bucket-sort.js @@ -25,9 +25,7 @@ function sortBuckets(buckets) { for (let i = 0; i < buckets.length; i++) { if (buckets[i] != null) { insertionSort(buckets[i]); - for (let j = 0; j < buckets[i].length; j++) { - sortedArray.push(buckets[i][j]); - } + sortedArray.push(...buckets[i]); } } return sortedArray; diff --git a/src/ts/algorithms/sorting/bucket-sort.ts b/src/ts/algorithms/sorting/bucket-sort.ts index c6d5a255..bcb8f61b 100644 --- a/src/ts/algorithms/sorting/bucket-sort.ts +++ b/src/ts/algorithms/sorting/bucket-sort.ts @@ -30,9 +30,7 @@ function sortBuckets(buckets: number[][]) { if (buckets[i] != null) { insertionSort(buckets[i]); - for (let j = 0; j < buckets[i].length; j++) { - sortedArray.push(buckets[i][j]); - } + sortedArray.push(...buckets[i]); } } From b68ac1faa4ef6185250524cade2a249950459c37 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 21 Jan 2018 10:03:23 -0200 Subject: [PATCH 051/188] chapter 12: [Sorting and Searching Algorithms] --- examples/chapter12/01-BubbleSort.html | 11 +++++++++++ examples/chapter12/01-BubbleSort.js | 12 ++++++++++++ examples/chapter12/01-BucketSort.html | 11 +++++++++++ examples/chapter12/01-BucketSort.js | 12 ++++++++++++ examples/chapter12/01-CountingSort.html | 11 +++++++++++ examples/chapter12/01-CountingSort.js | 12 ++++++++++++ examples/chapter12/01-InsertionSort.html | 11 +++++++++++ examples/chapter12/01-InsertionSort.js | 12 ++++++++++++ examples/chapter12/01-MergeSort.html | 11 +++++++++++ examples/chapter12/01-MergeSort.js | 12 ++++++++++++ examples/chapter12/01-QuickSort.html | 11 +++++++++++ examples/chapter12/01-QuickSort.js | 12 ++++++++++++ examples/chapter12/01-RadixSort.html | 11 +++++++++++ examples/chapter12/01-RadixSort.js | 12 ++++++++++++ examples/chapter12/01-SelectionSort.html | 11 +++++++++++ examples/chapter12/01-SelectionSort.js | 12 ++++++++++++ src/js/algorithms/sorting/radix-sort.js | 8 ++++++-- src/js/util.js | 4 ++-- .../algorithms/shuffle/fisher\342\200\223yates.ts" | 9 +++------ src/ts/algorithms/sorting/radix-sort.ts | 3 +++ 20 files changed, 198 insertions(+), 10 deletions(-) create mode 100644 examples/chapter12/01-BubbleSort.html create mode 100644 examples/chapter12/01-BubbleSort.js create mode 100644 examples/chapter12/01-BucketSort.html create mode 100644 examples/chapter12/01-BucketSort.js create mode 100644 examples/chapter12/01-CountingSort.html create mode 100644 examples/chapter12/01-CountingSort.js create mode 100644 examples/chapter12/01-InsertionSort.html create mode 100644 examples/chapter12/01-InsertionSort.js create mode 100644 examples/chapter12/01-MergeSort.html create mode 100644 examples/chapter12/01-MergeSort.js create mode 100644 examples/chapter12/01-QuickSort.html create mode 100644 examples/chapter12/01-QuickSort.js create mode 100644 examples/chapter12/01-RadixSort.html create mode 100644 examples/chapter12/01-RadixSort.js create mode 100644 examples/chapter12/01-SelectionSort.html create mode 100644 examples/chapter12/01-SelectionSort.js diff --git a/examples/chapter12/01-BubbleSort.html b/examples/chapter12/01-BubbleSort.html new file mode 100644 index 00000000..88d9a1da --- /dev/null +++ b/examples/chapter12/01-BubbleSort.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter12/01-BubbleSort.js b/examples/chapter12/01-BubbleSort.js new file mode 100644 index 00000000..fff8970e --- /dev/null +++ b/examples/chapter12/01-BubbleSort.js @@ -0,0 +1,12 @@ +const { bubbleSort } = PacktDataStructuresAlgorithms; + +function createNonSortedArray(){ + var array = []; + for (let i = 5; i > 0; i--){ + array.push(i); + } + return array; +} + +const array = bubbleSort(createNonSortedArray()); +console.log(array); diff --git a/examples/chapter12/01-BucketSort.html b/examples/chapter12/01-BucketSort.html new file mode 100644 index 00000000..88d9a1da --- /dev/null +++ b/examples/chapter12/01-BucketSort.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter12/01-BucketSort.js b/examples/chapter12/01-BucketSort.js new file mode 100644 index 00000000..fff8970e --- /dev/null +++ b/examples/chapter12/01-BucketSort.js @@ -0,0 +1,12 @@ +const { bubbleSort } = PacktDataStructuresAlgorithms; + +function createNonSortedArray(){ + var array = []; + for (let i = 5; i > 0; i--){ + array.push(i); + } + return array; +} + +const array = bubbleSort(createNonSortedArray()); +console.log(array); diff --git a/examples/chapter12/01-CountingSort.html b/examples/chapter12/01-CountingSort.html new file mode 100644 index 00000000..88d9a1da --- /dev/null +++ b/examples/chapter12/01-CountingSort.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter12/01-CountingSort.js b/examples/chapter12/01-CountingSort.js new file mode 100644 index 00000000..fff8970e --- /dev/null +++ b/examples/chapter12/01-CountingSort.js @@ -0,0 +1,12 @@ +const { bubbleSort } = PacktDataStructuresAlgorithms; + +function createNonSortedArray(){ + var array = []; + for (let i = 5; i > 0; i--){ + array.push(i); + } + return array; +} + +const array = bubbleSort(createNonSortedArray()); +console.log(array); diff --git a/examples/chapter12/01-InsertionSort.html b/examples/chapter12/01-InsertionSort.html new file mode 100644 index 00000000..88d9a1da --- /dev/null +++ b/examples/chapter12/01-InsertionSort.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter12/01-InsertionSort.js b/examples/chapter12/01-InsertionSort.js new file mode 100644 index 00000000..fff8970e --- /dev/null +++ b/examples/chapter12/01-InsertionSort.js @@ -0,0 +1,12 @@ +const { bubbleSort } = PacktDataStructuresAlgorithms; + +function createNonSortedArray(){ + var array = []; + for (let i = 5; i > 0; i--){ + array.push(i); + } + return array; +} + +const array = bubbleSort(createNonSortedArray()); +console.log(array); diff --git a/examples/chapter12/01-MergeSort.html b/examples/chapter12/01-MergeSort.html new file mode 100644 index 00000000..88d9a1da --- /dev/null +++ b/examples/chapter12/01-MergeSort.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter12/01-MergeSort.js b/examples/chapter12/01-MergeSort.js new file mode 100644 index 00000000..fff8970e --- /dev/null +++ b/examples/chapter12/01-MergeSort.js @@ -0,0 +1,12 @@ +const { bubbleSort } = PacktDataStructuresAlgorithms; + +function createNonSortedArray(){ + var array = []; + for (let i = 5; i > 0; i--){ + array.push(i); + } + return array; +} + +const array = bubbleSort(createNonSortedArray()); +console.log(array); diff --git a/examples/chapter12/01-QuickSort.html b/examples/chapter12/01-QuickSort.html new file mode 100644 index 00000000..88d9a1da --- /dev/null +++ b/examples/chapter12/01-QuickSort.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter12/01-QuickSort.js b/examples/chapter12/01-QuickSort.js new file mode 100644 index 00000000..fff8970e --- /dev/null +++ b/examples/chapter12/01-QuickSort.js @@ -0,0 +1,12 @@ +const { bubbleSort } = PacktDataStructuresAlgorithms; + +function createNonSortedArray(){ + var array = []; + for (let i = 5; i > 0; i--){ + array.push(i); + } + return array; +} + +const array = bubbleSort(createNonSortedArray()); +console.log(array); diff --git a/examples/chapter12/01-RadixSort.html b/examples/chapter12/01-RadixSort.html new file mode 100644 index 00000000..88d9a1da --- /dev/null +++ b/examples/chapter12/01-RadixSort.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter12/01-RadixSort.js b/examples/chapter12/01-RadixSort.js new file mode 100644 index 00000000..fff8970e --- /dev/null +++ b/examples/chapter12/01-RadixSort.js @@ -0,0 +1,12 @@ +const { bubbleSort } = PacktDataStructuresAlgorithms; + +function createNonSortedArray(){ + var array = []; + for (let i = 5; i > 0; i--){ + array.push(i); + } + return array; +} + +const array = bubbleSort(createNonSortedArray()); +console.log(array); diff --git a/examples/chapter12/01-SelectionSort.html b/examples/chapter12/01-SelectionSort.html new file mode 100644 index 00000000..88d9a1da --- /dev/null +++ b/examples/chapter12/01-SelectionSort.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter12/01-SelectionSort.js b/examples/chapter12/01-SelectionSort.js new file mode 100644 index 00000000..fff8970e --- /dev/null +++ b/examples/chapter12/01-SelectionSort.js @@ -0,0 +1,12 @@ +const { bubbleSort } = PacktDataStructuresAlgorithms; + +function createNonSortedArray(){ + var array = []; + for (let i = 5; i > 0; i--){ + array.push(i); + } + return array; +} + +const array = bubbleSort(createNonSortedArray()); +console.log(array); diff --git a/src/js/algorithms/sorting/radix-sort.js b/src/js/algorithms/sorting/radix-sort.js index 68de9e0f..32ba0b64 100644 --- a/src/js/algorithms/sorting/radix-sort.js +++ b/src/js/algorithms/sorting/radix-sort.js @@ -1,5 +1,9 @@ import { findMaxValue, findMinValue } from '../search/min-max-search'; +const getBucketIndex = (value, minValue, significantDigit, radixBase) => { + return Math.floor(((value - minValue) / significantDigit) % radixBase); +}; + const countingSortForRadix = (array, radixBase, significantDigit, minValue) => { let bucketsIndex; const buckets = []; @@ -8,14 +12,14 @@ const countingSortForRadix = (array, radixBase, significantDigit, minValue) => { buckets[i] = 0; } for (let i = 0; i < array.length; i++) { - bucketsIndex = Math.floor(((array[i] - minValue) / significantDigit) % radixBase); + bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase); buckets[bucketsIndex]++; } for (let i = 1; i < radixBase; i++) { buckets[i] += buckets[i - 1]; } for (let i = array.length - 1; i >= 0; i--) { - bucketsIndex = Math.floor(((array[i] - minValue) / significantDigit) % radixBase); + bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase); aux[--buckets[bucketsIndex]] = array[i]; } for (let i = 0; i < array.length; i++) { diff --git a/src/js/util.js b/src/js/util.js index 70e85181..ec2289bb 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -6,12 +6,12 @@ export const Compare = { export const DOES_NOT_EXIST = -1; -export function lesserEquals(a, b, compareFn) { +export function lesserOrEquals(a, b, compareFn) { const comp = compareFn(a, b); return comp === Compare.LESS_THAN || comp === Compare.EQUALS; } -export function biggerEquals(a, b, compareFn) { +export function biggerOrEquals(a, b, compareFn) { const comp = compareFn(a, b); return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS; } diff --git "a/src/ts/algorithms/shuffle/fisher\342\200\223yates.ts" "b/src/ts/algorithms/shuffle/fisher\342\200\223yates.ts" index 2196a1d9..b5869692 100644 --- "a/src/ts/algorithms/shuffle/fisher\342\200\223yates.ts" +++ "b/src/ts/algorithms/shuffle/fisher\342\200\223yates.ts" @@ -1,12 +1,9 @@ import { swap } from '../../util'; export function shuffle(array: T[]) { - let currentIndex = array.length; - - while (currentIndex !== 0) { - const randomIndex = Math.floor(Math.random() * currentIndex); - currentIndex--; - swap(array, currentIndex, randomIndex); + for (let i = array.length - 1; i > 0; i--) { + const randomIndex = Math.floor(Math.random() * (i + 1)); + swap(array, i, randomIndex); } return array; diff --git a/src/ts/algorithms/sorting/radix-sort.ts b/src/ts/algorithms/sorting/radix-sort.ts index 95ce4cac..e6d1027a 100644 --- a/src/ts/algorithms/sorting/radix-sort.ts +++ b/src/ts/algorithms/sorting/radix-sort.ts @@ -28,6 +28,9 @@ const countingSortForRadix = ( aux[--buckets[bucketsIndex]] = array[i]; } + + // array = []; + // array.push(...aux); for (let i = 0; i < array.length; i++) { array[i] = aux[i]; } From 5eca6f274d92c50c05ef357f305f628b2cd259ef Mon Sep 17 00:00:00 2001 From: loiane Date: Fri, 26 Jan 2018 21:24:43 -0200 Subject: [PATCH 052/188] [Sorting and Searching Algorithms] --- src/js/algorithms/sorting/radix-sort.js | 5 ++--- src/js/util.js | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/js/algorithms/sorting/radix-sort.js b/src/js/algorithms/sorting/radix-sort.js index 32ba0b64..db21c37a 100644 --- a/src/js/algorithms/sorting/radix-sort.js +++ b/src/js/algorithms/sorting/radix-sort.js @@ -1,8 +1,7 @@ import { findMaxValue, findMinValue } from '../search/min-max-search'; -const getBucketIndex = (value, minValue, significantDigit, radixBase) => { - return Math.floor(((value - minValue) / significantDigit) % radixBase); -}; +const getBucketIndex = (value, minValue, significantDigit, radixBase) => + Math.floor(((value - minValue) / significantDigit) % radixBase); const countingSortForRadix = (array, radixBase, significantDigit, minValue) => { let bucketsIndex; diff --git a/src/js/util.js b/src/js/util.js index ec2289bb..70e85181 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -6,12 +6,12 @@ export const Compare = { export const DOES_NOT_EXIST = -1; -export function lesserOrEquals(a, b, compareFn) { +export function lesserEquals(a, b, compareFn) { const comp = compareFn(a, b); return comp === Compare.LESS_THAN || comp === Compare.EQUALS; } -export function biggerOrEquals(a, b, compareFn) { +export function biggerEquals(a, b, compareFn) { const comp = compareFn(a, b); return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS; } From c77c90345afb1fb929caab6a1f846a210d7ba94e Mon Sep 17 00:00:00 2001 From: loiane Date: Fri, 26 Jan 2018 21:25:13 -0200 Subject: [PATCH 053/188] [Algorithm Design and Techniques] --- README.md | 3 ++ examples/PacktDataStructuresAlgorithms.min.js | 2 +- .../search/binary-search-recursive.ts | 32 +++++++++++++++++++ src/ts/index.ts | 2 ++ .../search/binary-search-recursive.spec.ts | 5 +++ 5 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/ts/algorithms/search/binary-search-recursive.ts create mode 100644 test/ts/algorithms/search/binary-search-recursive.spec.ts diff --git a/README.md b/README.md index 6aa2ac45..35c9f0e2 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,9 @@ Work in Progress. * 10: [Heap](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter10) * 11: [Graphs](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter11) * 12: [Sorting and Searching Algorithms](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter12) +* 13: [String and Math Algorithms](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter13) +* 14: [Algorithm Design and Techniques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter14) +* 15: [Algorithm Complexity](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter15) ### Third Edition Updates diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index 62b05880..b06c53f5 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=14)}([function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t,n){var r=n(e,t);return r===l.LESS_THAN||r===l.EQUALS}function n(e,t,n){var r=n(e,t);return r===l.BIGGER_THAN||r===l.EQUALS}function r(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}function r(e,t,i,o){var u=void 0;return e.length>1&&(u=n(e,t,i,o),t1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return r(e,0,e.length-1,n)}Object.defineProperty(e,"__esModule",{value:!0}),e.quickSort=i})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(15),n(3),n(16),n(17),n(18),n(4),n(7),n(19),n(20),n(1),n(8),n(21),n(22),n(23),n(24),n(9),n(25),n(26),n(27),n(28),n(30),n(31),n(10),n(32),n(53),n(33),n(34),n(35),n(36),n(37),n(38),n(39),n(40),n(41),n(42),n(43),n(44),n(45),n(12),n(46),n(13),n(47),n(48),n(49),n(50),n(51),n(52),n(6),n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i,o,u,a,f,l,s,c,h,p,v,d,y,b,g,m,k,_,O,E,S,j,P,w,x,C,T,N,L,A,M,H,F,B,I,D,R,G,z,q,V,U,Y,W,K,X){"use strict";function Q(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(e,"__esModule",{value:!0}),e.findMinValue=e.findMaxValue=e.sequentialSearch=e.interpolationSearch=e.binarySearch=e.shellSort=e.selectionSort=e.radixSort=e.quickSort=e.mergeSort=e.insertionSort=e.countingSort=e.bucketSort=e.modifiedBubbleSort=e.bubbleSort=e.shuffle=e.kruskal=e.prim=e.floydWarshall=e.dijkstra=e.DFS=e.depthFirstSearch=e.BFS=e.breadthFirstSearch=e.Graph=e.heapSort=e.MaxHeap=e.MinHeap=e.AVLTree=e.BinarySearchTree=e.fibonacciMemoization=e.fibonacciIterative=e.fibonacci=e.factorial=e.factorialIterative=e.HashTableLinearProbingLazy=e.HashTableLinearProbing=e.HashTableSeparateChaining=e.HashTable=e.Dictionary=e.Set=e.StackLinkedList=e.SortedLinkedList=e.CircularLinkedList=e.DoublyLinkedList=e.LinkedList=e.palindromeChecker=e.hotPotato=e.Deque=e.Queue=e.parenthesesChecker=e.decimalToBinary=e.baseConverter=e.hanoiStack=e.hanoi=e.Stack=e.StackArray=e.util=void 0,Object.defineProperty(e,"StackArray",{enumerable:!0,get:function(){return Q(t).default}}),Object.defineProperty(e,"Stack",{enumerable:!0,get:function(){return Q(n).default}}),Object.defineProperty(e,"hanoi",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"hanoiStack",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"baseConverter",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"decimalToBinary",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"parenthesesChecker",{enumerable:!0,get:function(){return Q(o).default}}),Object.defineProperty(e,"Queue",{enumerable:!0,get:function(){return Q(u).default}}),Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return Q(a).default}}),Object.defineProperty(e,"hotPotato",{enumerable:!0,get:function(){return Q(f).default}}),Object.defineProperty(e,"palindromeChecker",{enumerable:!0,get:function(){return Q(l).default}}),Object.defineProperty(e,"LinkedList",{enumerable:!0,get:function(){return Q(s).default}}),Object.defineProperty(e,"DoublyLinkedList",{enumerable:!0,get:function(){return Q(c).default}}),Object.defineProperty(e,"CircularLinkedList",{enumerable:!0,get:function(){return Q(h).default}}),Object.defineProperty(e,"SortedLinkedList",{enumerable:!0,get:function(){return Q(p).default}}),Object.defineProperty(e,"StackLinkedList",{enumerable:!0,get:function(){return Q(v).default}}),Object.defineProperty(e,"Set",{enumerable:!0,get:function(){return Q(d).default}}),Object.defineProperty(e,"Dictionary",{enumerable:!0,get:function(){return Q(y).default}}),Object.defineProperty(e,"HashTable",{enumerable:!0,get:function(){return Q(b).default}}),Object.defineProperty(e,"HashTableSeparateChaining",{enumerable:!0,get:function(){return Q(g).default}}),Object.defineProperty(e,"HashTableLinearProbing",{enumerable:!0,get:function(){return Q(m).default}}),Object.defineProperty(e,"HashTableLinearProbingLazy",{enumerable:!0,get:function(){return Q(k).default}}),Object.defineProperty(e,"factorialIterative",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"factorial",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"fibonacci",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciIterative",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciMemoization",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"BinarySearchTree",{enumerable:!0,get:function(){return Q(E).default}}),Object.defineProperty(e,"AVLTree",{enumerable:!0,get:function(){return Q(S).default}}),Object.defineProperty(e,"MinHeap",{enumerable:!0,get:function(){return j.MinHeap}}),Object.defineProperty(e,"MaxHeap",{enumerable:!0,get:function(){return j.MaxHeap}}),Object.defineProperty(e,"heapSort",{enumerable:!0,get:function(){return Q(P).default}}),Object.defineProperty(e,"Graph",{enumerable:!0,get:function(){return Q(w).default}}),Object.defineProperty(e,"breadthFirstSearch",{enumerable:!0,get:function(){return x.breadthFirstSearch}}),Object.defineProperty(e,"BFS",{enumerable:!0,get:function(){return x.BFS}}),Object.defineProperty(e,"depthFirstSearch",{enumerable:!0,get:function(){return C.depthFirstSearch}}),Object.defineProperty(e,"DFS",{enumerable:!0,get:function(){return C.DFS}}),Object.defineProperty(e,"dijkstra",{enumerable:!0,get:function(){return T.dijkstra}}),Object.defineProperty(e,"floydWarshall",{enumerable:!0,get:function(){return N.floydWarshall}}),Object.defineProperty(e,"prim",{enumerable:!0,get:function(){return L.prim}}),Object.defineProperty(e,"kruskal",{enumerable:!0,get:function(){return A.kruskal}}),Object.defineProperty(e,"shuffle",{enumerable:!0,get:function(){return M.shuffle}}),Object.defineProperty(e,"bubbleSort",{enumerable:!0,get:function(){return H.bubbleSort}}),Object.defineProperty(e,"modifiedBubbleSort",{enumerable:!0,get:function(){return F.modifiedBubbleSort}}),Object.defineProperty(e,"bucketSort",{enumerable:!0,get:function(){return B.bucketSort}}),Object.defineProperty(e,"countingSort",{enumerable:!0,get:function(){return I.countingSort}}),Object.defineProperty(e,"insertionSort",{enumerable:!0,get:function(){return D.insertionSort}}),Object.defineProperty(e,"mergeSort",{enumerable:!0,get:function(){return R.mergeSort}}),Object.defineProperty(e,"quickSort",{enumerable:!0,get:function(){return G.quickSort}}),Object.defineProperty(e,"radixSort",{enumerable:!0,get:function(){return z.radixSort}}),Object.defineProperty(e,"selectionSort",{enumerable:!0,get:function(){return q.selectionSort}}),Object.defineProperty(e,"shellSort",{enumerable:!0,get:function(){return V.shellSort}}),Object.defineProperty(e,"binarySearch",{enumerable:!0,get:function(){return U.binarySearch}}),Object.defineProperty(e,"interpolationSearch",{enumerable:!0,get:function(){return Y.interpolationSearch}}),Object.defineProperty(e,"sequentialSearch",{enumerable:!0,get:function(){return W.sequentialSearch}}),Object.defineProperty(e,"findMaxValue",{enumerable:!0,get:function(){return K.findMaxValue}}),Object.defineProperty(e,"findMinValue",{enumerable:!0,get:function(){return K.findMinValue}});var J=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(X);e.util=J})},function(e,t,n){var r,i,o;!function(n,u){i=[e,t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return f;if(1===e){i.push(t.pop());var l={};l[o]=t.toString(),l[u]=r.toString(),l[a]=i.toString(),f.push(l)}else{n(e-1,t,i,r,o,a,u,f),i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),f.push(s),n(e-1,r,t,i,u,o,a,f)}return f}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,f=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(f=t.pop(),n.indexOf(f)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),f(t,[{key:"push",value:function(e){if(this.isEmpty())l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(e){return e&&e.__esModule?e:{default:e}}(r),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=f,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(29)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(10),n(11)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),l(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(f.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,f=2*t+2;a0&&(u=a),f0&&(u=f),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(9)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];r(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected||this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:i(r(e,t))}Object.defineProperty(e,"__esModule",{value:!0}),e.bucketSort=o})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){if(e.length<2)return e;var n=(0,t.findMaxValue)(e),r=0,i=new Array(n+1);return e.forEach(function(e){i[e]||(i[e]=0),i[e]++}),i.forEach(function(t,n){for(;t>0;)e[r++]=n,t--}),e}Object.defineProperty(e,"__esModule",{value:!0}),e.countingSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r){for(var i=0,o=0,u=[];i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e.length>1){var o=e,u=o.length,a=Math.floor(u/2);e=n(r(e.slice(0,a),i),r(e.slice(a,u),i),i)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.mergeSort=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e}Object.defineProperty(e,"__esModule",{value:!0}),e.radixSort=n;var r=function(e,t,n,r){for(var i=void 0,o=[],u=[],a=0;a=0;s--)i=Math.floor((e[s]-r)/n%t),u[--o[i]]=e[s];for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0),n(13)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var f=Math.floor((u+a)/2),l=o[f];if(i(l,r)===t.Compare.LESS_THAN)u=f+1;else{if(i(l,r)!==t.Compare.BIGGER_THAN)return f;a=f-1}}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=e.length,a=0,f=u-1,l=-1,s=-1;a<=f&&(0,t.biggerEquals)(n,e[a],r)&&(0,t.lesserEquals)(n,e[f],r);){if(s=o(n,e[a])/o(e[f],e[a]),l=a+Math.floor((f-a)*s),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?a=l+1:f=l-1}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.interpolationSearch=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=14)}([function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t,n){var r=n(e,t);return r===l.LESS_THAN||r===l.EQUALS}function n(e,t,n){var r=n(e,t);return r===l.BIGGER_THAN||r===l.EQUALS}function r(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}function r(e,t,i,o){var u=void 0;return e.length>1&&(u=n(e,t,i,o),t1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return r(e,0,e.length-1,n)}Object.defineProperty(e,"__esModule",{value:!0}),e.quickSort=i})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(15),n(3),n(16),n(17),n(18),n(4),n(7),n(19),n(20),n(1),n(8),n(21),n(22),n(23),n(24),n(9),n(25),n(26),n(27),n(28),n(30),n(31),n(10),n(32),n(53),n(33),n(34),n(35),n(36),n(37),n(38),n(39),n(40),n(41),n(42),n(43),n(44),n(45),n(12),n(46),n(13),n(47),n(48),n(49),n(50),n(51),n(52),n(6),n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i,o,u,a,f,l,s,c,h,p,v,d,y,b,g,m,k,_,O,E,S,j,P,w,x,C,T,N,L,A,M,H,F,B,I,D,R,G,z,q,V,U,Y,W,K,X){"use strict";function Q(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(e,"__esModule",{value:!0}),e.findMinValue=e.findMaxValue=e.sequentialSearch=e.interpolationSearch=e.binarySearch=e.shellSort=e.selectionSort=e.radixSort=e.quickSort=e.mergeSort=e.insertionSort=e.countingSort=e.bucketSort=e.modifiedBubbleSort=e.bubbleSort=e.shuffle=e.kruskal=e.prim=e.floydWarshall=e.dijkstra=e.DFS=e.depthFirstSearch=e.BFS=e.breadthFirstSearch=e.Graph=e.heapSort=e.MaxHeap=e.MinHeap=e.AVLTree=e.BinarySearchTree=e.fibonacciMemoization=e.fibonacciIterative=e.fibonacci=e.factorial=e.factorialIterative=e.HashTableLinearProbingLazy=e.HashTableLinearProbing=e.HashTableSeparateChaining=e.HashTable=e.Dictionary=e.Set=e.StackLinkedList=e.SortedLinkedList=e.CircularLinkedList=e.DoublyLinkedList=e.LinkedList=e.palindromeChecker=e.hotPotato=e.Deque=e.Queue=e.parenthesesChecker=e.decimalToBinary=e.baseConverter=e.hanoiStack=e.hanoi=e.Stack=e.StackArray=e.util=void 0,Object.defineProperty(e,"StackArray",{enumerable:!0,get:function(){return Q(t).default}}),Object.defineProperty(e,"Stack",{enumerable:!0,get:function(){return Q(n).default}}),Object.defineProperty(e,"hanoi",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"hanoiStack",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"baseConverter",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"decimalToBinary",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"parenthesesChecker",{enumerable:!0,get:function(){return Q(o).default}}),Object.defineProperty(e,"Queue",{enumerable:!0,get:function(){return Q(u).default}}),Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return Q(a).default}}),Object.defineProperty(e,"hotPotato",{enumerable:!0,get:function(){return Q(f).default}}),Object.defineProperty(e,"palindromeChecker",{enumerable:!0,get:function(){return Q(l).default}}),Object.defineProperty(e,"LinkedList",{enumerable:!0,get:function(){return Q(s).default}}),Object.defineProperty(e,"DoublyLinkedList",{enumerable:!0,get:function(){return Q(c).default}}),Object.defineProperty(e,"CircularLinkedList",{enumerable:!0,get:function(){return Q(h).default}}),Object.defineProperty(e,"SortedLinkedList",{enumerable:!0,get:function(){return Q(p).default}}),Object.defineProperty(e,"StackLinkedList",{enumerable:!0,get:function(){return Q(v).default}}),Object.defineProperty(e,"Set",{enumerable:!0,get:function(){return Q(d).default}}),Object.defineProperty(e,"Dictionary",{enumerable:!0,get:function(){return Q(y).default}}),Object.defineProperty(e,"HashTable",{enumerable:!0,get:function(){return Q(b).default}}),Object.defineProperty(e,"HashTableSeparateChaining",{enumerable:!0,get:function(){return Q(g).default}}),Object.defineProperty(e,"HashTableLinearProbing",{enumerable:!0,get:function(){return Q(m).default}}),Object.defineProperty(e,"HashTableLinearProbingLazy",{enumerable:!0,get:function(){return Q(k).default}}),Object.defineProperty(e,"factorialIterative",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"factorial",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"fibonacci",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciIterative",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciMemoization",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"BinarySearchTree",{enumerable:!0,get:function(){return Q(E).default}}),Object.defineProperty(e,"AVLTree",{enumerable:!0,get:function(){return Q(S).default}}),Object.defineProperty(e,"MinHeap",{enumerable:!0,get:function(){return j.MinHeap}}),Object.defineProperty(e,"MaxHeap",{enumerable:!0,get:function(){return j.MaxHeap}}),Object.defineProperty(e,"heapSort",{enumerable:!0,get:function(){return Q(P).default}}),Object.defineProperty(e,"Graph",{enumerable:!0,get:function(){return Q(w).default}}),Object.defineProperty(e,"breadthFirstSearch",{enumerable:!0,get:function(){return x.breadthFirstSearch}}),Object.defineProperty(e,"BFS",{enumerable:!0,get:function(){return x.BFS}}),Object.defineProperty(e,"depthFirstSearch",{enumerable:!0,get:function(){return C.depthFirstSearch}}),Object.defineProperty(e,"DFS",{enumerable:!0,get:function(){return C.DFS}}),Object.defineProperty(e,"dijkstra",{enumerable:!0,get:function(){return T.dijkstra}}),Object.defineProperty(e,"floydWarshall",{enumerable:!0,get:function(){return N.floydWarshall}}),Object.defineProperty(e,"prim",{enumerable:!0,get:function(){return L.prim}}),Object.defineProperty(e,"kruskal",{enumerable:!0,get:function(){return A.kruskal}}),Object.defineProperty(e,"shuffle",{enumerable:!0,get:function(){return M.shuffle}}),Object.defineProperty(e,"bubbleSort",{enumerable:!0,get:function(){return H.bubbleSort}}),Object.defineProperty(e,"modifiedBubbleSort",{enumerable:!0,get:function(){return F.modifiedBubbleSort}}),Object.defineProperty(e,"bucketSort",{enumerable:!0,get:function(){return B.bucketSort}}),Object.defineProperty(e,"countingSort",{enumerable:!0,get:function(){return I.countingSort}}),Object.defineProperty(e,"insertionSort",{enumerable:!0,get:function(){return D.insertionSort}}),Object.defineProperty(e,"mergeSort",{enumerable:!0,get:function(){return R.mergeSort}}),Object.defineProperty(e,"quickSort",{enumerable:!0,get:function(){return G.quickSort}}),Object.defineProperty(e,"radixSort",{enumerable:!0,get:function(){return z.radixSort}}),Object.defineProperty(e,"selectionSort",{enumerable:!0,get:function(){return q.selectionSort}}),Object.defineProperty(e,"shellSort",{enumerable:!0,get:function(){return V.shellSort}}),Object.defineProperty(e,"binarySearch",{enumerable:!0,get:function(){return U.binarySearch}}),Object.defineProperty(e,"interpolationSearch",{enumerable:!0,get:function(){return Y.interpolationSearch}}),Object.defineProperty(e,"sequentialSearch",{enumerable:!0,get:function(){return W.sequentialSearch}}),Object.defineProperty(e,"findMaxValue",{enumerable:!0,get:function(){return K.findMaxValue}}),Object.defineProperty(e,"findMinValue",{enumerable:!0,get:function(){return K.findMinValue}});var J=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(X);e.util=J})},function(e,t,n){var r,i,o;!function(n,u){i=[e,t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return f;if(1===e){i.push(t.pop());var l={};l[o]=t.toString(),l[u]=r.toString(),l[a]=i.toString(),f.push(l)}else{n(e-1,t,i,r,o,a,u,f),i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),f.push(s),n(e-1,r,t,i,u,o,a,f)}return f}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,f=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(f=t.pop(),n.indexOf(f)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),f(t,[{key:"push",value:function(e){if(this.isEmpty())l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(e){return e&&e.__esModule?e:{default:e}}(r),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=f,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(29)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(10),n(11)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),l(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(f.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,f=2*t+2;a0&&(u=a),f0&&(u=f),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(9)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];r(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected||this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:i(r(e,t))}Object.defineProperty(e,"__esModule",{value:!0}),e.bucketSort=o})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){if(e.length<2)return e;var n=(0,t.findMaxValue)(e),r=0,i=new Array(n+1);return e.forEach(function(e){i[e]||(i[e]=0),i[e]++}),i.forEach(function(t,n){for(;t>0;)e[r++]=n,t--}),e}Object.defineProperty(e,"__esModule",{value:!0}),e.countingSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r){for(var i=0,o=0,u=[];i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e.length>1){var o=e,u=o.length,a=Math.floor(u/2);e=n(r(e.slice(0,a),i),r(e.slice(a,u),i),i)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.mergeSort=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var r=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-r)/u>=1;)e=i(e,n,u,r),u*=n;return e}Object.defineProperty(e,"__esModule",{value:!0}),e.radixSort=n;var r=function(e,t,n,r){return Math.floor((e-t)/n%r)},i=function(e,t,n,i){for(var o=void 0,u=[],a=[],f=0;f=0;c--)o=r(e[c],i,n,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0),n(13)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var f=Math.floor((u+a)/2),l=o[f];if(i(l,r)===t.Compare.LESS_THAN)u=f+1;else{if(i(l,r)!==t.Compare.BIGGER_THAN)return f;a=f-1}}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=e.length,a=0,f=u-1,l=-1,s=-1;a<=f&&(0,t.biggerEquals)(n,e[a],r)&&(0,t.lesserEquals)(n,e[f],r);){if(s=o(n,e[a])/o(e[f],e[a]),l=a+Math.floor((f-a)*s),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?a=l+1:f=l-1}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.interpolationSearch=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})}])}); \ No newline at end of file diff --git a/src/ts/algorithms/search/binary-search-recursive.ts b/src/ts/algorithms/search/binary-search-recursive.ts new file mode 100644 index 00000000..6d902139 --- /dev/null +++ b/src/ts/algorithms/search/binary-search-recursive.ts @@ -0,0 +1,32 @@ +import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util'; +import { quickSort } from '../sorting/quicksort'; + +function binarySearchRecursive( + array: T[], + value: T, + low: number, + high: number, + compareFn = defaultCompare +): number { + if (low <= high) { + const mid = Math.floor((low + high) / 2); + const element = array[mid]; + + if (compareFn(element, value) === Compare.LESS_THAN) { + return binarySearchRecursive(array, value, mid + 1, high, compareFn); + } else if (compareFn(element, value) === Compare.BIGGER_THAN) { + return binarySearchRecursive(array, value, low, mid - 1, compareFn); + } else { + return mid; + } + } + return DOES_NOT_EXIST; +} + +export function binarySearch(array: T[], value: T, compareFn = defaultCompare) { + const sortedArray = quickSort(array); + const low = 0; + const high = sortedArray.length - 1; + + return binarySearchRecursive(array, value, low, high, compareFn); +} diff --git a/src/ts/index.ts b/src/ts/index.ts index 804aae68..9dd58718 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -60,6 +60,8 @@ export { sequentialSearch as sequentialSearch } from './algorithms/search/sequen export { findMaxValue as findMaxValue } from './algorithms/search/min-max-search'; export { findMinValue as findMinValue } from './algorithms/search/min-max-search'; +// chapter 14 +export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive'; /* import { hotPotato } from './others/hot-potato'; diff --git a/test/ts/algorithms/search/binary-search-recursive.spec.ts b/test/ts/algorithms/search/binary-search-recursive.spec.ts new file mode 100644 index 00000000..b06ce773 --- /dev/null +++ b/test/ts/algorithms/search/binary-search-recursive.spec.ts @@ -0,0 +1,5 @@ +import { binarySearchRecursive } from '../../../../src/ts/index'; +import { testSearchAlgorithm } from './search-algorithms-tests'; + +testSearchAlgorithm(binarySearchRecursive, 'Binary Search Recursive'); + From ae5abc06e6d4da593d5b9a4e21184a3903d10005 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 4 Feb 2018 09:30:56 -0500 Subject: [PATCH 054/188] [Algorithm Design and Techniques] --- .../dynamic-programing/knapsack-recursive.ts | 13 ++++ .../algorithms/dynamic-programing/knapsack.ts | 53 +++++++++++++++++ .../longest-common-subsequence-print.ts | 59 +++++++++++++++++++ .../longest-common-subsequence.ts | 29 +++++++++ .../matrix-chain-multiplication.ts | 52 ++++++++++++++++ .../dynamic-programing/min-coin-change.ts | 34 +++++++++++ src/ts/algorithms/greedy/knapsack.ts | 19 ++++++ .../greedy/longest-common-subsequence.ts | 13 ++++ .../greedy/matrix-chain-multiplication.ts | 18 ++++++ src/ts/algorithms/greedy/min-coin-change.ts | 12 ++++ src/ts/index.ts | 1 + .../min-coin-change.spec.ts | 30 ++++++++++ 12 files changed, 333 insertions(+) create mode 100644 src/ts/algorithms/dynamic-programing/knapsack-recursive.ts create mode 100644 src/ts/algorithms/dynamic-programing/knapsack.ts create mode 100644 src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts create mode 100644 src/ts/algorithms/dynamic-programing/longest-common-subsequence.ts create mode 100644 src/ts/algorithms/dynamic-programing/matrix-chain-multiplication.ts create mode 100644 src/ts/algorithms/dynamic-programing/min-coin-change.ts create mode 100644 src/ts/algorithms/greedy/knapsack.ts create mode 100644 src/ts/algorithms/greedy/longest-common-subsequence.ts create mode 100644 src/ts/algorithms/greedy/matrix-chain-multiplication.ts create mode 100644 src/ts/algorithms/greedy/min-coin-change.ts create mode 100644 test/ts/algorithms/dynamic-programming/min-coin-change.spec.ts diff --git a/src/ts/algorithms/dynamic-programing/knapsack-recursive.ts b/src/ts/algorithms/dynamic-programing/knapsack-recursive.ts new file mode 100644 index 00000000..0fce59a5 --- /dev/null +++ b/src/ts/algorithms/dynamic-programing/knapsack-recursive.ts @@ -0,0 +1,13 @@ +export function knapSack(capacity: number, weights: number[], values: number[], n: number): number { + if (n === 0 || capacity === 0) { + return 0; + } + + if (weights[n - 1] > capacity) { + return knapSack(capacity, weights, values, n - 1); + } else { + const a: number = values[n - 1] + knapSack(capacity - weights[n - 1], weights, values, n - 1); + const b: number = knapSack(capacity, weights, values, n - 1); + return a > b ? a : b; + } +} diff --git a/src/ts/algorithms/dynamic-programing/knapsack.ts b/src/ts/algorithms/dynamic-programing/knapsack.ts new file mode 100644 index 00000000..ed6aed8a --- /dev/null +++ b/src/ts/algorithms/dynamic-programing/knapsack.ts @@ -0,0 +1,53 @@ +export function knapSack(capacity: number, weights: number[], values: number[], n: number) { + const kS: Array> = []; + + for (let i = 0; i <= n; i++) { + kS[i] = []; + } + + for (let i = 0; i <= n; i++) { + for (let w = 0; w <= capacity; w++) { + if (i === 0 || w === 0) { + kS[i][w] = 0; + } else if (weights[i - 1] <= w) { + const a = values[i - 1] + kS[i - 1][w - weights[i - 1]]; + const b = kS[i - 1][w]; + kS[i][w] = a > b ? a : b; // max(a,b) + console.log(a + ' can be part of the solution'); + } else { + kS[i][w] = kS[i - 1][w]; + } + } + console.log(kS[i].join()); + } + + // extra algorithm to find the items that are part of the solution + findValues(n, capacity, kS, values, weights); + + return kS[n][capacity]; +} + +function findValues( + n: number, + capacity: number, + kS: Array>, + weights: number[], + values: number[] +) { + let i = n; + let k = capacity; + + console.log('Items that are part of the solution:'); + + while (i > 0 && k > 0) { + if (kS[i][k] !== kS[i - 1][k]) { + console.log( + 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1] + ); + i--; + k = k - kS[i][k]; + } else { + i--; + } + } +} diff --git a/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts b/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts new file mode 100644 index 00000000..672c61fa --- /dev/null +++ b/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts @@ -0,0 +1,59 @@ +export function lcs(wordX: string, wordY: string) { + const m = wordX.length; + const n = wordY.length; + const l: Array> = []; + const solution: Array> = []; + + for (let i = 0; i <= m; i++) { + l[i] = []; + solution[i] = []; + for (let j = 0; j <= n; j++) { + l[i][j] = 0; + solution[i][j] = '0'; + } + } + + for (let i = 0; i <= m; i++) { + for (let j = 0; j <= n; j++) { + if (i === 0 || j === 0) { + l[i][j] = 0; + } else if (wordX[i - 1] === wordY[j - 1]) { + l[i][j] = l[i - 1][j - 1] + 1; + solution[i][j] = 'diagonal'; + } else { + const a = l[i - 1][j]; + const b = l[i][j - 1]; + l[i][j] = a > b ? a : b; // max(a,b) + solution[i][j] = l[i][j] === l[i - 1][j] ? 'top' : 'left'; + } + } + console.log(l[i].join()); + console.log(solution[i].join()); + } + + printSolution(solution, wordX, m, n); + + return l[m][n]; +} + +function printSolution(solution: Array>, wordX: string, m: number, n: number) { + let a = m; + let b = n; + let x = solution[a][b]; + let answer = ''; + + while (x !== '0') { + if (solution[a][b] === 'diagonal') { + answer = wordX[a - 1] + answer; + a--; + b--; + } else if (solution[a][b] === 'left') { + b--; + } else if (solution[a][b] === 'top') { + a--; + } + x = solution[a][b]; + } + + console.log('lcs: ' + answer); +} diff --git a/src/ts/algorithms/dynamic-programing/longest-common-subsequence.ts b/src/ts/algorithms/dynamic-programing/longest-common-subsequence.ts new file mode 100644 index 00000000..9f4e29f5 --- /dev/null +++ b/src/ts/algorithms/dynamic-programing/longest-common-subsequence.ts @@ -0,0 +1,29 @@ +export function lcs(wordX: string, wordY: string) { + const m = wordX.length; + const n = wordY.length; + const l: Array> = []; + + for (let i = 0; i <= m; i++) { + l[i] = []; + for (let j = 0; j <= n; j++) { + l[i][j] = 0; + } + } + + for (let i = 0; i <= m; i++) { + for (let j = 0; j <= n; j++) { + if (i === 0 || j === 0) { + l[i][j] = 0; + } else if (wordX[i - 1] === wordY[j - 1]) { + l[i][j] = l[i - 1][j - 1] + 1; + } else { + const a = l[i - 1][j]; + const b = l[i][j - 1]; + l[i][j] = a > b ? a : b; // max(a,b) + } + } + console.log(l[i].join()); + } + + return l[m][n]; +} diff --git a/src/ts/algorithms/dynamic-programing/matrix-chain-multiplication.ts b/src/ts/algorithms/dynamic-programing/matrix-chain-multiplication.ts new file mode 100644 index 00000000..a3bdc5bb --- /dev/null +++ b/src/ts/algorithms/dynamic-programing/matrix-chain-multiplication.ts @@ -0,0 +1,52 @@ +export function matrixChainOrder(p: number[]): number { + const n = p.length; + + const m: Array> = []; + const s: Array> = []; + + for (let i = 1; i <= n; i++) { + m[i] = []; + m[i][i] = 0; + } + + for (let i = 0; i <= n; i++) { + // to help printing the optimal solution + s[i] = []; // auxiliary + for (let j = 0; j <= n; j++) { + s[i][j] = 0; + } + } + + for (let l = 2; l < n; l++) { + for (let i = 1; i <= n - l + 1; i++) { + const j = i + l - 1; + m[i][j] = Number.MAX_SAFE_INTEGER; + for (let k = i; k <= j - 1; k++) { + // q = cost/scalar multiplications + const q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j]; + if (q < m[i][j]) { + m[i][j] = q; + s[i][j] = k; // s[i,j] = Second auxiliary table that stores k + } + } + } + } + + console.log(m); + console.log(s); + + printOptimalParenthesis(s, 1, n - 1); + + return m[1][n - 1]; +} + +function printOptimalParenthesis(s: Array>, i: number, j: number) { + if (i === j) { + console.log('A[' + i + ']'); + } else { + console.log('('); + printOptimalParenthesis(s, i, s[i][j]); + printOptimalParenthesis(s, s[i][j] + 1, j); + console.log(')'); + } +} diff --git a/src/ts/algorithms/dynamic-programing/min-coin-change.ts b/src/ts/algorithms/dynamic-programing/min-coin-change.ts new file mode 100644 index 00000000..5744a6c2 --- /dev/null +++ b/src/ts/algorithms/dynamic-programing/min-coin-change.ts @@ -0,0 +1,34 @@ +export function minCoinChange(coins: number[], amount: number) { + const cache: Array> = []; + + // tslint:disable-next-line:no-shadowed-variable + const makeChange = function(amount: number) { + if (!amount) { + return []; + } + if (cache[amount]) { + return cache[amount]; + } + let min: number[] = [], + newMin, + newAmount; + for (let i = 0; i < coins.length; i++) { + const coin = coins[i]; + newAmount = amount - coin; + if (newAmount >= 0) { + newMin = makeChange(newAmount); + } + if ( + newAmount >= 0 && + (newMin.length < min.length - 1 || !min.length) && + (newMin.length || !newAmount) + ) { + min = [coin].concat(newMin); + console.log('new Min ' + min + ' for ' + amount); + } + } + return (cache[amount] = min); + }; + + return makeChange(amount); +} diff --git a/src/ts/algorithms/greedy/knapsack.ts b/src/ts/algorithms/greedy/knapsack.ts new file mode 100644 index 00000000..a612c17a --- /dev/null +++ b/src/ts/algorithms/greedy/knapsack.ts @@ -0,0 +1,19 @@ +function knapSack(capacity: number, weights: number[], values: number[]) { + const n = values.length; + let load = 0; + let val = 0; + + for (let i = 0; i < n && load < capacity; i++) { + if (weights[i] <= capacity - load) { + val += values[i]; + load += weights[i]; + console.log('using item ' + (i + 1) + ' for the solution'); + } else { + const r = (capacity - load) / weights[i]; + val += r * values[i]; + load += weights[i]; + console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution'); + } + } + return val; +} diff --git a/src/ts/algorithms/greedy/longest-common-subsequence.ts b/src/ts/algorithms/greedy/longest-common-subsequence.ts new file mode 100644 index 00000000..45ce0ac9 --- /dev/null +++ b/src/ts/algorithms/greedy/longest-common-subsequence.ts @@ -0,0 +1,13 @@ +function lcs(wordX: string, wordY: string, m = wordX.length, n = wordY.length): number { + if (m === 0 || n === 0) { + return 0; + } + + if (wordX[m - 1] === wordY[n - 1]) { + return 1 + lcs(wordX, wordY, m - 1, n - 1); + } else { + const a = lcs(wordX, wordY, m, n - 1); + const b = lcs(wordX, wordY, m - 1, n); + return a > b ? a : b; + } +} diff --git a/src/ts/algorithms/greedy/matrix-chain-multiplication.ts b/src/ts/algorithms/greedy/matrix-chain-multiplication.ts new file mode 100644 index 00000000..fc23fced --- /dev/null +++ b/src/ts/algorithms/greedy/matrix-chain-multiplication.ts @@ -0,0 +1,18 @@ +export function matrixChainOrder(p: number[], i = 1, j = p.length - 1): number { + if (i === j) { + return 0; + } + + let min = Number.MAX_SAFE_INTEGER; + + for (let k = i; k < j; k++) { + const count = + matrixChainOrder(p, i, k) + matrixChainOrder(p, k + 1, j) + p[i - 1] * p[k] * p[j]; + + if (count < min) { + min = count; + } + } + + return min; +} diff --git a/src/ts/algorithms/greedy/min-coin-change.ts b/src/ts/algorithms/greedy/min-coin-change.ts new file mode 100644 index 00000000..7e8f7f72 --- /dev/null +++ b/src/ts/algorithms/greedy/min-coin-change.ts @@ -0,0 +1,12 @@ +function minCoinChange(coins: number[], amount: number) { + const change: number[] = []; + let total = 0; + for (let i = coins.length; i >= 0; i--) { + const coin = coins[i]; + while (total + coin <= amount) { + change.push(coin); + total += coin; + } + } + return change; +} diff --git a/src/ts/index.ts b/src/ts/index.ts index 9dd58718..7b08ada2 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -62,6 +62,7 @@ export { findMinValue as findMinValue } from './algorithms/search/min-max-search // chapter 14 export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive'; +export { minCoinChange as minCoinChange } from './algorithms/dynamic-programing/min-coin-change'; /* import { hotPotato } from './others/hot-potato'; diff --git a/test/ts/algorithms/dynamic-programming/min-coin-change.spec.ts b/test/ts/algorithms/dynamic-programming/min-coin-change.spec.ts new file mode 100644 index 00000000..26821b06 --- /dev/null +++ b/test/ts/algorithms/dynamic-programming/min-coin-change.spec.ts @@ -0,0 +1,30 @@ +import 'mocha'; +import { expect } from 'chai'; +import { minCoinChange } from '../../../../src/ts/index'; + +describe('Dynamic Programming: Min Coin Change', () => { + + it('works with amount 0', () => { + expect(minCoinChange([1, 2, 3], 0)).to.deep.equal([]); + }); + + it('works with amount 1', () => { + expect(minCoinChange([1, 2, 3], 1)).to.deep.equal([1]); + }); + + it('works with amount 2', () => { + expect(minCoinChange([1, 2, 3], 2)).to.deep.equal([2]); + }); + + it('works with amount 3', () => { + expect(minCoinChange([1, 2, 3], 3)).to.deep.equal([3]); + }); + + it('works with amount 4', () => { + expect(minCoinChange([1, 2, 3], 4)).to.deep.equal([1, 3]); + }); + + it('works with amount 6', () => { + expect(minCoinChange([1, 2, 3], 6)).to.deep.equal([3, 3]); + }); +}); From b6175302c3515f7c87194a4304a1b5fbcb4fa8e2 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 4 Feb 2018 09:46:54 -0500 Subject: [PATCH 055/188] updated readme --- README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/README.md b/README.md index 35c9f0e2..00ae7465 100644 --- a/README.md +++ b/README.md @@ -75,3 +75,29 @@ Work in Progress. Happy Coding! + +## Other editions + +| 1st edition | 2nd edition | 3rd edition | +| ------------- |:-------------:|:-------------:| +| ![1st edition](https://d1ldz4te4covpm.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/4874OS_Learning%20JavaScript%20Data%20Structures%20and%20Algorithms.jpg) | ![2nd edition](https://d255esdrn735hr.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/5493OS_5348_Learning%20JavaScript%20Data%20Structures%20and%20Algorithms,%20Second%20Edition.jpg) | ![2nd edition](https://d1ldz4te4covpm.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/B09377_MockupCover_0.png) | +| [Book link](http://amzn.to/1Y1OWPx)| [Book link](http://amzn.to/1TSkcA1)| [Book link](http://a.co/cbMlYmJ)| + +Book link - first edition: + - [Packt](https://www.packtpub.com/application-development/learning-javascript-data-structures-and-algorithms) + - [Amazon](http://amzn.to/1Y1OWPx) + - [Chinese version](http://www.ituring.com.cn/book/1613) + - [Korean version](http://www.acornpub.co.kr/book/javascript-data-structure) + +Book link - second edition: + - [Packt](https://www.packtpub.com/web-development/learning-javascript-data-structures-and-algorithms-second-edition) + - [Amazon](http://amzn.to/1TSkcA1) + - [Brazilian Portuguese version](https://novatec.com.br/livros/estruturas-de-dados-algoritmos-em-javascript/) + + Book link - third edition: + - [Packt](https://www.packtpub.com/web-development/learning-javascript-data-structures-and-algorithms-third-edition) + - [Amazon](http://a.co/cbMlYmJ) + +### Found an issue or have a question? + +Please create an [Issue](https://github.com/loiane/javascript-datastructures-algorithms/issues) or [Pull Request](https://github.com/loiane/javascript-datastructures-algorithms/pulls) From 72d0a471d6ab833e9ee2c713e3a767b3f3e09192 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 4 Feb 2018 12:22:22 -0500 Subject: [PATCH 056/188] [Algorithm Design and Techniques] --- src/ts/algorithms/backtracking/rat-in-maze.ts | 65 +++++++++++ .../algorithms/backtracking/sudoku-solver.ts | 103 ++++++++++++++++++ src/ts/index.ts | 2 + .../backtracking/sudoku-solver.spec.ts | 31 ++++++ 4 files changed, 201 insertions(+) create mode 100644 src/ts/algorithms/backtracking/rat-in-maze.ts create mode 100644 src/ts/algorithms/backtracking/sudoku-solver.ts create mode 100644 test/ts/algorithms/backtracking/sudoku-solver.spec.ts diff --git a/src/ts/algorithms/backtracking/rat-in-maze.ts b/src/ts/algorithms/backtracking/rat-in-maze.ts new file mode 100644 index 00000000..2473b471 --- /dev/null +++ b/src/ts/algorithms/backtracking/rat-in-maze.ts @@ -0,0 +1,65 @@ +export function ratInAMaze(maze: Array>) { + const solution: Array> = []; + + for (let i = 0; i < maze.length; i++) { + solution[i] = []; + for (let j = 0; j < maze[i].length; j++) { + solution[i][j] = 0; + } + } + + if (findPath(maze, 0, 0, solution) === false) { + return solution; + } else { + return 'NO PATH FOUND'; + } +} + +function findPath( + maze: Array>, + x: number, + y: number, + solution: Array> +) { + const n = maze.length; + // check if maze[x][y] is feasible to move + if (x === n - 1 && y === n - 1) { + // we have reached + solution[x][y] = 1; + return true; + } + + // Check if maze[x][y] is valid + if (isSafe(maze, x, y) === true) { + // mark x,y as part of solution path + solution[x][y] = 1; + + /* Move forward in x direction */ + if (findPath(maze, x + 1, y, solution)) { + return true; + } + + /* If moving in x direction doesn't give + solution then Move down in y direction */ + if (findPath(maze, x, y + 1, solution)) { + return true; + } + + /* If none of the above movements work then + BACKTRACK: unmark x,y as part of solution + path */ + solution[x][y] = 0; + return false; + } + + return false; +} + +function isSafe(maze: Array>, x: number, y: number) { + const n = maze.length; + // check if x and y are in limits and cell is not blocked + if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) { + return true; + } + return false; +} diff --git a/src/ts/algorithms/backtracking/sudoku-solver.ts b/src/ts/algorithms/backtracking/sudoku-solver.ts new file mode 100644 index 00000000..78228518 --- /dev/null +++ b/src/ts/algorithms/backtracking/sudoku-solver.ts @@ -0,0 +1,103 @@ +const UNASSIGNED = 0; + +export function sudokuSolver(grid: Array>) { + if (solveSudoku(grid) === true) { + return grid; + } else { + return 'NO SOLUTION EXISTS!'; + } +} + +function solveSudoku(grid: Array>) { + let row = 0; + let col = 0; + let checkBlankSpaces = false; + + // If there is no unassigned location, we are done + for (row = 0; row < grid.length; row++) { + for (col = 0; col < grid[row].length; col++) { + if (grid[row][col] === UNASSIGNED) { + checkBlankSpaces = true; + break; + } + } + if (checkBlankSpaces === true) { + break; + } + } + + if (checkBlankSpaces === false) { + return true; + } // success! + + // consider digits 1 to 9 + for (let num = 1; num <= 9; num++) { + // if looks promising + if (isSafe(grid, row, col, num)) { + // make tentative assignment + grid[row][col] = num; + + // return, if success, yay! + if (solveSudoku(grid)) { + return true; + } + + // failure, unmake & try again + grid[row][col] = UNASSIGNED; + } + } + + return false; +} + +/* Returns a boolean which indicates whether any assigned entry + in the specified row matches the given number. */ +function usedInRow(grid: Array>, row: number, num: number) { + for (let col = 0; col < grid.length; col++) { + if (grid[row][col] === num) { + return true; + } + } + return false; +} + +/* Returns a boolean which indicates whether any assigned entry + in the specified column matches the given number. */ +function usedInCol(grid: Array>, col: number, num: number) { + for (let row = 0; row < grid.length; row++) { + if (grid[row][col] === num) { + return true; + } + } + return false; +} + +/* Returns a boolean which indicates whether any assigned entry + within the specified 3x3 box matches the given number. */ +function usedInBox( + grid: Array>, + boxStartRow: number, + boxStartCol: number, + num: number +) { + for (let row = 0; row < 3; row++) { + for (let col = 0; col < 3; col++) { + if (grid[row + boxStartRow][col + boxStartCol] === num) { + return true; + } + } + } + return false; +} + +/* Returns a boolean which indicates whether it will be legal to assign + num to the given row,col location. */ +function isSafe(grid: Array>, row: number, col: number, num: number) { + /* Check if 'num' is not already placed in current row, + current column and current 3x3 box */ + return ( + !usedInRow(grid, row, num) && + !usedInCol(grid, col, num) && + !usedInBox(grid, row - row % 3, col - col % 3, num) + ); +} diff --git a/src/ts/index.ts b/src/ts/index.ts index 7b08ada2..661de1f2 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -63,6 +63,8 @@ export { findMinValue as findMinValue } from './algorithms/search/min-max-search // chapter 14 export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive'; export { minCoinChange as minCoinChange } from './algorithms/dynamic-programing/min-coin-change'; +export { ratInAMaze as ratInAMaze } from './algorithms/backtracking/rat-in-maze'; +export { sudokuSolver as sudokuSolver } from './algorithms/backtracking/sudoku-solver'; /* import { hotPotato } from './others/hot-potato'; diff --git a/test/ts/algorithms/backtracking/sudoku-solver.spec.ts b/test/ts/algorithms/backtracking/sudoku-solver.spec.ts new file mode 100644 index 00000000..2b78a551 --- /dev/null +++ b/test/ts/algorithms/backtracking/sudoku-solver.spec.ts @@ -0,0 +1,31 @@ +import 'mocha'; +import { expect } from 'chai'; +import { sudokuSolver } from '../../../../src/ts/index'; + +describe('Sudoku Solver', () => { + it('sudoku solver', () => { + const grid = [ + [3, 0, 6, 5, 0, 8, 4, 0, 0], + [5, 2, 0, 0, 0, 0, 0, 0, 0], + [0, 8, 7, 0, 0, 0, 0, 3, 1], + [0, 0, 3, 0, 1, 0, 0, 8, 0], + [9, 0, 0, 8, 6, 3, 0, 0, 5], + [0, 5, 0, 0, 9, 0, 6, 0, 0], + [1, 3, 0, 0, 0, 0, 2, 5, 0], + [0, 0, 0, 0, 0, 0, 0, 7, 4], + [0, 0, 5, 2, 0, 6, 3, 0, 0] + ]; + const solution = [ + [3, 1, 6, 5, 7, 8, 4, 9, 2], + [5, 2, 9, 1, 3, 4, 7, 6, 8], + [4, 8, 7, 6, 2, 9, 5, 3, 1], + [2, 6, 3, 4, 1, 5, 9, 8, 7], + [9, 7, 4, 8, 6, 3, 1, 2, 5], + [8, 5, 1, 7, 9, 2, 6, 4, 3], + [1, 3, 8, 9, 4, 7, 2, 5, 6], + [6, 9, 2, 3, 5, 1, 8, 7, 4], + [7, 4, 5, 2, 8, 6, 3, 1, 9] + ]; + expect(sudokuSolver(grid)).to.deep.equal(solution); + }); +}); From f92455aa598a56a8288c48d4ec90e3ca36dc6fe0 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 4 Feb 2018 12:59:18 -0500 Subject: [PATCH 057/188] [Algorithm Design and Techniques] --- src/ts/algorithms/dynamic-programing/knapsack.ts | 10 +++++----- .../longest-common-subsequence-print.ts | 6 +++--- .../dynamic-programing/longest-common-subsequence.ts | 2 +- .../dynamic-programing/matrix-chain-multiplication.ts | 10 +++++----- src/ts/algorithms/greedy/knapsack.ts | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/ts/algorithms/dynamic-programing/knapsack.ts b/src/ts/algorithms/dynamic-programing/knapsack.ts index ed6aed8a..55154585 100644 --- a/src/ts/algorithms/dynamic-programing/knapsack.ts +++ b/src/ts/algorithms/dynamic-programing/knapsack.ts @@ -13,12 +13,12 @@ export function knapSack(capacity: number, weights: number[], values: number[], const a = values[i - 1] + kS[i - 1][w - weights[i - 1]]; const b = kS[i - 1][w]; kS[i][w] = a > b ? a : b; // max(a,b) - console.log(a + ' can be part of the solution'); + // console.log(a + ' can be part of the solution'); } else { kS[i][w] = kS[i - 1][w]; } } - console.log(kS[i].join()); + // console.log(kS[i].join()); } // extra algorithm to find the items that are part of the solution @@ -37,13 +37,13 @@ function findValues( let i = n; let k = capacity; - console.log('Items that are part of the solution:'); + // console.log('Items that are part of the solution:'); while (i > 0 && k > 0) { if (kS[i][k] !== kS[i - 1][k]) { - console.log( + /* console.log( 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1] - ); + ); */ i--; k = k - kS[i][k]; } else { diff --git a/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts b/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts index 672c61fa..3fbbab8e 100644 --- a/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts +++ b/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts @@ -27,8 +27,8 @@ export function lcs(wordX: string, wordY: string) { solution[i][j] = l[i][j] === l[i - 1][j] ? 'top' : 'left'; } } - console.log(l[i].join()); - console.log(solution[i].join()); + // console.log(l[i].join()); + // console.log(solution[i].join()); } printSolution(solution, wordX, m, n); @@ -55,5 +55,5 @@ function printSolution(solution: Array>, wordX: string, m: number, x = solution[a][b]; } - console.log('lcs: ' + answer); + // console.log('lcs: ' + answer); } diff --git a/src/ts/algorithms/dynamic-programing/longest-common-subsequence.ts b/src/ts/algorithms/dynamic-programing/longest-common-subsequence.ts index 9f4e29f5..9aa48054 100644 --- a/src/ts/algorithms/dynamic-programing/longest-common-subsequence.ts +++ b/src/ts/algorithms/dynamic-programing/longest-common-subsequence.ts @@ -22,7 +22,7 @@ export function lcs(wordX: string, wordY: string) { l[i][j] = a > b ? a : b; // max(a,b) } } - console.log(l[i].join()); + // console.log(l[i].join()); } return l[m][n]; diff --git a/src/ts/algorithms/dynamic-programing/matrix-chain-multiplication.ts b/src/ts/algorithms/dynamic-programing/matrix-chain-multiplication.ts index a3bdc5bb..c2743ec5 100644 --- a/src/ts/algorithms/dynamic-programing/matrix-chain-multiplication.ts +++ b/src/ts/algorithms/dynamic-programing/matrix-chain-multiplication.ts @@ -32,8 +32,8 @@ export function matrixChainOrder(p: number[]): number { } } - console.log(m); - console.log(s); + // console.log(m); + // console.log(s); printOptimalParenthesis(s, 1, n - 1); @@ -42,11 +42,11 @@ export function matrixChainOrder(p: number[]): number { function printOptimalParenthesis(s: Array>, i: number, j: number) { if (i === j) { - console.log('A[' + i + ']'); + // console.log('A[' + i + ']'); } else { - console.log('('); + // console.log('('); printOptimalParenthesis(s, i, s[i][j]); printOptimalParenthesis(s, s[i][j] + 1, j); - console.log(')'); + // console.log(')'); } } diff --git a/src/ts/algorithms/greedy/knapsack.ts b/src/ts/algorithms/greedy/knapsack.ts index a612c17a..68b235ec 100644 --- a/src/ts/algorithms/greedy/knapsack.ts +++ b/src/ts/algorithms/greedy/knapsack.ts @@ -7,12 +7,12 @@ function knapSack(capacity: number, weights: number[], values: number[]) { if (weights[i] <= capacity - load) { val += values[i]; load += weights[i]; - console.log('using item ' + (i + 1) + ' for the solution'); + // console.log('using item ' + (i + 1) + ' for the solution'); } else { const r = (capacity - load) / weights[i]; val += r * values[i]; load += weights[i]; - console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution'); + // console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution'); } } return val; From f876ddaa0fddee3fbaadd13c9d8a8d158532406b Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 4 Feb 2018 13:04:39 -0500 Subject: [PATCH 058/188] [Algorithm Design and Techniques] --- src/ts/algorithms/dynamic-programing/knapsack.ts | 6 ++---- src/ts/algorithms/dynamic-programing/min-coin-change.ts | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/ts/algorithms/dynamic-programing/knapsack.ts b/src/ts/algorithms/dynamic-programing/knapsack.ts index 55154585..bfa42398 100644 --- a/src/ts/algorithms/dynamic-programing/knapsack.ts +++ b/src/ts/algorithms/dynamic-programing/knapsack.ts @@ -22,7 +22,7 @@ export function knapSack(capacity: number, weights: number[], values: number[], } // extra algorithm to find the items that are part of the solution - findValues(n, capacity, kS, values, weights); + findValues(n, capacity, kS); return kS[n][capacity]; } @@ -30,9 +30,7 @@ export function knapSack(capacity: number, weights: number[], values: number[], function findValues( n: number, capacity: number, - kS: Array>, - weights: number[], - values: number[] + kS: Array> ) { let i = n; let k = capacity; diff --git a/src/ts/algorithms/dynamic-programing/min-coin-change.ts b/src/ts/algorithms/dynamic-programing/min-coin-change.ts index 5744a6c2..85baeb83 100644 --- a/src/ts/algorithms/dynamic-programing/min-coin-change.ts +++ b/src/ts/algorithms/dynamic-programing/min-coin-change.ts @@ -24,7 +24,7 @@ export function minCoinChange(coins: number[], amount: number) { (newMin.length || !newAmount) ) { min = [coin].concat(newMin); - console.log('new Min ' + min + ' for ' + amount); + // console.log('new Min ' + min + ' for ' + amount); } } return (cache[amount] = min); From 964eb432dc47037f820982c5c00edbd83f2414c7 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 4 Feb 2018 13:55:56 -0500 Subject: [PATCH 059/188] [Algorithm Design and Techniques] --- src/js/algorithms/backtracking/rat-in-maze.js | 52 +++++++++++ .../algorithms/backtracking/sudoku-solver.js | 86 +++++++++++++++++++ .../dynamic-programing/knapsack-recursive.js | 11 +++ .../algorithms/dynamic-programing/knapsack.js | 41 +++++++++ .../longest-common-subsequence-print.js | 52 +++++++++++ .../longest-common-subsequence.js | 26 ++++++ .../matrix-chain-multiplication.js | 46 ++++++++++ .../dynamic-programing/min-coin-change.js | 32 +++++++ src/js/algorithms/greedy/knapsack.js | 18 ++++ .../greedy/longest-common-subsequence.js | 11 +++ .../greedy/matrix-chain-multiplication.js | 14 +++ src/js/algorithms/greedy/min-coin-change.js | 12 +++ 12 files changed, 401 insertions(+) create mode 100644 src/js/algorithms/backtracking/rat-in-maze.js create mode 100644 src/js/algorithms/backtracking/sudoku-solver.js create mode 100644 src/js/algorithms/dynamic-programing/knapsack-recursive.js create mode 100644 src/js/algorithms/dynamic-programing/knapsack.js create mode 100644 src/js/algorithms/dynamic-programing/longest-common-subsequence-print.js create mode 100644 src/js/algorithms/dynamic-programing/longest-common-subsequence.js create mode 100644 src/js/algorithms/dynamic-programing/matrix-chain-multiplication.js create mode 100644 src/js/algorithms/dynamic-programing/min-coin-change.js create mode 100644 src/js/algorithms/greedy/knapsack.js create mode 100644 src/js/algorithms/greedy/longest-common-subsequence.js create mode 100644 src/js/algorithms/greedy/matrix-chain-multiplication.js create mode 100644 src/js/algorithms/greedy/min-coin-change.js diff --git a/src/js/algorithms/backtracking/rat-in-maze.js b/src/js/algorithms/backtracking/rat-in-maze.js new file mode 100644 index 00000000..6e095d59 --- /dev/null +++ b/src/js/algorithms/backtracking/rat-in-maze.js @@ -0,0 +1,52 @@ +function isSafe(maze, x, y) { + const n = maze.length; + // check if x and y are in limits and cell is not blocked + if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) { + return true; + } + return false; +} + +function findPath(maze, x, y, solution) { + const n = maze.length; + // check if maze[x][y] is feasible to move + if (x === n - 1 && y === n - 1) { + // we have reached + solution[x][y] = 1; + return true; + } + // Check if maze[x][y] is valid + if (isSafe(maze, x, y) === true) { + // mark x,y as part of solution path + solution[x][y] = 1; + /* Move forward in x direction */ + if (findPath(maze, x + 1, y, solution)) { + return true; + } + /* If moving in x direction doesn't give + solution then Move down in y direction */ + if (findPath(maze, x, y + 1, solution)) { + return true; + } + /* If none of the above movements work then + BACKTRACK: unmark x,y as part of solution + path */ + solution[x][y] = 0; + return false; + } + return false; +} + +export function ratInAMaze(maze) { + const solution = []; + for (let i = 0; i < maze.length; i++) { + solution[i] = []; + for (let j = 0; j < maze[i].length; j++) { + solution[i][j] = 0; + } + } + if (findPath(maze, 0, 0, solution) === false) { + return solution; + } + return 'NO PATH FOUND'; +} diff --git a/src/js/algorithms/backtracking/sudoku-solver.js b/src/js/algorithms/backtracking/sudoku-solver.js new file mode 100644 index 00000000..30d99b38 --- /dev/null +++ b/src/js/algorithms/backtracking/sudoku-solver.js @@ -0,0 +1,86 @@ +const UNASSIGNED = 0; + +/* Returns a boolean which indicates whether any assigned entry + in the specified row matches the given number. */ +function usedInRow(grid, row, num) { + for (let col = 0; col < grid.length; col++) { + if (grid[row][col] === num) { + return true; + } + } + return false; +} +/* Returns a boolean which indicates whether any assigned entry + in the specified column matches the given number. */ +function usedInCol(grid, col, num) { + for (let row = 0; row < grid.length; row++) { + if (grid[row][col] === num) { + return true; + } + } + return false; +} +/* Returns a boolean which indicates whether any assigned entry + within the specified 3x3 box matches the given number. */ +function usedInBox(grid, boxStartRow, boxStartCol, num) { + for (let row = 0; row < 3; row++) { + for (let col = 0; col < 3; col++) { + if (grid[row + boxStartRow][col + boxStartCol] === num) { + return true; + } + } + } + return false; +} + +function isSafe(grid, row, col, num) { + /* Check if 'num' is not already placed in current row, + current column and current 3x3 box */ + return ( + !usedInRow(grid, row, num) && + !usedInCol(grid, col, num) && + !usedInBox(grid, row - (row % 3), col - (col % 3), num) + ); +} +function solveSudoku(grid) { + let row = 0; + let col = 0; + let checkBlankSpaces = false; + // If there is no unassigned location, we are done + for (row = 0; row < grid.length; row++) { + for (col = 0; col < grid[row].length; col++) { + if (grid[row][col] === UNASSIGNED) { + checkBlankSpaces = true; + break; + } + } + if (checkBlankSpaces === true) { + break; + } + } + if (checkBlankSpaces === false) { + return true; + } // success! + // consider digits 1 to 9 + for (let num = 1; num <= 9; num++) { + // if looks promising + if (isSafe(grid, row, col, num)) { + // make tentative assignment + grid[row][col] = num; + // return, if success, yay! + if (solveSudoku(grid)) { + return true; + } + // failure, unmake & try again + grid[row][col] = UNASSIGNED; + } + } + return false; +} + +export function sudokuSolver(grid) { + if (solveSudoku(grid) === true) { + return grid; + } + return 'NO SOLUTION EXISTS!'; +} diff --git a/src/js/algorithms/dynamic-programing/knapsack-recursive.js b/src/js/algorithms/dynamic-programing/knapsack-recursive.js new file mode 100644 index 00000000..fbe646e1 --- /dev/null +++ b/src/js/algorithms/dynamic-programing/knapsack-recursive.js @@ -0,0 +1,11 @@ +export function knapSack(capacity, weights, values, n) { + if (n === 0 || capacity === 0) { + return 0; + } + if (weights[n - 1] > capacity) { + return knapSack(capacity, weights, values, n - 1); + } + const a = values[n - 1] + knapSack(capacity - weights[n - 1], weights, values, n - 1); + const b = knapSack(capacity, weights, values, n - 1); + return a > b ? a : b; +} diff --git a/src/js/algorithms/dynamic-programing/knapsack.js b/src/js/algorithms/dynamic-programing/knapsack.js new file mode 100644 index 00000000..14919f44 --- /dev/null +++ b/src/js/algorithms/dynamic-programing/knapsack.js @@ -0,0 +1,41 @@ +function findValues(n, capacity, kS) { + let i = n; + let k = capacity; + // console.log('Items that are part of the solution:'); + while (i > 0 && k > 0) { + if (kS[i][k] !== kS[i - 1][k]) { + /* console.log( + 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1] + ); */ + i--; + k -= kS[i][k]; + } else { + i--; + } + } +} + +export function knapSack(capacity, weights, values, n) { + const kS = []; + for (let i = 0; i <= n; i++) { + kS[i] = []; + } + for (let i = 0; i <= n; i++) { + for (let w = 0; w <= capacity; w++) { + if (i === 0 || w === 0) { + kS[i][w] = 0; + } else if (weights[i - 1] <= w) { + const a = values[i - 1] + kS[i - 1][w - weights[i - 1]]; + const b = kS[i - 1][w]; + kS[i][w] = a > b ? a : b; // max(a,b) + // console.log(a + ' can be part of the solution'); + } else { + kS[i][w] = kS[i - 1][w]; + } + } + // console.log(kS[i].join()); + } + // extra algorithm to find the items that are part of the solution + findValues(n, capacity, kS); + return kS[n][capacity]; +} diff --git a/src/js/algorithms/dynamic-programing/longest-common-subsequence-print.js b/src/js/algorithms/dynamic-programing/longest-common-subsequence-print.js new file mode 100644 index 00000000..0ddc1b37 --- /dev/null +++ b/src/js/algorithms/dynamic-programing/longest-common-subsequence-print.js @@ -0,0 +1,52 @@ +function printSolution(solution, wordX, m, n) { + let a = m; + let b = n; + let x = solution[a][b]; + let answer = ''; + while (x !== '0') { + if (solution[a][b] === 'diagonal') { + answer = wordX[a - 1] + answer; + a--; + b--; + } else if (solution[a][b] === 'left') { + b--; + } else if (solution[a][b] === 'top') { + a--; + } + x = solution[a][b]; + } + // console.log('lcs: ' + answer); +} +export function lcs(wordX, wordY) { + const m = wordX.length; + const n = wordY.length; + const l = []; + const solution = []; + for (let i = 0; i <= m; i++) { + l[i] = []; + solution[i] = []; + for (let j = 0; j <= n; j++) { + l[i][j] = 0; + solution[i][j] = '0'; + } + } + for (let i = 0; i <= m; i++) { + for (let j = 0; j <= n; j++) { + if (i === 0 || j === 0) { + l[i][j] = 0; + } else if (wordX[i - 1] === wordY[j - 1]) { + l[i][j] = l[i - 1][j - 1] + 1; + solution[i][j] = 'diagonal'; + } else { + const a = l[i - 1][j]; + const b = l[i][j - 1]; + l[i][j] = a > b ? a : b; // max(a,b) + solution[i][j] = l[i][j] === l[i - 1][j] ? 'top' : 'left'; + } + } + // console.log(l[i].join()); + // console.log(solution[i].join()); + } + printSolution(solution, wordX, m, n); + return l[m][n]; +} diff --git a/src/js/algorithms/dynamic-programing/longest-common-subsequence.js b/src/js/algorithms/dynamic-programing/longest-common-subsequence.js new file mode 100644 index 00000000..762c70c6 --- /dev/null +++ b/src/js/algorithms/dynamic-programing/longest-common-subsequence.js @@ -0,0 +1,26 @@ +export function lcs(wordX, wordY) { + const m = wordX.length; + const n = wordY.length; + const l = []; + for (let i = 0; i <= m; i++) { + l[i] = []; + for (let j = 0; j <= n; j++) { + l[i][j] = 0; + } + } + for (let i = 0; i <= m; i++) { + for (let j = 0; j <= n; j++) { + if (i === 0 || j === 0) { + l[i][j] = 0; + } else if (wordX[i - 1] === wordY[j - 1]) { + l[i][j] = l[i - 1][j - 1] + 1; + } else { + const a = l[i - 1][j]; + const b = l[i][j - 1]; + l[i][j] = a > b ? a : b; // max(a,b) + } + } + // console.log(l[i].join()); + } + return l[m][n]; +} diff --git a/src/js/algorithms/dynamic-programing/matrix-chain-multiplication.js b/src/js/algorithms/dynamic-programing/matrix-chain-multiplication.js new file mode 100644 index 00000000..ae155cb3 --- /dev/null +++ b/src/js/algorithms/dynamic-programing/matrix-chain-multiplication.js @@ -0,0 +1,46 @@ +function printOptimalParenthesis(s, i, j) { + if (i === j) { + // console.log('A[' + i + ']'); + } else { + // console.log('('); + printOptimalParenthesis(s, i, s[i][j]); + printOptimalParenthesis(s, s[i][j] + 1, j); + // console.log(')'); + } +} + +export function matrixChainOrder(p) { + const n = p.length; + const m = []; + const s = []; + for (let i = 1; i <= n; i++) { + m[i] = []; + m[i][i] = 0; + } + for (let i = 0; i <= n; i++) { + // to help printing the optimal solution + s[i] = []; // auxiliary + for (let j = 0; j <= n; j++) { + s[i][j] = 0; + } + } + for (let l = 2; l < n; l++) { + for (let i = 1; i <= (n - l) + 1; i++) { + const j = (i + l) - 1; + m[i][j] = Number.MAX_SAFE_INTEGER; + for (let k = i; k <= j - 1; k++) { + // q = cost/scalar multiplications + const q = m[i][k] + m[k + 1][j] + ((p[i - 1] * p[k]) * p[j]); + if (q < m[i][j]) { + m[i][j] = q; + s[i][j] = k; // s[i,j] = Second auxiliary table that stores k + } + } + } + } + // console.log(m); + // console.log(s); + printOptimalParenthesis(s, 1, n - 1); + return m[1][n - 1]; +} + diff --git a/src/js/algorithms/dynamic-programing/min-coin-change.js b/src/js/algorithms/dynamic-programing/min-coin-change.js new file mode 100644 index 00000000..5456cd30 --- /dev/null +++ b/src/js/algorithms/dynamic-programing/min-coin-change.js @@ -0,0 +1,32 @@ +export function minCoinChange(coins, amount) { + const cache = []; + + const makeChange = (value) => { + if (!value) { + return []; + } + if (cache[value]) { + return cache[value]; + } + let min = []; + let newMin; + let newAmount; + for (let i = 0; i < coins.length; i++) { + const coin = coins[i]; + newAmount = value - coin; + if (newAmount >= 0) { + newMin = makeChange(newAmount); + } + if ( + newAmount >= 0 && + (newMin.length < min.length - 1 || !min.length) && + (newMin.length || !newAmount) + ) { + min = [coin].concat(newMin); + // console.log('new Min ' + min + ' for ' + amount); + } + } + return (cache[value] = min); + }; + return makeChange(amount); +} diff --git a/src/js/algorithms/greedy/knapsack.js b/src/js/algorithms/greedy/knapsack.js new file mode 100644 index 00000000..294def52 --- /dev/null +++ b/src/js/algorithms/greedy/knapsack.js @@ -0,0 +1,18 @@ +export function knapSack(capacity, weights, values) { + const n = values.length; + let load = 0; + let val = 0; + for (let i = 0; i < n && load < capacity; i++) { + if (weights[i] <= capacity - load) { + val += values[i]; + load += weights[i]; + // console.log('using item ' + (i + 1) + ' for the solution'); + } else { + const r = (capacity - load) / weights[i]; + val += r * values[i]; + load += weights[i]; + // console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution'); + } + } + return val; +} diff --git a/src/js/algorithms/greedy/longest-common-subsequence.js b/src/js/algorithms/greedy/longest-common-subsequence.js new file mode 100644 index 00000000..f7ec8272 --- /dev/null +++ b/src/js/algorithms/greedy/longest-common-subsequence.js @@ -0,0 +1,11 @@ +export function lcs(wordX, wordY, m = wordX.length, n = wordY.length) { + if (m === 0 || n === 0) { + return 0; + } + if (wordX[m - 1] === wordY[n - 1]) { + return 1 + lcs(wordX, wordY, m - 1, n - 1); + } + const a = lcs(wordX, wordY, m, n - 1); + const b = lcs(wordX, wordY, m - 1, n); + return a > b ? a : b; +} diff --git a/src/js/algorithms/greedy/matrix-chain-multiplication.js b/src/js/algorithms/greedy/matrix-chain-multiplication.js new file mode 100644 index 00000000..9909eab2 --- /dev/null +++ b/src/js/algorithms/greedy/matrix-chain-multiplication.js @@ -0,0 +1,14 @@ +export function matrixChainOrder(p, i = 1, j = p.length - 1) { + if (i === j) { + return 0; + } + let min = Number.MAX_SAFE_INTEGER; + for (let k = i; k < j; k++) { + const count = + matrixChainOrder(p, i, k) + matrixChainOrder(p, k + 1, j) + ((p[i - 1] * p[k]) * p[j]); + if (count < min) { + min = count; + } + } + return min; +} diff --git a/src/js/algorithms/greedy/min-coin-change.js b/src/js/algorithms/greedy/min-coin-change.js new file mode 100644 index 00000000..61abfe91 --- /dev/null +++ b/src/js/algorithms/greedy/min-coin-change.js @@ -0,0 +1,12 @@ +export function minCoinChange(coins, amount) { + const change = []; + let total = 0; + for (let i = coins.length; i >= 0; i--) { + const coin = coins[i]; + while (total + coin <= amount) { + change.push(coin); + total += coin; + } + } + return change; +} From ab9a49ec8127fad13d65f9ea186682e38a922b33 Mon Sep 17 00:00:00 2001 From: loiane Date: Mon, 12 Feb 2018 06:45:38 -0500 Subject: [PATCH 060/188] [Algorithm Design and Techniques] --- src/js/algorithms/backtracking/rat-in-maze.js | 11 ---- .../algorithms/backtracking/sudoku-solver.js | 66 ++++++++----------- src/ts/algorithms/backtracking/rat-in-maze.ts | 11 ---- .../algorithms/backtracking/sudoku-solver.ts | 18 +---- 4 files changed, 29 insertions(+), 77 deletions(-) diff --git a/src/js/algorithms/backtracking/rat-in-maze.js b/src/js/algorithms/backtracking/rat-in-maze.js index 6e095d59..36174e16 100644 --- a/src/js/algorithms/backtracking/rat-in-maze.js +++ b/src/js/algorithms/backtracking/rat-in-maze.js @@ -1,6 +1,5 @@ function isSafe(maze, x, y) { const n = maze.length; - // check if x and y are in limits and cell is not blocked if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) { return true; } @@ -9,28 +8,18 @@ function isSafe(maze, x, y) { function findPath(maze, x, y, solution) { const n = maze.length; - // check if maze[x][y] is feasible to move if (x === n - 1 && y === n - 1) { - // we have reached solution[x][y] = 1; return true; } - // Check if maze[x][y] is valid if (isSafe(maze, x, y) === true) { - // mark x,y as part of solution path solution[x][y] = 1; - /* Move forward in x direction */ if (findPath(maze, x + 1, y, solution)) { return true; } - /* If moving in x direction doesn't give - solution then Move down in y direction */ if (findPath(maze, x, y + 1, solution)) { return true; } - /* If none of the above movements work then - BACKTRACK: unmark x,y as part of solution - path */ solution[x][y] = 0; return false; } diff --git a/src/js/algorithms/backtracking/sudoku-solver.js b/src/js/algorithms/backtracking/sudoku-solver.js index 30d99b38..48d98bd5 100644 --- a/src/js/algorithms/backtracking/sudoku-solver.js +++ b/src/js/algorithms/backtracking/sudoku-solver.js @@ -1,31 +1,27 @@ const UNASSIGNED = 0; -/* Returns a boolean which indicates whether any assigned entry - in the specified row matches the given number. */ -function usedInRow(grid, row, num) { - for (let col = 0; col < grid.length; col++) { - if (grid[row][col] === num) { +function usedInRow(matrix, row, num) { + for (let col = 0; col < matrix.length; col++) { + if (matrix[row][col] === num) { return true; } } return false; } -/* Returns a boolean which indicates whether any assigned entry - in the specified column matches the given number. */ -function usedInCol(grid, col, num) { - for (let row = 0; row < grid.length; row++) { - if (grid[row][col] === num) { + +function usedInCol(matrix, col, num) { + for (let row = 0; row < matrix.length; row++) { + if (matrix[row][col] === num) { return true; } } return false; } -/* Returns a boolean which indicates whether any assigned entry - within the specified 3x3 box matches the given number. */ -function usedInBox(grid, boxStartRow, boxStartCol, num) { + +function usedInBox(matrix, boxStartRow, boxStartCol, num) { for (let row = 0; row < 3; row++) { for (let col = 0; col < 3; col++) { - if (grid[row + boxStartRow][col + boxStartCol] === num) { + if (matrix[row + boxStartRow][col + boxStartCol] === num) { return true; } } @@ -33,23 +29,21 @@ function usedInBox(grid, boxStartRow, boxStartCol, num) { return false; } -function isSafe(grid, row, col, num) { - /* Check if 'num' is not already placed in current row, - current column and current 3x3 box */ +function isSafe(matrix, row, col, num) { return ( - !usedInRow(grid, row, num) && - !usedInCol(grid, col, num) && - !usedInBox(grid, row - (row % 3), col - (col % 3), num) + !usedInRow(matrix, row, num) && + !usedInCol(matrix, col, num) && + !usedInBox(matrix, row - (row % 3), col - (col % 3), num) ); } -function solveSudoku(grid) { +function solveSudoku(matrix) { let row = 0; let col = 0; let checkBlankSpaces = false; - // If there is no unassigned location, we are done - for (row = 0; row < grid.length; row++) { - for (col = 0; col < grid[row].length; col++) { - if (grid[row][col] === UNASSIGNED) { + + for (row = 0; row < matrix.length; row++) { + for (col = 0; col < matrix[row].length; col++) { + if (matrix[row][col] === UNASSIGNED) { checkBlankSpaces = true; break; } @@ -60,27 +54,23 @@ function solveSudoku(grid) { } if (checkBlankSpaces === false) { return true; - } // success! - // consider digits 1 to 9 + } + for (let num = 1; num <= 9; num++) { - // if looks promising - if (isSafe(grid, row, col, num)) { - // make tentative assignment - grid[row][col] = num; - // return, if success, yay! - if (solveSudoku(grid)) { + if (isSafe(matrix, row, col, num)) { + matrix[row][col] = num; + if (solveSudoku(matrix)) { return true; } - // failure, unmake & try again - grid[row][col] = UNASSIGNED; + matrix[row][col] = UNASSIGNED; } } return false; } -export function sudokuSolver(grid) { - if (solveSudoku(grid) === true) { - return grid; +export function sudokuSolver(matrix) { + if (solveSudoku(matrix) === true) { + return matrix; } return 'NO SOLUTION EXISTS!'; } diff --git a/src/ts/algorithms/backtracking/rat-in-maze.ts b/src/ts/algorithms/backtracking/rat-in-maze.ts index 2473b471..915c8b63 100644 --- a/src/ts/algorithms/backtracking/rat-in-maze.ts +++ b/src/ts/algorithms/backtracking/rat-in-maze.ts @@ -22,32 +22,22 @@ function findPath( solution: Array> ) { const n = maze.length; - // check if maze[x][y] is feasible to move if (x === n - 1 && y === n - 1) { - // we have reached solution[x][y] = 1; return true; } - // Check if maze[x][y] is valid if (isSafe(maze, x, y) === true) { - // mark x,y as part of solution path solution[x][y] = 1; - /* Move forward in x direction */ if (findPath(maze, x + 1, y, solution)) { return true; } - /* If moving in x direction doesn't give - solution then Move down in y direction */ if (findPath(maze, x, y + 1, solution)) { return true; } - /* If none of the above movements work then - BACKTRACK: unmark x,y as part of solution - path */ solution[x][y] = 0; return false; } @@ -57,7 +47,6 @@ function findPath( function isSafe(maze: Array>, x: number, y: number) { const n = maze.length; - // check if x and y are in limits and cell is not blocked if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) { return true; } diff --git a/src/ts/algorithms/backtracking/sudoku-solver.ts b/src/ts/algorithms/backtracking/sudoku-solver.ts index 78228518..3ada1069 100644 --- a/src/ts/algorithms/backtracking/sudoku-solver.ts +++ b/src/ts/algorithms/backtracking/sudoku-solver.ts @@ -13,7 +13,6 @@ function solveSudoku(grid: Array>) { let col = 0; let checkBlankSpaces = false; - // If there is no unassigned location, we are done for (row = 0; row < grid.length; row++) { for (col = 0; col < grid[row].length; col++) { if (grid[row][col] === UNASSIGNED) { @@ -28,21 +27,16 @@ function solveSudoku(grid: Array>) { if (checkBlankSpaces === false) { return true; - } // success! + } - // consider digits 1 to 9 for (let num = 1; num <= 9; num++) { - // if looks promising if (isSafe(grid, row, col, num)) { - // make tentative assignment grid[row][col] = num; - // return, if success, yay! if (solveSudoku(grid)) { return true; } - // failure, unmake & try again grid[row][col] = UNASSIGNED; } } @@ -50,8 +44,6 @@ function solveSudoku(grid: Array>) { return false; } -/* Returns a boolean which indicates whether any assigned entry - in the specified row matches the given number. */ function usedInRow(grid: Array>, row: number, num: number) { for (let col = 0; col < grid.length; col++) { if (grid[row][col] === num) { @@ -61,8 +53,6 @@ function usedInRow(grid: Array>, row: number, num: number) { return false; } -/* Returns a boolean which indicates whether any assigned entry - in the specified column matches the given number. */ function usedInCol(grid: Array>, col: number, num: number) { for (let row = 0; row < grid.length; row++) { if (grid[row][col] === num) { @@ -72,8 +62,6 @@ function usedInCol(grid: Array>, col: number, num: number) { return false; } -/* Returns a boolean which indicates whether any assigned entry - within the specified 3x3 box matches the given number. */ function usedInBox( grid: Array>, boxStartRow: number, @@ -90,11 +78,7 @@ function usedInBox( return false; } -/* Returns a boolean which indicates whether it will be legal to assign - num to the given row,col location. */ function isSafe(grid: Array>, row: number, col: number, num: number) { - /* Check if 'num' is not already placed in current row, - current column and current 3x3 box */ return ( !usedInRow(grid, row, num) && !usedInCol(grid, col, num) && From a180e8aa45cdf9d1fcb103f0c8beb2507f7c2a3e Mon Sep 17 00:00:00 2001 From: loiane Date: Mon, 12 Mar 2018 08:40:45 -0400 Subject: [PATCH 061/188] [String and Math Algorithms] --- src/ts/algorithms/math/find-divisors.ts | 18 ++++++++ src/ts/algorithms/math/gcd.ts | 22 +++++++++ src/ts/algorithms/math/greatest-difference.ts | 20 ++++++++ src/ts/algorithms/math/lcm.ts | 20 ++++++++ src/ts/algorithms/math/primality-test.ts | 36 +++++++++++++++ src/ts/algorithms/math/sieve-eratosthenes.ts | 18 ++++++++ src/ts/algorithms/string/brute-force.ts | 22 +++++++++ src/ts/algorithms/string/huffman.ts | 0 .../algorithms/string/knuth-morris-pratt.ts | 46 +++++++++++++++++++ .../string/longest-common-substring.ts | 0 src/ts/algorithms/string/rabin-karp.ts | 39 ++++++++++++++++ 11 files changed, 241 insertions(+) create mode 100644 src/ts/algorithms/math/find-divisors.ts create mode 100644 src/ts/algorithms/math/gcd.ts create mode 100644 src/ts/algorithms/math/greatest-difference.ts create mode 100644 src/ts/algorithms/math/lcm.ts create mode 100644 src/ts/algorithms/math/primality-test.ts create mode 100644 src/ts/algorithms/math/sieve-eratosthenes.ts create mode 100644 src/ts/algorithms/string/brute-force.ts create mode 100644 src/ts/algorithms/string/huffman.ts create mode 100644 src/ts/algorithms/string/knuth-morris-pratt.ts create mode 100644 src/ts/algorithms/string/longest-common-substring.ts create mode 100644 src/ts/algorithms/string/rabin-karp.ts diff --git a/src/ts/algorithms/math/find-divisors.ts b/src/ts/algorithms/math/find-divisors.ts new file mode 100644 index 00000000..1397d555 --- /dev/null +++ b/src/ts/algorithms/math/find-divisors.ts @@ -0,0 +1,18 @@ +export const findDivisors = (num: number) => { + const divisors = []; + + const sqrt = Math.floor(Math.sqrt(num)); + + for (let i = 1; i <= sqrt; i++) { + if (num % i === 0) { + divisors.push(i); + if (i !== sqrt) { + divisors.push(Math.floor(num / i)); + } + } + } + + divisors.sort((a, b) => a - b); + + return divisors; +}; diff --git a/src/ts/algorithms/math/gcd.ts b/src/ts/algorithms/math/gcd.ts new file mode 100644 index 00000000..35818deb --- /dev/null +++ b/src/ts/algorithms/math/gcd.ts @@ -0,0 +1,22 @@ +export const gcd = (num1: number, num2: number): number => { + if (num1 === 0 || num2 === 0) { + return 0; + } + if (num1 === num2) { + return num1; + } + if (num1 > num2) { + return gcd(num1 - num2, num2); + } + return gcd(num1, num2 - num1); +}; + +export const gcdArray = (num: number[]) => { + let result = num[0]; + + for (let i = 1; i < num.length; i++) { + result = gcd(num[i], result); + } + + return result; +}; diff --git a/src/ts/algorithms/math/greatest-difference.ts b/src/ts/algorithms/math/greatest-difference.ts new file mode 100644 index 00000000..a0412445 --- /dev/null +++ b/src/ts/algorithms/math/greatest-difference.ts @@ -0,0 +1,20 @@ +export const greatestDifference = (numbers: number[]) => { + let index = 0; + let largest = numbers[0]; + const length = numbers.length; + let number; + let smallest = numbers[0]; + + for (index; index < length; index++) { + number = numbers[index]; + + if (number > largest) { + largest = number; + } + if (number < smallest) { + smallest = number; + } + } + + return largest - smallest; +}; diff --git a/src/ts/algorithms/math/lcm.ts b/src/ts/algorithms/math/lcm.ts new file mode 100644 index 00000000..a4c4ac37 --- /dev/null +++ b/src/ts/algorithms/math/lcm.ts @@ -0,0 +1,20 @@ +import { gcd } from './gcd'; + +export const lcm = (num1: number, num2: number) => { + if (num1 === 0 || num2 === 0) { + return 0; + } + num1 = Math.abs(num1); + num2 = Math.abs(num2); + return (num1 * num2) / gcd(num1, num2); +}; + +export const lcmArray = (num: number[]) => { + let result = num[0]; + + for (let i = 1; i < num.length; i++) { + result = num[i] * result / gcd(num[i], result); + } + + return result; +}; diff --git a/src/ts/algorithms/math/primality-test.ts b/src/ts/algorithms/math/primality-test.ts new file mode 100644 index 00000000..c4ef2310 --- /dev/null +++ b/src/ts/algorithms/math/primality-test.ts @@ -0,0 +1,36 @@ +export const isPrime = (n: number) => { + if (n <= 1) { + return false; + } + + const sqrt = Math.floor(Math.sqrt(n)); + for (let i = 2; i < sqrt; i++) { + if (n % i === 0) { + return false; + } + } + + return true; +}; + +export const testPrime = (n: number) => { + if (n <= 1) { + return false; + } else { + if (n === 2 || n === 3) { + return true; + } else if (n % 2 === 0) { + return false; + } else { + const sqrt = Math.floor(Math.sqrt(n)); + for (let i = 3; i <= sqrt; i += 2) { + if (n % i === 0) { + return false; + } + } + } + } + return true; +}; + +const isPrime2 = (n: number) => ![...Array(n).keys()].slice(2).map(i => !(n % i)).includes(true) && ![0, 1].includes(n); diff --git a/src/ts/algorithms/math/sieve-eratosthenes.ts b/src/ts/algorithms/math/sieve-eratosthenes.ts new file mode 100644 index 00000000..1c2cb06d --- /dev/null +++ b/src/ts/algorithms/math/sieve-eratosthenes.ts @@ -0,0 +1,18 @@ +export const sieveOfEratosthenes = (n: number) => { + + const prime: boolean[] = []; + + for (let i = 0; i < n; i++) { + prime[i] = true; + } + + for (let p = 2; p * p <= n; p++) { + if (prime[p]) { + for (let i = p * 2; i <= n; i += p) { + prime[i] = false; + } + } + } + + return prime.filter(num => num === true); +}; diff --git a/src/ts/algorithms/string/brute-force.ts b/src/ts/algorithms/string/brute-force.ts new file mode 100644 index 00000000..1bf21f85 --- /dev/null +++ b/src/ts/algorithms/string/brute-force.ts @@ -0,0 +1,22 @@ +const stringSearch = (text: string, pattern: string) => { + const n = text.length; + const m = pattern.length; + + if (m > n) { + return -1; + } + + for (let i = 0; i < n; i++) { + let j = 0; + for (j = 0; j < m && (i + j) < n; j++) { + if (text.charAt(i + j) !== pattern.charAt(j)) { + break; + } + } + if (j === m) { + return i; + } + } + + return -1; +}; diff --git a/src/ts/algorithms/string/huffman.ts b/src/ts/algorithms/string/huffman.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/ts/algorithms/string/knuth-morris-pratt.ts b/src/ts/algorithms/string/knuth-morris-pratt.ts new file mode 100644 index 00000000..4b0f2759 --- /dev/null +++ b/src/ts/algorithms/string/knuth-morris-pratt.ts @@ -0,0 +1,46 @@ +const buildTable = (pattern: string) => { + const length = pattern.length; + const table = []; + let position = 2; + let cnd = 0; + + table[0] = -1; + table[1] = 0; + + while (position < length) { + if (pattern[position - 1] === pattern[cnd]) { + table[position++] = ++cnd; + } else if (cnd > 0) { + cnd = table[cnd]; + } else { + table[position++] = 0; + } + } + + return table; +}; + +const knuthMorrisPratt = (text: string, pattern: string) => { + const textLength = text.length; + const patternLength = pattern.length; + let m = 0; + let i = 0; + const table = buildTable(pattern); + + while (m + i < textLength) { + if (pattern[i] === text[m + i]) { + if (i === patternLength - 1) { + return m; + } + i++; + } else if (table[i] >= 0) { + i = table[i]; + m = m + i - table[i]; + } else { + i = 0; + m++; + } + } + + return textLength; +}; diff --git a/src/ts/algorithms/string/longest-common-substring.ts b/src/ts/algorithms/string/longest-common-substring.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/ts/algorithms/string/rabin-karp.ts b/src/ts/algorithms/string/rabin-karp.ts new file mode 100644 index 00000000..ab60fe3e --- /dev/null +++ b/src/ts/algorithms/string/rabin-karp.ts @@ -0,0 +1,39 @@ +const base = 997; + +const hash = (word: string) => { + let h = 0; + + for (let i = 0; i < word.length; i++) { + h += word.charCodeAt(i) * Math.pow(base, word.length - i - 1); + } + + return h; +}; + +const rabinKarp = (text: string, pattern: string) => { + if (pattern == null || pattern.length === 0) { + return 0; + } + + const hashPattern = hash(pattern); + let currentSubstring = text.substring(0, pattern.length); + let hashCurrentSubstring; + + for (let i = pattern.length; i <= text.length; i++) { + if (hashCurrentSubstring === undefined) { + hashCurrentSubstring = hash(currentSubstring); + } else { + hashCurrentSubstring -= currentSubstring.charCodeAt(0) * Math.pow(base, pattern.length - 1); + hashCurrentSubstring *= base; + hashCurrentSubstring += text.charCodeAt(i); + + currentSubstring = currentSubstring.substring(1) + text[i]; + } + + if (hashPattern === hashCurrentSubstring && pattern === currentSubstring) { + return i === pattern.length ? 0 : i - pattern.length + 1; + } + } + + return -1; +}; From ef79e854ff5022236f64d743db7827450edcd4d8 Mon Sep 17 00:00:00 2001 From: loiane Date: Mon, 12 Mar 2018 09:22:54 -0400 Subject: [PATCH 062/188] [String and Math Algorithms] --- src/ts/algorithms/math/primality-test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ts/algorithms/math/primality-test.ts b/src/ts/algorithms/math/primality-test.ts index c4ef2310..6ab95167 100644 --- a/src/ts/algorithms/math/primality-test.ts +++ b/src/ts/algorithms/math/primality-test.ts @@ -33,4 +33,4 @@ export const testPrime = (n: number) => { return true; }; -const isPrime2 = (n: number) => ![...Array(n).keys()].slice(2).map(i => !(n % i)).includes(true) && ![0, 1].includes(n); +export const isPrime2 = (n: number) => ![...Array(n).keys()].slice(2).map(i => !(n % i)).includes(true) && ![0, 1].includes(n); From 4f488c68b3e313d79fcd457ba3e2821ba54be45b Mon Sep 17 00:00:00 2001 From: loiane Date: Mon, 12 Mar 2018 09:34:32 -0400 Subject: [PATCH 063/188] Merge branch 'master' into third-edition # Conflicts: # .gitignore # chapter01/01-HelloWorld.js # chapter01/04-TruthyFalsy.js # chapter01/05-EqualsOperators.js # chapter01/06-ConditionalStatements.js # chapter01/14-ES6ParameterHandling.js # chapter02/01-Introduction.js # chapter02/02-CreatingAndInitialingArrays.js # chapter02/03-AddingRemovingElements.js # chapter02/04-TwoDimensionalMultiDimensional.js # chapter02/05-ArrayMethods.js # chapter03/03-BalancedSymbols.html # chapter03/04-DecimalToBinary.html # chapter03/04-DecimalToBinary.js # chapter03/05-TowerOfHanoi.html # chapter04/03-PriorityQueue.html # chapter04/04-HotPotato.html # chapter06/03-Operations.html # chapter07/02-UsingDictionaries.html # chapter07/03-HashTable.js # chapter07/04-UsingHash.html # chapter07/04-UsingHash.js # chapter07/06-UsingHashCollisionSeparateChaining.js # chapter07/08-UsingHashCollisionLinearProbing.html # chapter08/01-BinarySearchTree.js # chapter09/02-UsingGraphs.html # chapter09/02-UsingGraphs.js # chapter11/01-Recursion.html # chapter11/01-Recursion.js # chapter11/02-InfiniteRecursion.html # chapter11/02-InfiniteRecursion.js # chapter11/03-MinCoinChangeDP.html # chapter11/04-MinCoinChangeGreedy.html --- chapter01/01-HelloWorld.js | 8 - chapter01/04-TruthyFalsy.js | 23 --- chapter01/05-EqualsOperators.js | 36 ---- chapter01/06-ConditionalStatements.js | 51 ----- chapter01/14-ES6ParameterHandling.js | 37 ---- chapter02/01-Introduction.js | 12 -- chapter02/02-CreatingAndInitialingArrays.js | 34 ---- chapter02/03-AddingRemovingElements.js | 73 ------- .../04-TwoDimensionalMultiDimensional.js | 62 ------ chapter02/05-ArrayMethods.js | 113 ----------- chapter03/03-BalancedSymbols.html | 11 -- chapter03/04-DecimalToBinary.html | 11 -- chapter03/04-DecimalToBinary.js | 52 ----- chapter03/05-TowerOfHanoi.html | 11 -- chapter04/03-PriorityQueue.html | 10 - chapter04/04-HotPotato.html | 11 -- chapter06/03-Operations.html | 11 -- chapter07/02-UsingDictionaries.html | 11 -- chapter07/03-HashTable.js | 46 ----- chapter07/04-UsingHash.html | 11 -- chapter07/04-UsingHash.js | 29 --- .../06-UsingHashCollisionSeparateChaining.js | 40 ---- .../08-UsingHashCollisionLinearProbing.html | 11 -- chapter08/01-BinarySearchTree.js | 187 ------------------ chapter09/02-UsingGraphs.html | 14 -- chapter09/02-UsingGraphs.js | 97 --------- chapter11/01-Recursion.html | 10 - chapter11/01-Recursion.js | 25 --- chapter11/02-InfiniteRecursion.html | 10 - chapter11/02-InfiniteRecursion.js | 15 -- chapter11/03-MinCoinChangeDP.html | 10 - chapter11/04-MinCoinChangeGreedy.html | 10 - 32 files changed, 1092 deletions(-) delete mode 100755 chapter01/01-HelloWorld.js delete mode 100755 chapter01/04-TruthyFalsy.js delete mode 100755 chapter01/05-EqualsOperators.js delete mode 100755 chapter01/06-ConditionalStatements.js delete mode 100644 chapter01/14-ES6ParameterHandling.js delete mode 100755 chapter02/01-Introduction.js delete mode 100755 chapter02/02-CreatingAndInitialingArrays.js delete mode 100755 chapter02/03-AddingRemovingElements.js delete mode 100755 chapter02/04-TwoDimensionalMultiDimensional.js delete mode 100755 chapter02/05-ArrayMethods.js delete mode 100755 chapter03/03-BalancedSymbols.html delete mode 100755 chapter03/04-DecimalToBinary.html delete mode 100755 chapter03/04-DecimalToBinary.js delete mode 100755 chapter03/05-TowerOfHanoi.html delete mode 100755 chapter04/03-PriorityQueue.html delete mode 100755 chapter04/04-HotPotato.html delete mode 100755 chapter06/03-Operations.html delete mode 100755 chapter07/02-UsingDictionaries.html delete mode 100755 chapter07/03-HashTable.js delete mode 100755 chapter07/04-UsingHash.html delete mode 100755 chapter07/04-UsingHash.js delete mode 100755 chapter07/06-UsingHashCollisionSeparateChaining.js delete mode 100755 chapter07/08-UsingHashCollisionLinearProbing.html delete mode 100755 chapter08/01-BinarySearchTree.js delete mode 100755 chapter09/02-UsingGraphs.html delete mode 100755 chapter09/02-UsingGraphs.js delete mode 100755 chapter11/01-Recursion.html delete mode 100755 chapter11/01-Recursion.js delete mode 100755 chapter11/02-InfiniteRecursion.html delete mode 100755 chapter11/02-InfiniteRecursion.js delete mode 100755 chapter11/03-MinCoinChangeDP.html delete mode 100755 chapter11/04-MinCoinChangeGreedy.html diff --git a/chapter01/01-HelloWorld.js b/chapter01/01-HelloWorld.js deleted file mode 100755 index 89833849..00000000 --- a/chapter01/01-HelloWorld.js +++ /dev/null @@ -1,8 +0,0 @@ -function output(t) { - document.write('

' + t + '

'); - return; -} - -alert('Hello, World!'); -console.log('Hello, World!'); -output('Hello, World!'); \ No newline at end of file diff --git a/chapter01/04-TruthyFalsy.js b/chapter01/04-TruthyFalsy.js deleted file mode 100755 index d700cd2c..00000000 --- a/chapter01/04-TruthyFalsy.js +++ /dev/null @@ -1,23 +0,0 @@ -function testTruthy(val){ - return val ? console.log('truthy') : console.log('falsy'); -} - -testTruthy(true); //true -testTruthy(false); //false -testTruthy(new Boolean(false)); //true (object is always true) - -testTruthy(''); //false -testTruthy('Packt'); //true -testTruthy(new String('')); //true (object is always true) - -testTruthy(1); //true -testTruthy(-1); //true -testTruthy(NaN); //false -testTruthy(new Number(NaN)); //true (object is always true) - -testTruthy({}); //true (object is always true) - -var obj = {name:'John'}; -testTruthy(obj); //true -testTruthy(obj.name); //true -testTruthy(obj.age); //age (prop does not exist) \ No newline at end of file diff --git a/chapter01/05-EqualsOperators.js b/chapter01/05-EqualsOperators.js deleted file mode 100755 index 253c21b9..00000000 --- a/chapter01/05-EqualsOperators.js +++ /dev/null @@ -1,36 +0,0 @@ -//Packt == true - -console.log('packt' ? true : false); -//outputs true - -console.log('packt' == true); -//1 - converts Boolean using toNumber -//'packt' == 1 -//2 - converts String using toNumber -//NaN == 1 -//outputs false - -console.log('packt' == false); -//1 - converts Boolean using toNumber -//'packt' == 0 -//2 - converts String using toNumber -//NaN == 0 -//outputs false - -console.log([0] == true); -//1 - converts Boolean using toNumber -//[0] == 1 -//2 - converts Object using toPrimitive -//2.1 - [0].valueOf() is not primitive -//2.2 - [0].toString is 0 -//0 == 1 -//outputs false - -//******************************* === -console.log('packt' === true); //false - -console.log('packt' === 'packt'); //true - -var person1 = {name:'John'}; -var person2 = {name:'John'}; -console.log(person1 === person2); //false, different objects \ No newline at end of file diff --git a/chapter01/06-ConditionalStatements.js b/chapter01/06-ConditionalStatements.js deleted file mode 100755 index c7256c80..00000000 --- a/chapter01/06-ConditionalStatements.js +++ /dev/null @@ -1,51 +0,0 @@ -/* Example 01 - if */ -var num = 1; -if (num === 1) { - console.log("num is equal to 1"); -} - -/* Example 02 - if-else */ -var num = 0; -if (num === 1) { - console.log("num is equal to 1"); -} else { - console.log("num is not equal to 1, the value of num is " + num); -} - -/* Example 03 - if-else-if-else... */ -var month = 5; -if (month === 1) { - console.log("January"); -} else if (month === 2){ - console.log("February"); -} else if (month === 3){ - console.log("March"); -} else { - console.log("Month is not January, February or March"); -} - -/* Example 04 - switch */ -var month = 5; -switch(month) { - case 1: - console.log("January"); - break; - case 2: - console.log("February"); - break; - case 3: - console.log("March"); - break; - default: - console.log("Month is not January, February or March"); -} - -/* Example 05 - ternary operator - if..else */ -if (num === 1){ - num--; -} else { - num++; -} - -//is the same as -(num === 1) ? num-- : num++; \ No newline at end of file diff --git a/chapter01/14-ES6ParameterHandling.js b/chapter01/14-ES6ParameterHandling.js deleted file mode 100644 index af23585c..00000000 --- a/chapter01/14-ES6ParameterHandling.js +++ /dev/null @@ -1,37 +0,0 @@ -//******* EcmaScript 6: Default Parameter Values -function sum (x = 1, y = 2, z = 3) { - return x + y + z -}; -console.log(sum(4,2)); //outpus 9 - -//function above is the same as -function sum2 (x, y, z) { - if (x === undefined) - x = 1; - if (y === undefined) - y = 2; - if (z === undefined) - z = 3; - return x + y + z; -}; -console.log(sum2(4,2)); //outpus 9 - -//******* EcmaScript 6: spread operator ('...') -var params = [3, 4, 5]; -console.log(sum(...params)); - -var numbers = [1, 2, ...params]; //pushing values into array -console.log(numbers); - -//******* EcmaScript 6: rest parameter ('...') -function restParamaterFunction (x, y, ...a) { - return (x + y) * a.length; -} -console.log(restParamaterFunction(1, 2, "hello", true, 7)); // outputs 9; - -//code above is the same as ES5: -function restParamaterFunction2 (x, y) { - var a = Array.prototype.slice.call(arguments, 2); - return (x + y) * a.length; -}; -console.log(restParamaterFunction2(1, 2, "hello", true, 7)); diff --git a/chapter02/01-Introduction.js b/chapter02/01-Introduction.js deleted file mode 100755 index 93d80a8d..00000000 --- a/chapter02/01-Introduction.js +++ /dev/null @@ -1,12 +0,0 @@ -var averageTempJan = 31.9; -var averageTempFeb = 35.3; -var averageTempMar = 42.4; -var averageTempApr = 52; -var averageTempMay = 60.8; - -var averageTemp = []; -averageTemp[0] = 31.9; -averageTemp[1] = 35.3; -averageTemp[2] = 42.4; -averageTemp[3] = 52; -averageTemp[4] = 60.8; diff --git a/chapter02/02-CreatingAndInitialingArrays.js b/chapter02/02-CreatingAndInitialingArrays.js deleted file mode 100755 index 1b20431e..00000000 --- a/chapter02/02-CreatingAndInitialingArrays.js +++ /dev/null @@ -1,34 +0,0 @@ -var daysOfWeek = []; - -var daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; - -var daysOfWeek = new Array(); //{1} - -var daysOfWeek = new Array(7); //{2} - -console.log(daysOfWeek.length); - -var daysOfWeek = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); //{3} - -for (var i=0; i=0; i--){ - numbers[i] = numbers[i-1]; -} - -numbers[0] = -1; - -//printArray(numbers); - -//using method unshift -numbers.unshift(-2); - -//printArray(numbers); - -numbers.unshift(-4, -3); - -//printArray(numbers); - -//**** Removing elements - -numbers.pop(); - -//remove first position manually -/*for (var i=0; i b) { - return 1; - } - // a must be equal to b - return 0; -} - -console.log(numbers.sort(compare)); - -//Sorting objects - -var friends = [ - {name: 'John', age: 30}, - {name: 'Ana', age: 20}, - {name: 'Chris', age: 25} -]; - -function comparePerson(a, b){ - if (a.age < b.age){ - return -1 - } - if (a.age > b.age){ - return 1 - } - return 0; -} - -console.log(friends.sort(comparePerson)); - -var names =['Ana', 'ana', 'john', 'John']; -console.log(names.sort()); - -console.log(names.sort(function(a, b){ - if (a.toLowerCase() < b.toLowerCase()){ - return -1 - } - if (a.toLowerCase() > b.toLowerCase()){ - return 1 - } - return 0; -})); - -var names2 = ['Maève', 'Maeve']; -console.log(names2.sort(function(a, b){ - return a.localeCompare(b); -})); - -//*** toString -console.log(numbers.toString()); - -console.log(numbers.indexOf(10)); -console.log(numbers.indexOf(100)); - -numbers.push(10); -console.log(numbers.lastIndexOf(10)); -console.log(numbers.lastIndexOf(100)); - -var numbersString = numbers.join('-'); -console.log(numbersString); \ No newline at end of file diff --git a/chapter03/03-BalancedSymbols.html b/chapter03/03-BalancedSymbols.html deleted file mode 100755 index d347fe2e..00000000 --- a/chapter03/03-BalancedSymbols.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter03/04-DecimalToBinary.html b/chapter03/04-DecimalToBinary.html deleted file mode 100755 index a178b773..00000000 --- a/chapter03/04-DecimalToBinary.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter03/04-DecimalToBinary.js b/chapter03/04-DecimalToBinary.js deleted file mode 100755 index d4695b51..00000000 --- a/chapter03/04-DecimalToBinary.js +++ /dev/null @@ -1,52 +0,0 @@ -//233 == 11101001 -//2x(10x10) + 3x(10) + 3x(1) - -function divideBy2(decNumber){ - - var remStack = new Stack(), - rem, - binaryString = ''; - - while (decNumber > 0){ - rem = Math.floor(decNumber % 2); - remStack.push(rem); - decNumber = Math.floor(decNumber / 2); - } - - while (!remStack.isEmpty()){ - binaryString += remStack.pop().toString(); - } - - return binaryString; -} - -console.log(divideBy2(233)); -console.log(divideBy2(10)); -console.log(divideBy2(1000)); - -/* - The folow algorithm converts from base 10 to any base - */ -function baseConverter(decNumber, base){ - - var remStack = new Stack(), - rem, - baseString = '', - digits = '0123456789ABCDEF'; - - while (decNumber > 0){ - rem = Math.floor(decNumber % base); - remStack.push(rem); - decNumber = Math.floor(decNumber / base); - } - - while (!remStack.isEmpty()){ - baseString += digits[remStack.pop()]; - } - - return baseString; -} - -console.log(baseConverter(100345, 2)); -console.log(baseConverter(100345, 8)); -console.log(baseConverter(100345, 16)); \ No newline at end of file diff --git a/chapter03/05-TowerOfHanoi.html b/chapter03/05-TowerOfHanoi.html deleted file mode 100755 index 8e11f147..00000000 --- a/chapter03/05-TowerOfHanoi.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter04/03-PriorityQueue.html b/chapter04/03-PriorityQueue.html deleted file mode 100755 index 924bf7c4..00000000 --- a/chapter04/03-PriorityQueue.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter04/04-HotPotato.html b/chapter04/04-HotPotato.html deleted file mode 100755 index 1efd71c5..00000000 --- a/chapter04/04-HotPotato.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter06/03-Operations.html b/chapter06/03-Operations.html deleted file mode 100755 index ff01c7ae..00000000 --- a/chapter06/03-Operations.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter07/02-UsingDictionaries.html b/chapter07/02-UsingDictionaries.html deleted file mode 100755 index f0f8e0eb..00000000 --- a/chapter07/02-UsingDictionaries.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter07/03-HashTable.js b/chapter07/03-HashTable.js deleted file mode 100755 index c72783aa..00000000 --- a/chapter07/03-HashTable.js +++ /dev/null @@ -1,46 +0,0 @@ -function HashTable() { - - var table = []; - - var loseloseHashCode = function (key) { - var hash = 0; - for (var i = 0; i < key.length; i++) { - hash += key.charCodeAt(i); - } - return hash % 37; - }; - - var djb2HashCode = function (key) { - var hash = 5381; - for (var i = 0; i < key.length; i++) { - hash = hash * 33 + key.charCodeAt(i); - } - return hash % 1013; - }; - - var hashCode = function (key) { - return loseloseHashCode(key); - }; - - this.put = function (key, value) { - var position = hashCode(key); - console.log(position + ' - ' + key); - table[position] = value; - }; - - this.get = function (key) { - return table[hashCode(key)]; - }; - - this.remove = function(key){ - table[hashCode(key)] = undefined; - }; - - this.print = function () { - for (var i = 0; i < table.length; ++i) { - if (table[i] !== undefined) { - console.log(i + ": " + table[i]); - } - } - }; -} \ No newline at end of file diff --git a/chapter07/04-UsingHash.html b/chapter07/04-UsingHash.html deleted file mode 100755 index 104be603..00000000 --- a/chapter07/04-UsingHash.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter07/04-UsingHash.js b/chapter07/04-UsingHash.js deleted file mode 100755 index d0735eeb..00000000 --- a/chapter07/04-UsingHash.js +++ /dev/null @@ -1,29 +0,0 @@ -var hash = new HashTable(); - -hash.put('Gandalf', 'gandalf@email.com'); -hash.put('John', 'johnsnow@email.com'); -hash.put('Tyrion', 'tyrion@email.com'); -hash.put('Aaron', 'aaron@email.com'); -hash.put('Donnie', 'donnie@email.com'); -hash.put('Ana', 'ana@email.com'); -hash.put('Jonathan', 'jonathan@email.com'); -hash.put('Jamie', 'jamie@email.com'); -hash.put('Sue', 'sue@email.com'); -hash.put('Mindy', 'mindy@email.com'); -hash.put('Paul', 'paul@email.com'); -hash.put('Nathan', 'nathan@email.com'); - -console.log('**** Printing Hash **** '); - -hash.print(); - -console.log('**** Get **** '); - -console.log(hash.get('Gandalf')); -console.log(hash.get('Loiane')); - -console.log('**** Remove **** '); - -hash.remove('Gandalf'); -console.log(hash.get('Gandalf')); -hash.print(); \ No newline at end of file diff --git a/chapter07/06-UsingHashCollisionSeparateChaining.js b/chapter07/06-UsingHashCollisionSeparateChaining.js deleted file mode 100755 index 2a0d3c37..00000000 --- a/chapter07/06-UsingHashCollisionSeparateChaining.js +++ /dev/null @@ -1,40 +0,0 @@ -var hashTableSeparateChaining = new HashTableSeparateChaining(); - -hashTableSeparateChaining.put('Gandalf', 'gandalf@email.com'); -hashTableSeparateChaining.put('John', 'johnsnow@email.com'); -hashTableSeparateChaining.put('Tyrion', 'tyrion@email.com'); -hashTableSeparateChaining.put('Aaron', 'aaron@email.com'); -hashTableSeparateChaining.put('Donnie', 'donnie@email.com'); -hashTableSeparateChaining.put('Ana', 'ana@email.com'); -hashTableSeparateChaining.put('Jonathan', 'jonathan@email.com'); -hashTableSeparateChaining.put('Jamie', 'jamie@email.com'); -hashTableSeparateChaining.put('Sue', 'sue@email.com'); -hashTableSeparateChaining.put('Mindy', 'mindy@email.com'); -hashTableSeparateChaining.put('Paul', 'paul@email.com'); -hashTableSeparateChaining.put('Nathan', 'nathan@email.com'); - -console.log('**** Printing Hash **** '); - -hashTableSeparateChaining.print(); - -console.log('**** Get **** '); - -console.log(hashTableSeparateChaining.get('Jamie')); -console.log(hashTableSeparateChaining.get('Sue')); -console.log(hashTableSeparateChaining.get('Jonathan')); -console.log(hashTableSeparateChaining.get('Loiane')); - -console.log('**** Remove **** '); - -console.log(hashTableSeparateChaining.remove('Gandalf')); -console.log(hashTableSeparateChaining.get('Gandalf')); -hashTableSeparateChaining.print(); - -console.log(hashTableSeparateChaining.remove('Sue')); -hashTableSeparateChaining.print(); - -console.log(hashTableSeparateChaining.remove('Jamie')); -hashTableSeparateChaining.print(); - -console.log(hashTableSeparateChaining.remove('Donnie')); -hashTableSeparateChaining.print(); \ No newline at end of file diff --git a/chapter07/08-UsingHashCollisionLinearProbing.html b/chapter07/08-UsingHashCollisionLinearProbing.html deleted file mode 100755 index f5fd9ad5..00000000 --- a/chapter07/08-UsingHashCollisionLinearProbing.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/chapter08/01-BinarySearchTree.js b/chapter08/01-BinarySearchTree.js deleted file mode 100755 index ae813fce..00000000 --- a/chapter08/01-BinarySearchTree.js +++ /dev/null @@ -1,187 +0,0 @@ -function BinarySearchTree() { - - var Node = function(key){ - this.key = key; - this.left = null; - this.right = null; - }; - - var root = null; - - this.insert = function(key){ - - var newNode = new Node(key); - - //special case - first element - if (root === null){ - root = newNode; - } else { - insertNode(root,newNode); - } - }; - - var insertNode = function(node, newNode){ - if (newNode.key < node.key){ - if (node.left === null){ - node.left = newNode; - } else { - insertNode(node.left, newNode); - } - } else { - if (node.right === null){ - node.right = newNode; - } else { - insertNode(node.right, newNode); - } - } - }; - - this.getRoot = function(){ - return root; - }; - - this.search = function(key){ - - return searchNode(root, key); - }; - - var searchNode = function(node, key){ - - if (node === null){ - return false; - } - - if (key < node.key){ - return searchNode(node.left, key); - - } else if (key > node.key){ - return searchNode(node.right, key); - - } else { //element is equal to node.item - return true; - } - }; - - this.inOrderTraverse = function(callback){ - inOrderTraverseNode(root, callback); - }; - - var inOrderTraverseNode = function (node, callback) { - if (node !== null) { - inOrderTraverseNode(node.left, callback); - callback(node.key); - inOrderTraverseNode(node.right, callback); - } - }; - - this.preOrderTraverse = function(callback){ - preOrderTraverseNode(root, callback); - }; - - var preOrderTraverseNode = function (node, callback) { - if (node !== null) { - callback(node.key); - preOrderTraverseNode(node.left, callback); - preOrderTraverseNode(node.right, callback); - } - }; - - this.postOrderTraverse = function(callback){ - postOrderTraverseNode(root, callback); - }; - - var postOrderTraverseNode = function (node, callback) { - if (node !== null) { - postOrderTraverseNode(node.left, callback); - postOrderTraverseNode(node.right, callback); - callback(node.key); - } - }; - - this.min = function() { - return minNode(root); - }; - - var minNode = function (node) { - if (node){ - while (node && node.left !== null) { - node = node.left; - } - - return node.key; - } - return null; - }; - - this.max = function() { - return maxNode(root); - }; - - var maxNode = function (node) { - if (node){ - while (node && node.right !== null) { - node = node.right; - } - - return node.key; - } - return null; - }; - - this.remove = function(element){ - root = removeNode(root, element); - }; - - var findMinNode = function(node){ - while (node && node.left !== null) { - node = node.left; - } - - return node; - }; - - var removeNode = function(node, element){ - - if (node === null){ - return null; - } - - if (element < node.key){ - node.left = removeNode(node.left, element); - return node; - - } else if (element > node.key){ - node.right = removeNode(node.right, element); - return node; - - } else { //element is equal to node.item - - //handle 3 special conditions - //1 - a leaf node - //2 - a node with only 1 child - //3 - a node with 2 children - - //case 1 - if (node.left === null && node.right === null){ - node = null; - return node; - } - - //case 2 - if (node.left === null){ - node = node.right; - return node; - - } else if (node.right === null){ - node = node.left; - return node; - } - - //case 3 - var aux = findMinNode(node.right); - node.key = aux.key; - node.right = removeNode(node.right, aux.key); - return node; - } - }; -} \ No newline at end of file diff --git a/chapter09/02-UsingGraphs.html b/chapter09/02-UsingGraphs.html deleted file mode 100755 index 75722d85..00000000 --- a/chapter09/02-UsingGraphs.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/chapter09/02-UsingGraphs.js b/chapter09/02-UsingGraphs.js deleted file mode 100755 index 3f143525..00000000 --- a/chapter09/02-UsingGraphs.js +++ /dev/null @@ -1,97 +0,0 @@ -var graph = new Graph(); - -var myVertices = ['A','B','C','D','E','F','G','H','I']; - -for (var i=0; i max){ - max = fTimes[myVertices[i]]; - maxName = myVertices[i]; - } - } - s += ' - ' + maxName; - delete fTimes[maxName]; -} -console.log(s); diff --git a/chapter11/01-Recursion.html b/chapter11/01-Recursion.html deleted file mode 100755 index 5961583b..00000000 --- a/chapter11/01-Recursion.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter11/01-Recursion.js b/chapter11/01-Recursion.js deleted file mode 100755 index bd16253d..00000000 --- a/chapter11/01-Recursion.js +++ /dev/null @@ -1,25 +0,0 @@ -//Recursive solution - DP -function fibonacci(num){ - if (num === 1 || num === 2){ - return 1; - } - if (num > 2){ - return fibonacci(num - 1) + fibonacci(num - 2); - } -} - -//Non Recursive solution -function fib(num){ - var n1 = 1, - n2 = 1, - n = 1; - for (var i = 3; i<=num; i++){ - n = n1 + n2; - n1 = n2; - n2 = n; - } - return n; -} - -console.log(fibonacci(6)); -console.log(fib(6)); \ No newline at end of file diff --git a/chapter11/02-InfiniteRecursion.html b/chapter11/02-InfiniteRecursion.html deleted file mode 100755 index e51a8132..00000000 --- a/chapter11/02-InfiniteRecursion.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter11/02-InfiniteRecursion.js b/chapter11/02-InfiniteRecursion.js deleted file mode 100755 index 2ca26d33..00000000 --- a/chapter11/02-InfiniteRecursion.js +++ /dev/null @@ -1,15 +0,0 @@ -var i = 0; - -function recursiveFn () { - i++; - recursiveFn(); -} - -try { - recursiveFn(); -} catch (ex) { - alert('i = ' + i + ' error: ' + ex); -} - -//chrome 37 = 20955 RangeError: Maximum call stack size exceeded -//ff 27 = 343429 InternalError: too much recursion \ No newline at end of file diff --git a/chapter11/03-MinCoinChangeDP.html b/chapter11/03-MinCoinChangeDP.html deleted file mode 100755 index c4171470..00000000 --- a/chapter11/03-MinCoinChangeDP.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/chapter11/04-MinCoinChangeGreedy.html b/chapter11/04-MinCoinChangeGreedy.html deleted file mode 100755 index cc01ddc2..00000000 --- a/chapter11/04-MinCoinChangeGreedy.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file From 0cf671a2cd2f7da206213bb87c479e5c5136d07b Mon Sep 17 00:00:00 2001 From: loiane Date: Fri, 16 Mar 2018 14:08:18 -0400 Subject: [PATCH 064/188] [Dictionaries and Hashes] --- examples/chapter07/02-HashTable.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/chapter07/02-HashTable.js b/examples/chapter07/02-HashTable.js index 0b99ef3b..fbee2022 100755 --- a/examples/chapter07/02-HashTable.js +++ b/examples/chapter07/02-HashTable.js @@ -2,6 +2,12 @@ const { HashTable } = PacktDataStructuresAlgorithms; const hash = new HashTable(); +console.log(hash.hashCode('Gandalf') + ' - Gandalf'); +console.log(hash.hashCode('John') + ' - John'); +console.log(hash.hashCode('Tyrion') + ' - Tyrion'); + +console.log(' '); + console.log(hash.hashCode('Ygritte') + ' - Ygritte'); console.log(hash.hashCode('Jonathan') + ' - Jonathan'); console.log(hash.hashCode('Jamie') + ' - Jamie'); From 11d77eee9a6c535635d25501ec796bd3322619b0 Mon Sep 17 00:00:00 2001 From: loiane Date: Fri, 16 Mar 2018 15:38:04 -0400 Subject: [PATCH 065/188] updated readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 00ae7465..93dad51f 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ Book link - first edition: Book link - second edition: - [Packt](https://www.packtpub.com/web-development/learning-javascript-data-structures-and-algorithms-second-edition) - [Amazon](http://amzn.to/1TSkcA1) + - [Chinese version](http://www.ituring.com.cn/book/2029) - [Brazilian Portuguese version](https://novatec.com.br/livros/estruturas-de-dados-algoritmos-em-javascript/) Book link - third edition: From 3ae913053cd1e5e6b760e7592c23561955c3bbdb Mon Sep 17 00:00:00 2001 From: loiane Date: Fri, 16 Mar 2018 15:54:52 -0400 Subject: [PATCH 066/188] updated package versions --- package.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 28aa6962..88846051 100644 --- a/package.json +++ b/package.json @@ -53,28 +53,28 @@ "all": true }, "devDependencies": { - "@types/chai": "^4.0.10", - "@types/mocha": "^2.2.45", + "@types/chai": "^4.1.2", + "@types/mocha": "^2.2.48", "babel-cli": "^6.26.0", "babel-core": "^6.26.0", - "babel-eslint": "^8.1.0", - "babel-loader": "^7.1.2", + "babel-eslint": "^8.2.2", + "babel-loader": "^7.1.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-es2015-modules-umd": "^6.24.1", "babel-preset-env": "^1.6.1", "chai": "^4.1.2", "codecov": "^3.0.0", - "eslint": "^4.14.0", + "eslint": "^4.18.2", "eslint-config-airbnb-base": "^12.1.0", - "eslint-plugin-import": "^2.8.0", + "eslint-plugin-import": "^2.9.0", "istanbul": "^v1.1.0-alpha.1", - "mocha": "^4.0.1", - "mochawesome": "^3.0.0", - "nyc": "^11.4.1", - "ts-node": "^4.1.0", - "tslint": "^5.8.0", - "typescript": "^2.6.2", - "webpack": "^3.10.0", - "yargs": "^10.0.3" + "mocha": "^5.0.4", + "mochawesome": "^3.0.2", + "nyc": "^11.6.0", + "ts-node": "^5.0.1", + "tslint": "^5.9.1", + "typescript": "^2.7.2", + "webpack": "^4.1.1", + "yargs": "^11.0.0" } } From 0848b4f38e6f913a7c346970e7c8bdcadfe6d358 Mon Sep 17 00:00:00 2001 From: loiane Date: Fri, 30 Mar 2018 19:59:49 -0400 Subject: [PATCH 067/188] [Heap] --- examples/PacktDataStructuresAlgorithms.min.js | 3 ++- .../PacktDataStructuresAlgorithms.min.js.map | 1 + examples/chapter10/01-UsingMinHeap.html | 11 ++++++++ examples/chapter10/01-UsingMinHeap.js | 25 +++++++++++++++++ examples/chapter10/02-UsingMaxHeap.html | 11 ++++++++ examples/chapter10/02-UsingMaxHeap.js | 27 +++++++++++++++++++ examples/chapter10/03-HeapSort.html | 11 ++++++++ examples/chapter10/03-HeapSort.js | 7 +++++ examples/index.html | 13 +++++++++ package.json | 1 + src/js/data-structures/heap.js | 22 ++++++++++----- src/ts/data-structures/heap.ts | 4 +++ test/ts/data-structures/heap.spec.ts | 23 +++++++++++++--- webpack.config.js | 16 ++++++++--- 14 files changed, 161 insertions(+), 14 deletions(-) create mode 100644 examples/PacktDataStructuresAlgorithms.min.js.map create mode 100644 examples/chapter10/01-UsingMinHeap.html create mode 100644 examples/chapter10/01-UsingMinHeap.js create mode 100644 examples/chapter10/02-UsingMaxHeap.html create mode 100644 examples/chapter10/02-UsingMaxHeap.js create mode 100644 examples/chapter10/03-HeapSort.html create mode 100644 examples/chapter10/03-HeapSort.js diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index b06c53f5..d7895654 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=14)}([function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t,n){var r=n(e,t);return r===l.LESS_THAN||r===l.EQUALS}function n(e,t,n){var r=n(e,t);return r===l.BIGGER_THAN||r===l.EQUALS}function r(e,t){return e===t?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;i(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return o(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)r=this.tail,r.next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;i(this,e),this.compareFn=t,this.root=null}return o(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}function r(e,t,i,o){var u=void 0;return e.length>1&&(u=n(e,t,i,o),t1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return r(e,0,e.length-1,n)}Object.defineProperty(e,"__esModule",{value:!0}),e.quickSort=i})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(15),n(3),n(16),n(17),n(18),n(4),n(7),n(19),n(20),n(1),n(8),n(21),n(22),n(23),n(24),n(9),n(25),n(26),n(27),n(28),n(30),n(31),n(10),n(32),n(53),n(33),n(34),n(35),n(36),n(37),n(38),n(39),n(40),n(41),n(42),n(43),n(44),n(45),n(12),n(46),n(13),n(47),n(48),n(49),n(50),n(51),n(52),n(6),n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i,o,u,a,f,l,s,c,h,p,v,d,y,b,g,m,k,_,O,E,S,j,P,w,x,C,T,N,L,A,M,H,F,B,I,D,R,G,z,q,V,U,Y,W,K,X){"use strict";function Q(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(e,"__esModule",{value:!0}),e.findMinValue=e.findMaxValue=e.sequentialSearch=e.interpolationSearch=e.binarySearch=e.shellSort=e.selectionSort=e.radixSort=e.quickSort=e.mergeSort=e.insertionSort=e.countingSort=e.bucketSort=e.modifiedBubbleSort=e.bubbleSort=e.shuffle=e.kruskal=e.prim=e.floydWarshall=e.dijkstra=e.DFS=e.depthFirstSearch=e.BFS=e.breadthFirstSearch=e.Graph=e.heapSort=e.MaxHeap=e.MinHeap=e.AVLTree=e.BinarySearchTree=e.fibonacciMemoization=e.fibonacciIterative=e.fibonacci=e.factorial=e.factorialIterative=e.HashTableLinearProbingLazy=e.HashTableLinearProbing=e.HashTableSeparateChaining=e.HashTable=e.Dictionary=e.Set=e.StackLinkedList=e.SortedLinkedList=e.CircularLinkedList=e.DoublyLinkedList=e.LinkedList=e.palindromeChecker=e.hotPotato=e.Deque=e.Queue=e.parenthesesChecker=e.decimalToBinary=e.baseConverter=e.hanoiStack=e.hanoi=e.Stack=e.StackArray=e.util=void 0,Object.defineProperty(e,"StackArray",{enumerable:!0,get:function(){return Q(t).default}}),Object.defineProperty(e,"Stack",{enumerable:!0,get:function(){return Q(n).default}}),Object.defineProperty(e,"hanoi",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"hanoiStack",{enumerable:!0,get:function(){return Q(r).default}}),Object.defineProperty(e,"baseConverter",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"decimalToBinary",{enumerable:!0,get:function(){return Q(i).default}}),Object.defineProperty(e,"parenthesesChecker",{enumerable:!0,get:function(){return Q(o).default}}),Object.defineProperty(e,"Queue",{enumerable:!0,get:function(){return Q(u).default}}),Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return Q(a).default}}),Object.defineProperty(e,"hotPotato",{enumerable:!0,get:function(){return Q(f).default}}),Object.defineProperty(e,"palindromeChecker",{enumerable:!0,get:function(){return Q(l).default}}),Object.defineProperty(e,"LinkedList",{enumerable:!0,get:function(){return Q(s).default}}),Object.defineProperty(e,"DoublyLinkedList",{enumerable:!0,get:function(){return Q(c).default}}),Object.defineProperty(e,"CircularLinkedList",{enumerable:!0,get:function(){return Q(h).default}}),Object.defineProperty(e,"SortedLinkedList",{enumerable:!0,get:function(){return Q(p).default}}),Object.defineProperty(e,"StackLinkedList",{enumerable:!0,get:function(){return Q(v).default}}),Object.defineProperty(e,"Set",{enumerable:!0,get:function(){return Q(d).default}}),Object.defineProperty(e,"Dictionary",{enumerable:!0,get:function(){return Q(y).default}}),Object.defineProperty(e,"HashTable",{enumerable:!0,get:function(){return Q(b).default}}),Object.defineProperty(e,"HashTableSeparateChaining",{enumerable:!0,get:function(){return Q(g).default}}),Object.defineProperty(e,"HashTableLinearProbing",{enumerable:!0,get:function(){return Q(m).default}}),Object.defineProperty(e,"HashTableLinearProbingLazy",{enumerable:!0,get:function(){return Q(k).default}}),Object.defineProperty(e,"factorialIterative",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"factorial",{enumerable:!0,get:function(){return Q(_).default}}),Object.defineProperty(e,"fibonacci",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciIterative",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"fibonacciMemoization",{enumerable:!0,get:function(){return Q(O).default}}),Object.defineProperty(e,"BinarySearchTree",{enumerable:!0,get:function(){return Q(E).default}}),Object.defineProperty(e,"AVLTree",{enumerable:!0,get:function(){return Q(S).default}}),Object.defineProperty(e,"MinHeap",{enumerable:!0,get:function(){return j.MinHeap}}),Object.defineProperty(e,"MaxHeap",{enumerable:!0,get:function(){return j.MaxHeap}}),Object.defineProperty(e,"heapSort",{enumerable:!0,get:function(){return Q(P).default}}),Object.defineProperty(e,"Graph",{enumerable:!0,get:function(){return Q(w).default}}),Object.defineProperty(e,"breadthFirstSearch",{enumerable:!0,get:function(){return x.breadthFirstSearch}}),Object.defineProperty(e,"BFS",{enumerable:!0,get:function(){return x.BFS}}),Object.defineProperty(e,"depthFirstSearch",{enumerable:!0,get:function(){return C.depthFirstSearch}}),Object.defineProperty(e,"DFS",{enumerable:!0,get:function(){return C.DFS}}),Object.defineProperty(e,"dijkstra",{enumerable:!0,get:function(){return T.dijkstra}}),Object.defineProperty(e,"floydWarshall",{enumerable:!0,get:function(){return N.floydWarshall}}),Object.defineProperty(e,"prim",{enumerable:!0,get:function(){return L.prim}}),Object.defineProperty(e,"kruskal",{enumerable:!0,get:function(){return A.kruskal}}),Object.defineProperty(e,"shuffle",{enumerable:!0,get:function(){return M.shuffle}}),Object.defineProperty(e,"bubbleSort",{enumerable:!0,get:function(){return H.bubbleSort}}),Object.defineProperty(e,"modifiedBubbleSort",{enumerable:!0,get:function(){return F.modifiedBubbleSort}}),Object.defineProperty(e,"bucketSort",{enumerable:!0,get:function(){return B.bucketSort}}),Object.defineProperty(e,"countingSort",{enumerable:!0,get:function(){return I.countingSort}}),Object.defineProperty(e,"insertionSort",{enumerable:!0,get:function(){return D.insertionSort}}),Object.defineProperty(e,"mergeSort",{enumerable:!0,get:function(){return R.mergeSort}}),Object.defineProperty(e,"quickSort",{enumerable:!0,get:function(){return G.quickSort}}),Object.defineProperty(e,"radixSort",{enumerable:!0,get:function(){return z.radixSort}}),Object.defineProperty(e,"selectionSort",{enumerable:!0,get:function(){return q.selectionSort}}),Object.defineProperty(e,"shellSort",{enumerable:!0,get:function(){return V.shellSort}}),Object.defineProperty(e,"binarySearch",{enumerable:!0,get:function(){return U.binarySearch}}),Object.defineProperty(e,"interpolationSearch",{enumerable:!0,get:function(){return Y.interpolationSearch}}),Object.defineProperty(e,"sequentialSearch",{enumerable:!0,get:function(){return W.sequentialSearch}}),Object.defineProperty(e,"findMaxValue",{enumerable:!0,get:function(){return K.findMaxValue}}),Object.defineProperty(e,"findMinValue",{enumerable:!0,get:function(){return K.findMinValue}});var J=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(X);e.util=J})},function(e,t,n){var r,i,o;!function(n,u){i=[e,t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n7&&void 0!==arguments[7]?arguments[7]:[];if(e<=0)return f;if(1===e){i.push(t.pop());var l={};l[o]=t.toString(),l[u]=r.toString(),l[a]=i.toString(),f.push(l)}else{n(e-1,t,i,r,o,a,u,f),i.push(t.pop());var s={};s[o]=t.toString(),s[u]=r.toString(),s[a]=i.toString(),f.push(s),n(e-1,r,t,i,u,o,a,f)}return f}function r(e){for(var t=new o.default,r=new o.default,i=new o.default,u=e;u>0;u--)t.push(u);return n(e,t,i,r,"source","helper","dest")}function i(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return e<=0?o:(1===e?o.push([t,r]):(i(e-1,t,r,n,o),o.push([t,r]),i(e-1,n,t,r,o)),o)}Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=r,e.hanoi=i;var o=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new i.default,n=e,r=void 0,o="";n>0;)r=Math.floor(n%2),t.push(r),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o}function r(e,t){var n=new i.default,r=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;r>0;)o=Math.floor(r%t),n.push(o),r=Math.floor(r/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u}Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=n,e.baseConverter=r;var i=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(3)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){for(var t=new r.default,n="([{",i=")]}",o=!0,u=0,a=void 0,f=void 0;u=0?t.push(a):t.isEmpty()?o=!1:(f=t.pop(),n.indexOf(f)!==i.indexOf(a)&&(o=!1)),u++;return!(!o||!t.isEmpty())}Object.defineProperty(e,"__esModule",{value:!0}),e.parenthesesChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(4)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i}Object.defineProperty(e,"__esModule",{value:!0}),e.palindromeChecker=n;var r=function(e){return e&&e.__esModule?e:{default:e}}(t)})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(5)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return o(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),l(t,[{key:"push",value:function(e){var t=new i.Node(e),n=void 0;null==this.head?this.head=t:(n=this.getElementAt(this.size()-1),n.next=t),t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;i(this,t);var u=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.equalsFn=e,u.compareFn=r,u}return u(t,e),f(t,[{key:"push",value:function(e){if(this.isEmpty())l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return l(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(1),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(e){return e&&e.__esModule?e:{default:e}}(r),a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;o(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=f,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(29)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;i(this,e),this.toStrFn=t,this.table={}}return o(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=u,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(2)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0;e.ValuePairLazy=function(e){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t);var u=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,i));return u.key=e,u.value=i,u.isDeleted=o,u}return i(t,e),t}(t.ValuePair)})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}}function n(e){if(!(e<0))return 1===e||0===e?1:e*n(e-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=t,e.factorial=n})},function(e,t,n){var r,i,o;!function(n,u){i=[t],r=u,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e){"use strict";function t(e){return e<1?0:e<=2?1:t(e-1)+t(e-2)}function n(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r}function r(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=t,e.fibonacciIterative=n,e.fibonacciMemoization=r})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0),n(10),n(11)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r,i){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var f=function(e){return e&&e.__esModule?e:{default:e}}(r),l=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;o(this,t);var r=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return a(t,e),l(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){switch(this.getNodeHeight(e.left)-this.getNodeHeight(e.right)){case-2:return c.UNBALANCED_RIGHT;case-1:return c.SLIGHTLY_UNBALANCED_RIGHT;case 1:return c.SLIGHTLY_UNBALANCED_LEFT;case 2:return c.UNBALANCED_LEFT;default:return c.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===c.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===c.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===c.BALANCED||this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===c.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===c.BALANCED||this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===c.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(f.default);t.default=h,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t,i,o){var u=t,a=2*t+1,f=2*t+2;a0&&(u=a),f0&&(u=f),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}function i(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t);return e}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,o=e.length;for(i(e,t);o>1;)(0,n.swap)(e,0,--o),r(e,0,o,t);return e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,e.exports=t.default})},function(e,t,n){var r,i,o;!function(u,a){i=[e,t,n(9)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){return e&&e.__esModule?e:{default:e}}(n),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];r(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected||this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:i(r(e,t))}Object.defineProperty(e,"__esModule",{value:!0}),e.bucketSort=o})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){if(e.length<2)return e;var n=(0,t.findMaxValue)(e),r=0,i=new Array(n+1);return e.forEach(function(e){i[e]||(i[e]=0),i[e]++}),i.forEach(function(t,n){for(;t>0;)e[r++]=n,t--}),e}Object.defineProperty(e,"__esModule",{value:!0}),e.countingSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n,r){for(var i=0,o=0,u=[];i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e.length>1){var o=e,u=o.length,a=Math.floor(u/2);e=n(r(e.slice(0,a),i),r(e.slice(a,u),i),i)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.mergeSort=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(6)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var r=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-r)/u>=1;)e=i(e,n,u,r),u*=n;return e}Object.defineProperty(e,"__esModule",{value:!0}),e.radixSort=n;var r=function(e,t,n,r){return Math.floor((e-t)/n%r)},i=function(e,t,n,i){for(var o=void 0,u=[],a=[],f=0;f=0;c--)o=r(e[c],i,n,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0),n(13)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n){"use strict";function r(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var f=Math.floor((u+a)/2),l=o[f];if(i(l,r)===t.Compare.LESS_THAN)u=f+1;else{if(i(l,r)!==t.Compare.BIGGER_THAN)return f;a=f-1}}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=r})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=e.length,a=0,f=u-1,l=-1,s=-1;a<=f&&(0,t.biggerEquals)(n,e[a],r)&&(0,t.lesserEquals)(n,e[f],r);){if(s=o(n,e[a])/o(e[f],e[a]),l=a+Math.floor((f-a)*s),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?a=l+1:f=l-1}return t.DOES_NOT_EXIST}Object.defineProperty(e,"__esModule",{value:!0}),e.interpolationSearch=n})},function(e,t,n){var r,i,o;!function(u,a){i=[t,n(0)],r=a,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,e),this.compareFn=n,this.heap=[]}return o(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"find",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();rt.Compare.BIGGER_THAN&&(n=r),it.Compare.BIGGER_THAN&&(n=i),e!==n&&((0,t.swap)(this.heap,e,n),this.siftDown(n))}},{key:"siftUp",value:function(e){for(var n=this.getParentIndex(e);e>0&&this.compareFn(this.heap[n],this.heap[e])>t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e,this.heap.unshift(null));for(var t=this.size()-1;t>0;t--)this.siftDown(t)}}]),e}();e.MaxHeap=function(e){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;i(this,o);var r=n(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.compareFn=e,r.compareFn=(0,t.reverseCompare)(e),r}return r(o,e),o}(u)})}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=53)}([function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lesserEquals=function(e,n,r){var i=r(e,n);return i===t.LESS_THAN||i===t.EQUALS},e.biggerEquals=function(e,n,r){var i=r(e,n);return i===t.BIGGER_THAN||i===t.EQUALS},e.defaultCompare=function(e,n){return e===n?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected||this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(38)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = 0;\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (!this.isDirected) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap.shift();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { default as hanoi } from './others/hanoi';\nexport { default as hanoiStack } from './others/hanoi';\nexport { default as baseConverter } from './others/base-converter';\nexport { default as decimalToBinary } from './others/base-converter';\nexport { default as parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/chapter10/01-UsingMinHeap.html b/examples/chapter10/01-UsingMinHeap.html new file mode 100644 index 00000000..83814ba1 --- /dev/null +++ b/examples/chapter10/01-UsingMinHeap.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter10/01-UsingMinHeap.js b/examples/chapter10/01-UsingMinHeap.js new file mode 100644 index 00000000..71f12f77 --- /dev/null +++ b/examples/chapter10/01-UsingMinHeap.js @@ -0,0 +1,25 @@ +const { MinHeap } = PacktDataStructuresAlgorithms; + +const heap = new MinHeap(); + +heap.insert(2); +heap.insert(3); +heap.insert(4); +heap.insert(5); + +heap.insert(1); + +console.log(heap.getAsArray()); + +console.log('Heap size: ', heap.size()); // 5 +console.log('Heap is empty: ', heap.isEmpty()); // false +console.log('Heap min value: ', heap.findMinimum()); // 1 + +heap.insert(6); +heap.insert(7); + +console.log(heap.getAsArray()); + +console.log('Extract minimum: ', heap.extract()); +console.log(heap.getAsArray()); + diff --git a/examples/chapter10/02-UsingMaxHeap.html b/examples/chapter10/02-UsingMaxHeap.html new file mode 100644 index 00000000..9d573bda --- /dev/null +++ b/examples/chapter10/02-UsingMaxHeap.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter10/02-UsingMaxHeap.js b/examples/chapter10/02-UsingMaxHeap.js new file mode 100644 index 00000000..f1a5b97d --- /dev/null +++ b/examples/chapter10/02-UsingMaxHeap.js @@ -0,0 +1,27 @@ +const { MaxHeap } = PacktDataStructuresAlgorithms; + +const maxHeap = new MaxHeap(); + +maxHeap.insert(2); +maxHeap.insert(3); +maxHeap.insert(4); +maxHeap.insert(5); + +maxHeap.insert(1); + +console.log(maxHeap.getAsArray()); + +console.log('Heap size: ', maxHeap.size()); // 5 +console.log('Heap is empty: ', maxHeap.isEmpty()); // false +console.log('Heap min value: ', maxHeap.findMinimum()); // 5 + +maxHeap.insert(6); +maxHeap.insert(9); +maxHeap.insert(10); +maxHeap.insert(14); + +console.log(maxHeap.getAsArray()); + +console.log('Extract minimum: ', maxHeap.extract()); +console.log(maxHeap.getAsArray()); + diff --git a/examples/chapter10/03-HeapSort.html b/examples/chapter10/03-HeapSort.html new file mode 100644 index 00000000..e52c43f4 --- /dev/null +++ b/examples/chapter10/03-HeapSort.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter10/03-HeapSort.js b/examples/chapter10/03-HeapSort.js new file mode 100644 index 00000000..9d9b1ac0 --- /dev/null +++ b/examples/chapter10/03-HeapSort.js @@ -0,0 +1,7 @@ +const { heapSort } = PacktDataStructuresAlgorithms; + +console.log('********** Heap Sort **********'); +const array = [7, 6, 3, 5, 4, 1, 2]; + +console.log('Before sorting: ', array); +console.log('After sorting: ', heapSort(array)); diff --git a/examples/index.html b/examples/index.html index 5a9bb80c..4e1f4cb3 100644 --- a/examples/index.html +++ b/examples/index.html @@ -190,6 +190,19 @@ +
+ +
diff --git a/package.json b/package.json index 88846051..1f3edd60 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "tslint": "^5.9.1", "typescript": "^2.7.2", "webpack": "^4.1.1", + "webpack-cli": "^2.0.12", "yargs": "^11.0.0" } } diff --git a/src/js/data-structures/heap.js b/src/js/data-structures/heap.js index edce1608..136d50df 100644 --- a/src/js/data-structures/heap.js +++ b/src/js/data-structures/heap.js @@ -26,7 +26,7 @@ export class MinHeap { clear() { this.heap = []; } - find() { + findMinimum() { return this.isEmpty() ? undefined : this.heap[0]; } insert(value) { @@ -43,12 +43,15 @@ export class MinHeap { const left = this.getLeftIndex(index); const right = this.getRightIndex(index); const size = this.size(); - if (left < size && this.compareFn(this.heap[element], this.heap[left]) > Compare.BIGGER_THAN) { + if ( + left < size && + this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN + ) { element = left; } if ( right < size && - this.compareFn(this.heap[element], this.heap[right]) > Compare.BIGGER_THAN + this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN ) { element = right; } @@ -59,7 +62,10 @@ export class MinHeap { } siftUp(index) { let parent = this.getParentIndex(index); - while (index > 0 && this.compareFn(this.heap[parent], this.heap[index]) > Compare.BIGGER_THAN) { + while ( + index > 0 && + this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN + ) { swap(this.heap, parent, index); index = parent; parent = this.getParentIndex(index); @@ -79,11 +85,15 @@ export class MinHeap { heapify(array) { if (array) { this.heap = array; - this.heap.unshift(null); // remove all null elements } - for (let i = this.size() - 1; i > 0; i--) { + const maxIndex = Math.floor(this.size() / 2) - 1; + for (let i = 0; i <= maxIndex; i++) { this.siftDown(i); } + return this.heap; + } + getAsArray() { + return this.heap; } } export class MaxHeap extends MinHeap { diff --git a/src/ts/data-structures/heap.ts b/src/ts/data-structures/heap.ts index 6dc06585..f2b269b3 100644 --- a/src/ts/data-structures/heap.ts +++ b/src/ts/data-structures/heap.ts @@ -103,6 +103,10 @@ export class MinHeap { return this.heap; } + + getAsArray() { + return this.heap; + } } export class MaxHeap extends MinHeap { diff --git a/test/ts/data-structures/heap.spec.ts b/test/ts/data-structures/heap.spec.ts index 7296bf63..abfdedc9 100644 --- a/test/ts/data-structures/heap.spec.ts +++ b/test/ts/data-structures/heap.spec.ts @@ -1,5 +1,5 @@ import 'mocha'; -// import { expect } from 'chai'; +import { expect } from 'chai'; import { MinHeap } from '../../../src/ts/index'; import { MaxHeap } from '../../../src/ts/data-structures/heap'; import heapSort from '../../../src/ts/algorithms/sorting/heap-sort'; @@ -15,12 +15,27 @@ describe('Heap', () => { }); - it('inserts elements in the AVLTree', () => { + it('inserts elements in the Heap', () => { + + let min = 2; - heap.insert(3); heap.insert(2); - heap.insert(1); + expect(heap.findMinimum()).to.equal(min); + heap.insert(3); + expect(heap.findMinimum()).to.equal(min); heap.insert(4); + expect(heap.findMinimum()).to.equal(min); + heap.insert(5); + expect(heap.findMinimum()).to.equal(min); + + heap.insert(1); + min = 1; + expect(heap.findMinimum()).to.equal(min); + + heap.insert(6); + heap.insert(9); + heap.insert(10); + heap.insert(14); heap.extract(); heap.extract(); diff --git a/webpack.config.js b/webpack.config.js index f7cdebe0..6d033ef4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,7 +1,7 @@ // @ts-check /* eslint-disable */ const webpack = require('webpack'); -const UglifyJsPlugin = webpack.optimize.UglifyJsPlugin; +const UglifyJsPlugin = require('uglifyjs-webpack-plugin');; const path = require('path'); const env = require('yargs').argv.env; @@ -11,7 +11,7 @@ let plugins = [], outputFile; if (env === 'build') { - plugins.push(new UglifyJsPlugin({ minimize: true })); + // plugins.push(new UglifyJsPlugin({ minimize: true })); outputFile = libraryName + '.min.js'; } else { outputFile = libraryName + '.js'; @@ -40,7 +40,17 @@ const config = { modules: [path.resolve('./node_modules'), path.resolve('./src/js')], extensions: ['.json', '.js'] }, - plugins: plugins + optimization: { + minimizer: [ + // we specify a custom UglifyJsPlugin here to get source maps in production + new UglifyJsPlugin({ + cache: true, + parallel: true, + sourceMap: true + }) + ] + } + // plugins: plugins }; module.exports = config; From 5ee666672343c2e582ece334301a9f889b8ce3fd Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 31 Mar 2018 10:32:28 -0400 Subject: [PATCH 068/188] [Graphs] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- examples/PacktDataStructuresAlgorithms.min.js.map | 2 +- examples/chapter11/03-DFS.js | 6 +++--- src/js/algorithms/graph/depth-first-search.js | 6 +++--- src/js/data-structures/graph.js | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index d7895654..c4644f16 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=53)}([function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lesserEquals=function(e,n,r){var i=r(e,n);return i===t.LESS_THAN||i===t.EQUALS},e.biggerEquals=function(e,n,r){var i=r(e,n);return i===t.BIGGER_THAN||i===t.EQUALS},e.defaultCompare=function(e,n){return e===n?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),this.isDirected||this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(38)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(38)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = 0;\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (!this.isDirected) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap.shift();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { default as hanoi } from './others/hanoi';\nexport { default as hanoiStack } from './others/hanoi';\nexport { default as baseConverter } from './others/base-converter';\nexport { default as decimalToBinary } from './others/base-converter';\nexport { default as parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://PacktDataStructuresAlgorithms/webpack/universalModuleDefinition","webpack://PacktDataStructuresAlgorithms/webpack/bootstrap","webpack://PacktDataStructuresAlgorithms/./src/js/util.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/min-max-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/linked-list-models.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/queue.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/quicksort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/insertion-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/node.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/binary-search-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/dictionary.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/doubly-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/deque.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/avl-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/sequential-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/interpolation-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/shell-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/selection-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/radix-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/merge-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/counting-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bucket-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort-improved.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/shuffle/fisher–yates.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/kruskal.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/prim.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/floyd-warshall.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/dijkstra.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/depth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/breadth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/graph.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/heap-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/heap.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/fibonacci.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/factorial.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-separate-chaining.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/set.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/sorted-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/circular-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/palindrome-checker.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hot-potato.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/balanced-symbols.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/base-converter.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hanoi.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-array.js","webpack://PacktDataStructuresAlgorithms/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","lesserEquals","a","b","compareFn","comp","Compare","LESS_THAN","EQUALS","biggerEquals","BIGGER_THAN","defaultCompare","defaultEquals","defaultToString","item","undefined","String","toString","swap","array","_ref","reverseCompare","defaultDiff","Number","DOES_NOT_EXIST","ValuePair","key","_classCallCheck","this","LinkedList","equalsFn","arguments","length","_util","count","head","element","node","_linkedListModels","Node","current","next","index","previous","getElementAt","indexOf","removeAt","size","objString","Stack","items","isEmpty","result","findMaxValue","max","findMinValue","min","DoublyNode","prev","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","Queue","lowestCount","quick","left","right","pivot","Math","floor","j","partition","quickSort","insertionSort","temp","BinarySearchTree","_node","insertNode","searchNode","callback","inOrderTraverseNode","preOrderTraverseNode","postOrderTraverseNode","minNode","maxNode","removeNode","aux","Dictionary","toStrFn","table","tableKey","_valuePair","valuePair","hasKey","keyValues","map","values","callbackFn","valuePairs","keys","DoublyLinkedList","tail","_get","Deque","addBack","BalanceFactor","UNBALANCED_RIGHT","SLIGHTLY_UNBALANCED_RIGHT","BALANCED","SLIGHTLY_UNBALANCED_LEFT","UNBALANCED_LEFT","AVLTree","getNodeHeight","tmp","rotationRR","rotationLL","heightDifference","balanceFactor","getBalanceFactor","rotationLR","rotationRL","sequentialSearch","interpolationSearch","diffFn","low","high","position","delta","binarySearch","sortedArray","_quicksort","mid","shellSort","increment","selectionSort","indexMin","radixSort","radixBase","minValue","_minMaxSearch","maxValue","significantDigit","countingSortForRadix","getBucketIndex","bucketsIndex","buckets","mergeSort","_array","middle","slice","push","concat","merge","countingSort","sortedIndex","counts","Array","forEach","bucketSort","bucketSize","_insertionSort","apply","_toConsumableArray","sortBuckets","bucketCount","createBuckets","modifiedBubbleSort","bubbleSort","shuffle","currentIndex","randomIndex","random","INF","MAX_SAFE_INTEGER","find","parent","union","kruskal","graph","ne","u","v","cost","initializeCost","minKey","visited","minIndex","prim","floydWarshall","dist","isFinite","Infinity","k","minDistance","dijkstra","src","Colors","WHITE","GREY","BLACK","initializeColor","vertices","color","depthFirstSearchVisit","adjList","neighbors","w","DFSVisit","depthFirstSearch","getVertices","getAdjList","f","time","DFS","discovery","finished","predecessors","breadthFirstSearch","startVertex","queue","_queue2","default","enqueue","dequeue","BFS","distances","Graph","isDirected","_dictionary2","includes","set","addVertex","heapify","heapSize","largest","buildMaxHeap","MinHeap","heap","siftUp","getLeftIndex","getRightIndex","siftDown","getParentIndex","shift","removedValue","maxIndex","MaxHeap","fibonacci","fibonacciIterative","fibNMinus2","fibNMinus1","fibN","fibonacciMemoization","memo","fibonacciMem","num","factorialIterative","number","total","factorial","ValuePairLazy","isDeleted","HashTableLinearProbingLazy","hash","charCodeAt","loseloseHashCode","hashCode","_valuePairLazy","HashTableLinearProbing","verifyRemoveSideEffect","removedPosition","posHash","HashTableSeparateChaining","_linkedList2","linkedList","getHead","remove","HashTable","Set","has","otherSet","unionSet","add","intersectionSet","otherValues","biggerSet","smallerSet","differenceSet","isSubset","every","StackLinkedList","_doublyLinkedList2","clear","SortedLinkedList","getIndexNextSortedElement","pos","CircularLinkedList","removed","palindromeChecker","aString","deque","_deque2","lowerString","toLocaleLowerCase","split","join","isEqual","firstChar","lastChar","charAt","removeFront","removeBack","hotPotato","elementsList","elimitatedList","eliminated","winner","parenthesesChecker","symbols","stack","_stack2","balanced","symbol","top","pop","decimalToBinary","decNumber","remStack","rem","binaryString","baseConverter","base","baseString","hanoiStack","plates","source","dest","helper","towerOfHanoi","sourceName","helperName","destName","moves","move","hanoi","StackArray","util"],"mappings":"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","file":"PacktDataStructuresAlgorithms.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"PacktDataStructuresAlgorithms\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PacktDataStructuresAlgorithms\"] = factory();\n\telse\n\t\troot[\"PacktDataStructuresAlgorithms\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 53);\n","export const Compare = {\n LESS_THAN: -1,\n BIGGER_THAN: 1,\n EQUALS: 0\n};\n\nexport const DOES_NOT_EXIST = -1;\n\nexport function lesserEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.LESS_THAN || comp === Compare.EQUALS;\n}\n\nexport function biggerEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS;\n}\n\nexport function defaultCompare(a, b) {\n if (a === b) {\n return 0;\n }\n return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN;\n}\n\nexport function defaultEquals(a, b) {\n return a === b;\n}\n\nexport function defaultToString(item) {\n if (item === null) {\n return 'NULL';\n } else if (item === undefined) {\n return 'UNDEFINED';\n } else if (typeof item === 'string' || item instanceof String) {\n return `${item}`;\n }\n return item.toString();\n}\n\nexport function swap(array, a, b) {\n /* const temp = array[a];\n array[a] = array[b];\n array[b] = temp; */\n [array[a], array[b]] = [array[b], array[a]];\n}\nexport function reverseCompare(compareFn) {\n return (a, b) => compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap.shift();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { default as hanoi } from './others/hanoi';\nexport { default as hanoiStack } from './others/hanoi';\nexport { default as baseConverter } from './others/base-converter';\nexport { default as decimalToBinary } from './others/base-converter';\nexport { default as parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/chapter11/03-DFS.js b/examples/chapter11/03-DFS.js index c29686eb..5c440a74 100644 --- a/examples/chapter11/03-DFS.js +++ b/examples/chapter11/03-DFS.js @@ -46,9 +46,9 @@ graph.addEdge('C', 'F'); graph.addEdge('F', 'E'); const result = DFS(graph); -console.log(result.discovery); -console.log(result.finished); -console.log(result.predecessors); +console.log('discovery', result.discovery); +console.log('finished', result.finished); +console.log('predecessors', result.predecessors); const fTimes = result.finished; s = ''; diff --git a/src/js/algorithms/graph/depth-first-search.js b/src/js/algorithms/graph/depth-first-search.js index 208925ce..8427659f 100644 --- a/src/js/algorithms/graph/depth-first-search.js +++ b/src/js/algorithms/graph/depth-first-search.js @@ -46,7 +46,7 @@ export const depthFirstSearch = (graph, callback) => { const DFSVisit = (u, color, d, f, p, time, adjList) => { // console.log('discovered ' + u); color[u] = Colors.GREY; - d[u] = ++time; + d[u] = ++time.count; const neighbors = adjList.get(u); for (let i = 0; i < neighbors.length; i++) { const w = neighbors[i]; @@ -56,7 +56,7 @@ const DFSVisit = (u, color, d, f, p, time, adjList) => { } } color[u] = Colors.BLACK; - f[u] = ++time; + f[u] = ++time.count; // console.log('explored ' + u); }; @@ -67,7 +67,7 @@ export const DFS = graph => { const d = {}; const f = {}; const p = {}; - const time = 0; + const time = { count: 0 }; for (let i = 0; i < vertices.length; i++) { f[vertices[i]] = 0; d[vertices[i]] = 0; diff --git a/src/js/data-structures/graph.js b/src/js/data-structures/graph.js index d838c4f6..d8c92044 100644 --- a/src/js/data-structures/graph.js +++ b/src/js/data-structures/graph.js @@ -20,7 +20,7 @@ export default class Graph { this.addVertex(b); } this.adjList.get(a).push(b); - if (!this.isDirected) { + if (this.isDirected !== true) { this.adjList.get(b).push(a); } } From 1891b73d0b1868f78383a6c5f192e0c0df11ca22 Mon Sep 17 00:00:00 2001 From: loiane Date: Sat, 31 Mar 2018 14:04:16 -0400 Subject: [PATCH 069/188] [Heap] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- .../PacktDataStructuresAlgorithms.min.js.map | 2 +- examples/chapter10/01-UsingMinHeap.js | 12 ++- src/js/data-structures/heap.js | 3 +- src/ts/data-structures/heap.ts | 12 ++- test/ts/data-structures/heap.spec.ts | 93 +++++++++++-------- 6 files changed, 71 insertions(+), 53 deletions(-) diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index c4644f16..c71dbf36 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=53)}([function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lesserEquals=function(e,n,r){var i=r(e,n);return i===t.LESS_THAN||i===t.EQUALS},e.biggerEquals=function(e,n,r){var i=r(e,n);return i===t.BIGGER_THAN||i===t.EQUALS},e.defaultCompare=function(e,n){return e===n?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap.shift();return this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(38)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(38)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap.shift();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { default as hanoi } from './others/hanoi';\nexport { default as hanoiStack } from './others/hanoi';\nexport { default as baseConverter } from './others/base-converter';\nexport { default as decimalToBinary } from './others/base-converter';\nexport { default as parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://PacktDataStructuresAlgorithms/webpack/universalModuleDefinition","webpack://PacktDataStructuresAlgorithms/webpack/bootstrap","webpack://PacktDataStructuresAlgorithms/./src/js/util.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/min-max-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/linked-list-models.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/queue.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/quicksort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/insertion-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/node.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/binary-search-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/dictionary.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/doubly-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/deque.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/avl-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/sequential-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/interpolation-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/shell-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/selection-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/radix-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/merge-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/counting-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bucket-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort-improved.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/shuffle/fisher–yates.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/kruskal.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/prim.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/floyd-warshall.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/dijkstra.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/depth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/breadth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/graph.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/heap-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/heap.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/fibonacci.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/factorial.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-separate-chaining.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/set.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/sorted-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/circular-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/palindrome-checker.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hot-potato.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/balanced-symbols.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/base-converter.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hanoi.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-array.js","webpack://PacktDataStructuresAlgorithms/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","lesserEquals","a","b","compareFn","comp","Compare","LESS_THAN","EQUALS","biggerEquals","BIGGER_THAN","defaultCompare","defaultEquals","defaultToString","item","undefined","String","toString","swap","array","_ref","reverseCompare","defaultDiff","Number","DOES_NOT_EXIST","ValuePair","key","_classCallCheck","this","LinkedList","equalsFn","arguments","length","_util","count","head","element","node","_linkedListModels","Node","current","next","index","previous","getElementAt","indexOf","removeAt","size","objString","Stack","items","isEmpty","result","findMaxValue","max","findMinValue","min","DoublyNode","prev","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","Queue","lowestCount","quick","left","right","pivot","Math","floor","j","partition","quickSort","insertionSort","temp","BinarySearchTree","_node","insertNode","searchNode","callback","inOrderTraverseNode","preOrderTraverseNode","postOrderTraverseNode","minNode","maxNode","removeNode","aux","Dictionary","toStrFn","table","tableKey","_valuePair","valuePair","hasKey","keyValues","map","values","callbackFn","valuePairs","keys","DoublyLinkedList","tail","_get","Deque","addBack","BalanceFactor","UNBALANCED_RIGHT","SLIGHTLY_UNBALANCED_RIGHT","BALANCED","SLIGHTLY_UNBALANCED_LEFT","UNBALANCED_LEFT","AVLTree","getNodeHeight","tmp","rotationRR","rotationLL","heightDifference","balanceFactor","getBalanceFactor","rotationLR","rotationRL","sequentialSearch","interpolationSearch","diffFn","low","high","position","delta","binarySearch","sortedArray","_quicksort","mid","shellSort","increment","selectionSort","indexMin","radixSort","radixBase","minValue","_minMaxSearch","maxValue","significantDigit","countingSortForRadix","getBucketIndex","bucketsIndex","buckets","mergeSort","_array","middle","slice","push","concat","merge","countingSort","sortedIndex","counts","Array","forEach","bucketSort","bucketSize","_insertionSort","apply","_toConsumableArray","sortBuckets","bucketCount","createBuckets","modifiedBubbleSort","bubbleSort","shuffle","currentIndex","randomIndex","random","INF","MAX_SAFE_INTEGER","find","parent","union","kruskal","graph","ne","u","v","cost","initializeCost","minKey","visited","minIndex","prim","floydWarshall","dist","isFinite","Infinity","k","minDistance","dijkstra","src","Colors","WHITE","GREY","BLACK","initializeColor","vertices","color","depthFirstSearchVisit","adjList","neighbors","w","DFSVisit","depthFirstSearch","getVertices","getAdjList","f","time","DFS","discovery","finished","predecessors","breadthFirstSearch","startVertex","queue","_queue2","default","enqueue","dequeue","BFS","distances","Graph","isDirected","_dictionary2","includes","set","addVertex","heapify","heapSize","largest","buildMaxHeap","MinHeap","heap","siftUp","getLeftIndex","getRightIndex","siftDown","getParentIndex","shift","removedValue","pop","maxIndex","MaxHeap","fibonacci","fibonacciIterative","fibNMinus2","fibNMinus1","fibN","fibonacciMemoization","memo","fibonacciMem","num","factorialIterative","number","total","factorial","ValuePairLazy","isDeleted","HashTableLinearProbingLazy","hash","charCodeAt","loseloseHashCode","hashCode","_valuePairLazy","HashTableLinearProbing","verifyRemoveSideEffect","removedPosition","posHash","HashTableSeparateChaining","_linkedList2","linkedList","getHead","remove","HashTable","Set","has","otherSet","unionSet","add","intersectionSet","otherValues","biggerSet","smallerSet","differenceSet","isSubset","every","StackLinkedList","_doublyLinkedList2","clear","SortedLinkedList","getIndexNextSortedElement","pos","CircularLinkedList","removed","palindromeChecker","aString","deque","_deque2","lowerString","toLocaleLowerCase","split","join","isEqual","firstChar","lastChar","charAt","removeFront","removeBack","hotPotato","elementsList","elimitatedList","eliminated","winner","parenthesesChecker","symbols","stack","_stack2","balanced","symbol","top","decimalToBinary","decNumber","remStack","rem","binaryString","baseConverter","base","baseString","hanoiStack","plates","source","dest","helper","towerOfHanoi","sourceName","helperName","destName","moves","move","hanoi","StackArray","util"],"mappings":"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","file":"PacktDataStructuresAlgorithms.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"PacktDataStructuresAlgorithms\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PacktDataStructuresAlgorithms\"] = factory();\n\telse\n\t\troot[\"PacktDataStructuresAlgorithms\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 53);\n","export const Compare = {\n LESS_THAN: -1,\n BIGGER_THAN: 1,\n EQUALS: 0\n};\n\nexport const DOES_NOT_EXIST = -1;\n\nexport function lesserEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.LESS_THAN || comp === Compare.EQUALS;\n}\n\nexport function biggerEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS;\n}\n\nexport function defaultCompare(a, b) {\n if (a === b) {\n return 0;\n }\n return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN;\n}\n\nexport function defaultEquals(a, b) {\n return a === b;\n}\n\nexport function defaultToString(item) {\n if (item === null) {\n return 'NULL';\n } else if (item === undefined) {\n return 'UNDEFINED';\n } else if (typeof item === 'string' || item instanceof String) {\n return `${item}`;\n }\n return item.toString();\n}\n\nexport function swap(array, a, b) {\n /* const temp = array[a];\n array[a] = array[b];\n array[b] = temp; */\n [array[a], array[b]] = [array[b], array[a]];\n}\nexport function reverseCompare(compareFn) {\n return (a, b) => compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { default as hanoi } from './others/hanoi';\nexport { default as hanoiStack } from './others/hanoi';\nexport { default as baseConverter } from './others/base-converter';\nexport { default as decimalToBinary } from './others/base-converter';\nexport { default as parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/chapter10/01-UsingMinHeap.js b/examples/chapter10/01-UsingMinHeap.js index 71f12f77..94d98e7c 100644 --- a/examples/chapter10/01-UsingMinHeap.js +++ b/examples/chapter10/01-UsingMinHeap.js @@ -1,13 +1,13 @@ const { MinHeap } = PacktDataStructuresAlgorithms; -const heap = new MinHeap(); +let heap = new MinHeap(); heap.insert(2); heap.insert(3); heap.insert(4); heap.insert(5); -heap.insert(1); +heap.insert(2); console.log(heap.getAsArray()); @@ -15,11 +15,13 @@ console.log('Heap size: ', heap.size()); // 5 console.log('Heap is empty: ', heap.isEmpty()); // false console.log('Heap min value: ', heap.findMinimum()); // 1 -heap.insert(6); -heap.insert(7); +heap = new MinHeap(); +for (let i = 1; i < 10; i++) { + heap.insert(i); +} console.log(heap.getAsArray()); console.log('Extract minimum: ', heap.extract()); -console.log(heap.getAsArray()); +console.log(heap.getAsArray()); // [2, 4, 3, 8, 5, 6, 7, 9] diff --git a/src/js/data-structures/heap.js b/src/js/data-structures/heap.js index 136d50df..044237e6 100644 --- a/src/js/data-structures/heap.js +++ b/src/js/data-structures/heap.js @@ -78,7 +78,8 @@ export class MinHeap { if (this.size() === 1) { return this.heap.shift(); } - const removedValue = this.heap.shift(); + const removedValue = this.heap[0]; + this.heap[0] = this.heap.pop(); this.siftDown(0); return removedValue; } diff --git a/src/ts/data-structures/heap.ts b/src/ts/data-structures/heap.ts index f2b269b3..5f27b089 100644 --- a/src/ts/data-structures/heap.ts +++ b/src/ts/data-structures/heap.ts @@ -6,11 +6,11 @@ export class MinHeap { constructor(protected compareFn: ICompareFunction = defaultCompare) {} private getLeftIndex(index: number) { - return (2 * index) + 1; + return 2 * index + 1; } private getRightIndex(index: number) { - return (2 * index) + 2; + return 2 * index + 2; } private getParentIndex(index: number) { @@ -71,7 +71,10 @@ export class MinHeap { private siftUp(index: number): void { let parent = this.getParentIndex(index); - while (index > 0 && this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN) { + while ( + index > 0 && + this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN + ) { swap(this.heap, parent, index); index = parent; parent = this.getParentIndex(index); @@ -85,7 +88,8 @@ export class MinHeap { if (this.size() === 1) { return this.heap.shift(); } - const removedValue = this.heap.shift(); + const removedValue = this.heap[0]; + this.heap[0] = this.heap.pop(); this.siftDown(0); return removedValue; } diff --git a/test/ts/data-structures/heap.spec.ts b/test/ts/data-structures/heap.spec.ts index abfdedc9..bdfc2eca 100644 --- a/test/ts/data-structures/heap.spec.ts +++ b/test/ts/data-structures/heap.spec.ts @@ -11,56 +11,67 @@ describe('Heap', () => { heap = new MinHeap(); }); - it('starts empty', () => { - + it('starts empty MinHeap', () => { + expect(heap.size()).to.equal(0); + expect(heap.isEmpty()).to.equal(true); }); - it('inserts elements in the Heap', () => { - - let min = 2; - - heap.insert(2); - expect(heap.findMinimum()).to.equal(min); - heap.insert(3); - expect(heap.findMinimum()).to.equal(min); - heap.insert(4); - expect(heap.findMinimum()).to.equal(min); - heap.insert(5); - expect(heap.findMinimum()).to.equal(min); - - heap.insert(1); - min = 1; - expect(heap.findMinimum()).to.equal(min); - - heap.insert(6); - heap.insert(9); - heap.insert(10); - heap.insert(14); - - heap.extract(); - heap.extract(); - heap.extract(); - heap.extract(); - - heap.isEmpty(); + it('inserts values in the MinHeap', () => { + const resultArray = []; + for (let i = 1; i < 10; i++) { + resultArray.push(i); + heap.insert(i); + expect(heap.getAsArray()).to.deep.equal(resultArray); + } + }); - const maxHeap = new MaxHeap(); - maxHeap.insert(3); - maxHeap.insert(2); - maxHeap.insert(1); - maxHeap.insert(4); + it('finds the min value from the MinHeap', () => { + const resultArray = []; + for (let i = 10; i >= 1; i--) { + resultArray.push(i); + heap.insert(i); + expect(heap.findMinimum()).to.equal(i); + } + }); - maxHeap.extract(); - maxHeap.extract(); - maxHeap.extract(); - maxHeap.extract(); + it('performs heapify in the MinHeap', () => { + const resultArray = []; + for (let i = 10; i >= 1; i--) { + resultArray.push(i); + } + expect(heap.heapify(resultArray)).to.deep.equal(resultArray); + }); - maxHeap.isEmpty(); + it('extracts the min value from the MinHeap', () => { + let resultArray = []; + for (let i = 1; i < 10; i++) { + resultArray.push(i); + heap.insert(i); + expect(heap.getAsArray()).to.deep.equal(resultArray); + } + + resultArray = [ + [], + [2, 4, 3, 8, 5, 6, 7, 9], + [3, 4, 6, 8, 5, 9, 7], + [4, 5, 6, 8, 7, 9], + [5, 7 , 6, 8, 9], + [6, 7, 9, 8], + [7, 8, 9], + [8, 9], + [9], + [] + ]; + + for (let i = 1; i < 10; i++) { + expect(heap.extract()).to.equal(i); + expect(heap.getAsArray()).to.deep.equal(resultArray[i]); + } }); it('Heap Sort', () => { const array = [3, 2, 5, 6, 1, 7, 8, 9]; - heapSort(array); + expect(heapSort(array)).to.deep.equal([1, 2, 3, 5, 6, 7, 8, 9]); }); }); From a1bea0b36627f89919ea4aae4fa6e5fe1435ce48 Mon Sep 17 00:00:00 2001 From: loiane Date: Thu, 5 Apr 2018 08:46:11 -0400 Subject: [PATCH 070/188] [Heap] --- examples/chapter10/01-UsingMinHeap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/chapter10/01-UsingMinHeap.js b/examples/chapter10/01-UsingMinHeap.js index 94d98e7c..59b7753b 100644 --- a/examples/chapter10/01-UsingMinHeap.js +++ b/examples/chapter10/01-UsingMinHeap.js @@ -22,6 +22,6 @@ for (let i = 1; i < 10; i++) { console.log(heap.getAsArray()); -console.log('Extract minimum: ', heap.extract()); +console.log('Extract minimum: ', heap.extract()); // 1 console.log(heap.getAsArray()); // [2, 4, 3, 8, 5, 6, 7, 9] From 8d07bc952045787ea24aba6d2a1bc8775e65dfb9 Mon Sep 17 00:00:00 2001 From: loiane Date: Thu, 5 Apr 2018 08:46:19 -0400 Subject: [PATCH 071/188] [Trees] --- .../data-structures/models/red-black-node.ts | 14 +- src/ts/data-structures/red-black-tree.ts | 211 +++++++++++++++++- src/ts/index.ts | 1 + .../ts/data-structures/red-black-tree.spec.ts | 86 +++++++ 4 files changed, 303 insertions(+), 9 deletions(-) create mode 100644 test/ts/data-structures/red-black-tree.spec.ts diff --git a/src/ts/data-structures/models/red-black-node.ts b/src/ts/data-structures/models/red-black-node.ts index 256bd7f5..20da6f60 100644 --- a/src/ts/data-structures/models/red-black-node.ts +++ b/src/ts/data-structures/models/red-black-node.ts @@ -1,14 +1,20 @@ +import { Node } from './node'; + export enum Colors { RED = 0, BLACK = 1 } -export class RedBlackNode { +export class RedBlackNode extends Node { left: RedBlackNode; right: RedBlackNode; + parent: RedBlackNode; color: Colors; - constructor(public key: K) {} + constructor(public key: K) { + super(key); + this.color = Colors.RED; + } isRed() { return this.color === Colors.RED; @@ -21,8 +27,4 @@ export class RedBlackNode { this.color = Colors.RED; } } - - toString() { - return `${this.key}`; - } } diff --git a/src/ts/data-structures/red-black-tree.ts b/src/ts/data-structures/red-black-tree.ts index 001a2fb4..08b1975b 100644 --- a/src/ts/data-structures/red-black-tree.ts +++ b/src/ts/data-structures/red-black-tree.ts @@ -1,11 +1,216 @@ -/*import { Compare, defaultCompare, ICompareFunction } from '../util'; +import { defaultCompare, ICompareFunction, Compare } from '../util'; import BinarySearchTree from './binary-search-tree'; -import { Node } from './models/node'; +import { RedBlackNode, Colors } from './models/red-black-node'; export default class RedBlackTree extends BinarySearchTree { + protected root: RedBlackNode; constructor(protected compareFn: ICompareFunction = defaultCompare) { super(compareFn); } + + /** + * Left left case: rotate right + * + * b a + * / \ / \ + * a e -> rotationLL(b) -> c b + * / \ / \ + * c d d e + * + * @param node Node + */ + private rotationLL(node: RedBlackNode) { + const tmp = node.left; + node.left = tmp.right; + if (typeof tmp.right.key !== 'undefined') { + tmp.right.parent = node; + } + tmp.parent = node.parent; + if (!node.parent) { + this.root = tmp; + } else { + if (node === node.parent.left) { + node.parent.left = tmp; + } else { + node.parent.right = tmp; + } + } + tmp.right = node; + node.parent = tmp; + } + + /** + * Right right case: rotate left + * + * a b + * / \ / \ + * c b -> rotationRR(a) -> a e + * / \ / \ + * d e c d + * + * @param node Node + */ + private rotationRR(node: RedBlackNode) { + const tmp = node.right; + node.right = tmp.left; + if (typeof tmp.left.key !== 'undefined') { + tmp.left.parent = node; + } + tmp.parent = node.parent; + if (!node.parent) { + this.root = tmp; + } else { + if (node === node.parent.left) { + node.parent.left = tmp; + } else { + node.parent.right = tmp; + } + } + tmp.left = node; + node.parent = tmp; + } + + insert(key: T) { + // special case: first key + if (this.root == null) { + this.root = new RedBlackNode(key); + this.root.color = Colors.BLACK; + } else { + const newNode = this.insertNode(this.root, key); + this.fixTreeProperties(newNode); + } + } + + protected insertNode(node: RedBlackNode, key: T): RedBlackNode { + if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + if (node.left == null) { + node.left = new RedBlackNode(key); + node.left.parent = node; + return node.left; + } else { + return this.insertNode(node.left, key); + } + } else if (node.right == null) { + node.right = new RedBlackNode(key); + node.right.parent = node; + return node.right; + } else { + return this.insertNode(node.right, key); + } + } + + private fixTreeProperties(node: RedBlackNode) { + let uncle: RedBlackNode; + let grandParent: RedBlackNode; + while (node && node.parent && node.parent.color === Colors.RED && node.color !== Colors.BLACK) { + grandParent = node.parent.parent; + if (grandParent && grandParent.left === node.parent) { + if (grandParent.right != null) { + uncle = grandParent.right; + if (uncle.color === Colors.RED) { + node.parent.color = Colors.BLACK; + uncle.color = Colors.BLACK; + grandParent.color = Colors.RED; + node = grandParent; + } + } else { + if (node.parent.right === node) { + node = node.parent; + this.leftRotate(node); + } + node.parent.color = Colors.BLACK; + grandParent.color = Colors.RED; + this.rightRotate(grandParent); + } + } else { + if (grandParent.left != null) { + uncle = grandParent.left; + if (uncle.color === Colors.RED) { + node.parent.color = Colors.BLACK; + uncle.color = Colors.BLACK; + grandParent.color = Colors.RED; + node = grandParent; + } + } else { + if (node.parent.left === node) { + node = node.parent; + this.rightRotate(node); + } + node.parent.color = Colors.BLACK; + grandParent.color = Colors.RED; + this.leftRotate(grandParent); + } + } + } + this.root.color = Colors.BLACK; + } + + leftRotate(p: RedBlackNode) { + if (p.right != null) { + const y = p.right; + if (y.left != null) { + p.right = y.left; + y.left.parent = p; + } else { + p.right = null; + } + if (p.parent != null) { + y.parent = p.parent; + } + if (p.parent == null) { + this.root = y; + } else { + if (p === p.parent.left) { + p.parent.left = y; + } else { + p.parent.right = y; + } + } + y.left = p; + p.parent = y; + } + } + + rightRotate(p: RedBlackNode) { + if (p.left != null) { + const y = p.left; + if (y.right != null) { + p.left = y.right; + y.right.parent = p; + } else { + p.left = null; + } + if (p.parent != null) { + y.parent = p.parent; + } + if (p.parent == null) { + this.root = y; + } else { + if (p === p.parent.left) { + p.parent.left = y; + } else { + p.parent.right = y; + } + } + y.right = p; + p.parent = y; + } + } + + getRoot() { + return this.root; + } + + /* private flipColors(node: RedBlackNode) { + node.left.flipColor(); + node.right.flipColor(); + } + + private isRed(node: RedBlackNode) { + if (!node) { + return false; + } + return node.isRed(); + }*/ } -*/ diff --git a/src/ts/index.ts b/src/ts/index.ts index 661de1f2..b1e507e1 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -23,6 +23,7 @@ export { fibonacciMemoization as fibonacciMemoization} from './others/fibonacci' // chapter 09 export { default as BinarySearchTree } from './data-structures/binary-search-tree'; export { default as AVLTree } from './data-structures/avl-tree'; +export { default as RedBlackTree } from './data-structures/red-black-tree'; // chapter 10 export { MinHeap as MinHeap } from './data-structures/heap'; diff --git a/test/ts/data-structures/red-black-tree.spec.ts b/test/ts/data-structures/red-black-tree.spec.ts new file mode 100644 index 00000000..5dae97f6 --- /dev/null +++ b/test/ts/data-structures/red-black-tree.spec.ts @@ -0,0 +1,86 @@ +import { Colors } from './../../../src/ts/data-structures/models/red-black-node'; +import 'mocha'; +import { expect } from 'chai'; +import { RedBlackTree } from '../../../src/ts/index'; + +describe('RedBlackTree', () => { + let tree: RedBlackTree; + + beforeEach(() => { + tree = new RedBlackTree(); + }); + + it('starts empty', () => { + expect(tree.getRoot()).to.equal(undefined); + }); + + it('inserts elements in the RedBlackTree', () => { + expect(tree.getRoot()).to.equal(undefined); + + let node; + + tree.insert(1); + assertNode(tree.getRoot(), 1, Colors.BLACK); + + tree.insert(2); + assertNode(tree.getRoot(), 1, Colors.BLACK); + assertNode(tree.getRoot().right, 2, Colors.RED); + + tree.insert(3); + assertNode(tree.getRoot(), 2, Colors.BLACK); + assertNode(tree.getRoot().right, 3, Colors.RED); + assertNode(tree.getRoot().left, 1, Colors.RED); + + tree.insert(4); + assertNode(tree.getRoot(), 2, Colors.BLACK); + assertNode(tree.getRoot().left, 1, Colors.BLACK); + assertNode(tree.getRoot().right, 3, Colors.BLACK); + assertNode(tree.getRoot().right.right, 4, Colors.RED); + + tree.insert(5); + assertNode(tree.getRoot(), 2, Colors.BLACK); + assertNode(tree.getRoot().left, 1, Colors.BLACK); + node = tree.getRoot().right; + assertNode(node, 4, Colors.BLACK); + assertNode(node.left, 3, Colors.RED); + assertNode(node.right, 5, Colors.RED); + + tree.insert(6); + assertNode(tree.getRoot(), 2, Colors.BLACK); + assertNode(tree.getRoot().left, 1, Colors.BLACK); + node = tree.getRoot().right; + assertNode(node, 4, Colors.RED); + assertNode(node.left, 3, Colors.BLACK); + assertNode(node.right, 5, Colors.BLACK); + assertNode(node.right.right, 6, Colors.RED); + + tree.insert(7); + assertNode(tree.getRoot(), 2, Colors.BLACK); + assertNode(tree.getRoot().left, 1, Colors.BLACK); + node = tree.getRoot().right; + assertNode(node, 4, Colors.RED); + assertNode(node.left, 3, Colors.BLACK); + assertNode(node.right, 6, Colors.BLACK); + assertNode(node.right.right, 7, Colors.RED); + assertNode(node.right.left, 5, Colors.RED); + + tree.insert(8); + assertNode(tree.getRoot(), 4, Colors.BLACK); + node = tree.getRoot().left; + assertNode(node, 2, Colors.RED); + assertNode(node.left, 1, Colors.BLACK); + assertNode(node.right, 3, Colors.BLACK); + node = tree.getRoot().right; + assertNode(node, 5, Colors.RED); + assertNode(node.left, 5, Colors.BLACK); + assertNode(node.right, 7, Colors.BLACK); + assertNode(node.right.right, 8, Colors.RED); + + + }); + + function assertNode(node, key, color) { + expect(node.color).to.equal(color); + expect(node.key).to.equal(key); + } +}); From 6be1c4c27e050afa9ef19e605b92eca9286a391a Mon Sep 17 00:00:00 2001 From: loiane Date: Thu, 5 Apr 2018 14:28:08 -0400 Subject: [PATCH 072/188] [Trees] --- src/ts/data-structures/red-black-tree.ts | 134 +++++++----------- .../ts/data-structures/red-black-tree.spec.ts | 28 +++- 2 files changed, 76 insertions(+), 86 deletions(-) diff --git a/src/ts/data-structures/red-black-tree.ts b/src/ts/data-structures/red-black-tree.ts index 08b1975b..b58b71df 100644 --- a/src/ts/data-structures/red-black-tree.ts +++ b/src/ts/data-structures/red-black-tree.ts @@ -23,7 +23,7 @@ export default class RedBlackTree extends BinarySearchTree { private rotationLL(node: RedBlackNode) { const tmp = node.left; node.left = tmp.right; - if (typeof tmp.right.key !== 'undefined') { + if (tmp.right && tmp.right.key) { tmp.right.parent = node; } tmp.parent = node.parent; @@ -54,7 +54,7 @@ export default class RedBlackTree extends BinarySearchTree { private rotationRR(node: RedBlackNode) { const tmp = node.right; node.right = tmp.left; - if (typeof tmp.left.key !== 'undefined') { + if (tmp.left && tmp.left.key) { tmp.left.parent = node; } tmp.parent = node.parent; @@ -101,101 +101,65 @@ export default class RedBlackTree extends BinarySearchTree { } private fixTreeProperties(node: RedBlackNode) { - let uncle: RedBlackNode; - let grandParent: RedBlackNode; while (node && node.parent && node.parent.color === Colors.RED && node.color !== Colors.BLACK) { - grandParent = node.parent.parent; - if (grandParent && grandParent.left === node.parent) { - if (grandParent.right != null) { - uncle = grandParent.right; - if (uncle.color === Colors.RED) { - node.parent.color = Colors.BLACK; - uncle.color = Colors.BLACK; - grandParent.color = Colors.RED; - node = grandParent; - } - } else { - if (node.parent.right === node) { - node = node.parent; - this.leftRotate(node); - } - node.parent.color = Colors.BLACK; + let parent = node.parent; + const grandParent = parent.parent; + + // case A + if (grandParent && grandParent.left === parent) { + + const uncle = grandParent.right; + + // case 1: uncle of node is also red - only recoloring + if (uncle && uncle.color === Colors.RED) { grandParent.color = Colors.RED; - this.rightRotate(grandParent); - } - } else { - if (grandParent.left != null) { - uncle = grandParent.left; - if (uncle.color === Colors.RED) { - node.parent.color = Colors.BLACK; - uncle.color = Colors.BLACK; - grandParent.color = Colors.RED; - node = grandParent; - } + parent.color = Colors.BLACK; + uncle.color = Colors.BLACK; + node = grandParent; } else { - if (node.parent.left === node) { - node = node.parent; - this.rightRotate(node); + // case 2: node is right child - left rotate + if (node === parent.right) { + this.rotationRR(parent); + node = parent; + parent = node.parent; } - node.parent.color = Colors.BLACK; + + // case 3: node is left child - right rotate + this.rotationLL(grandParent); + // swap color + parent.color = Colors.BLACK; grandParent.color = Colors.RED; - this.leftRotate(grandParent); + node = parent; } - } - } - this.root.color = Colors.BLACK; - } - leftRotate(p: RedBlackNode) { - if (p.right != null) { - const y = p.right; - if (y.left != null) { - p.right = y.left; - y.left.parent = p; - } else { - p.right = null; - } - if (p.parent != null) { - y.parent = p.parent; - } - if (p.parent == null) { - this.root = y; - } else { - if (p === p.parent.left) { - p.parent.left = y; - } else { - p.parent.right = y; - } - } - y.left = p; - p.parent = y; - } - } + } else { // case B: parent is right child of grand parent - rightRotate(p: RedBlackNode) { - if (p.left != null) { - const y = p.left; - if (y.right != null) { - p.left = y.right; - y.right.parent = p; - } else { - p.left = null; - } - if (p.parent != null) { - y.parent = p.parent; - } - if (p.parent == null) { - this.root = y; - } else { - if (p === p.parent.left) { - p.parent.left = y; + const uncle = grandParent.left; + + // case 1: uncle is read - only recoloring + if (uncle && uncle.color === Colors.RED) { + grandParent.color = Colors.RED; + parent.color = Colors.BLACK; + uncle.color = Colors.BLACK; + node = grandParent; } else { - p.parent.right = y; + // case 2: node is left child - left rotate + if (node === parent.left) { + this.rotationLL(parent); + node = parent; + parent = node.parent; + } + + // case 3: node is right child - left rotate + this.rotationRR(grandParent); + // swap color + parent.color = Colors.BLACK; + grandParent.color = Colors.RED; + node = parent; } } - y.right = p; - p.parent = y; } + this.root.color = Colors.BLACK; } getRoot() { diff --git a/test/ts/data-structures/red-black-tree.spec.ts b/test/ts/data-structures/red-black-tree.spec.ts index 5dae97f6..8fefc0f5 100644 --- a/test/ts/data-structures/red-black-tree.spec.ts +++ b/test/ts/data-structures/red-black-tree.spec.ts @@ -71,11 +71,37 @@ describe('RedBlackTree', () => { assertNode(node.left, 1, Colors.BLACK); assertNode(node.right, 3, Colors.BLACK); node = tree.getRoot().right; - assertNode(node, 5, Colors.RED); + assertNode(node, 6, Colors.RED); assertNode(node.left, 5, Colors.BLACK); assertNode(node.right, 7, Colors.BLACK); assertNode(node.right.right, 8, Colors.RED); + tree.insert(9); + assertNode(tree.getRoot(), 4, Colors.BLACK); + node = tree.getRoot().left; + assertNode(node, 2, Colors.RED); + assertNode(node.left, 1, Colors.BLACK); + assertNode(node.right, 3, Colors.BLACK); + node = tree.getRoot().right; + assertNode(node, 6, Colors.RED); + assertNode(node.left, 5, Colors.BLACK); + assertNode(node.right, 8, Colors.BLACK); + assertNode(node.right.left, 7, Colors.RED); + assertNode(node.right.right, 9, Colors.RED); + + tree.insert(10); + assertNode(tree.getRoot(), 4, Colors.BLACK); + node = tree.getRoot().left; + assertNode(node, 2, Colors.BLACK); + assertNode(node.left, 1, Colors.BLACK); + assertNode(node.right, 3, Colors.BLACK); + node = tree.getRoot().right; + assertNode(node, 6, Colors.BLACK); + assertNode(node.left, 5, Colors.BLACK); + assertNode(node.right, 8, Colors.RED); + assertNode(node.right.left, 7, Colors.BLACK); + assertNode(node.right.right, 9, Colors.BLACK); + assertNode(node.right.right.right, 10, Colors.RED); }); From 6dfdfe8af37359e255fc2319c1276a3890d265cc Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Sun, 8 Apr 2018 16:43:13 +0200 Subject: [PATCH 073/188] removed unnecessary line in the function fibonacciMemoization(n) --- src/js/others/fibonacci.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/js/others/fibonacci.js b/src/js/others/fibonacci.js index 04de5e68..e0ded2f9 100644 --- a/src/js/others/fibonacci.js +++ b/src/js/others/fibonacci.js @@ -26,7 +26,6 @@ export function fibonacciMemoization(n) { const memo = [0, 1]; const fibonacciMem = num => { if (memo[num] != null) { return memo[num]; } - memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2); return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2)); }; return fibonacciMem(n); From f01534782c4b5bab829e37bc10d93ccfdfaafe9a Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 12:00:29 -0400 Subject: [PATCH 074/188] backtracking algorithms --- src/ts/algorithms/backtracking/rat-in-maze.ts | 2 +- .../backtracking/rat-in-maze.spec.ts | 21 +++++++++++++++ .../backtracking/sudoku-solver.spec.ts | 26 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 test/ts/algorithms/backtracking/rat-in-maze.spec.ts diff --git a/src/ts/algorithms/backtracking/rat-in-maze.ts b/src/ts/algorithms/backtracking/rat-in-maze.ts index 915c8b63..047d4982 100644 --- a/src/ts/algorithms/backtracking/rat-in-maze.ts +++ b/src/ts/algorithms/backtracking/rat-in-maze.ts @@ -8,7 +8,7 @@ export function ratInAMaze(maze: Array>) { } } - if (findPath(maze, 0, 0, solution) === false) { + if (findPath(maze, 0, 0, solution) === true) { return solution; } else { return 'NO PATH FOUND'; diff --git a/test/ts/algorithms/backtracking/rat-in-maze.spec.ts b/test/ts/algorithms/backtracking/rat-in-maze.spec.ts new file mode 100644 index 00000000..0a292984 --- /dev/null +++ b/test/ts/algorithms/backtracking/rat-in-maze.spec.ts @@ -0,0 +1,21 @@ +import 'mocha'; +import { expect } from 'chai'; +import { ratInAMaze } from '../../../../src/ts/index'; + +describe('Rat in a maze', () => { + it('rat in a maze solver', () => { + const maze = [ + [1, 0, 0, 0], + [1, 1, 1, 1], + [0, 0, 1, 0], + [0, 1, 1, 1] + ]; + const solution = [ + [1, 0, 0, 0], + [1, 1, 1, 0], + [0, 0, 1, 0], + [0, 0, 1, 1] + ]; + expect(ratInAMaze(maze)).to.deep.equal(solution); + }); +}); diff --git a/test/ts/algorithms/backtracking/sudoku-solver.spec.ts b/test/ts/algorithms/backtracking/sudoku-solver.spec.ts index 2b78a551..e747683b 100644 --- a/test/ts/algorithms/backtracking/sudoku-solver.spec.ts +++ b/test/ts/algorithms/backtracking/sudoku-solver.spec.ts @@ -28,4 +28,30 @@ describe('Sudoku Solver', () => { ]; expect(sudokuSolver(grid)).to.deep.equal(solution); }); + + it('sudoku solver 2', () => { + const grid = [ + [5, 3, 0, 0, 7, 0, 0, 0, 0], + [6, 0, 0, 1, 9, 5, 0, 0, 0], + [0, 9, 8, 0, 0, 0, 0, 6, 0], + [8, 0, 0, 0, 6, 0, 0, 0, 3], + [4, 0, 0, 8, 0, 3, 0, 0, 1], + [7, 0, 0, 0, 2, 0, 0, 0, 6], + [0, 6, 0, 0, 0, 0, 2, 8, 0], + [0, 0, 0, 4, 1, 9, 0, 0, 5], + [0, 0, 0, 0, 8, 0, 0, 7, 9] + ]; + const solution = [ + [5, 3, 4, 6, 7, 8, 9, 1, 2], + [6, 7, 2, 1, 9, 5, 3, 4, 8], + [1, 9, 8, 3, 4, 2, 5, 6, 7], + [8, 5, 9, 7, 6, 1, 4, 2, 3], + [4, 2, 6, 8, 5, 3, 7, 9, 1], + [7, 1, 3, 9, 2, 4, 8, 5, 6], + [9, 6, 1, 5, 3, 7, 2, 8, 4], + [2, 8, 7, 4, 1, 9, 6, 3, 5], + [3, 4, 5, 2, 8, 6, 1, 7, 9] + ]; + expect(sudokuSolver(grid)).to.deep.equal(solution); + }); }); From 7309191057cebb021611be335778e866aae8d0c7 Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Sun, 8 Apr 2018 18:16:26 +0200 Subject: [PATCH 075/188] improved the algorithm --- src/js/others/balanced-symbols.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/js/others/balanced-symbols.js b/src/js/others/balanced-symbols.js index ef1435ad..8bf7a204 100644 --- a/src/js/others/balanced-symbols.js +++ b/src/js/others/balanced-symbols.js @@ -11,21 +11,23 @@ export function parenthesesChecker(symbols) { let top; while (index < symbols.length && balanced) { - symbol = symbols.charAt(index); + symbol = symbols[index]; if (opens.indexOf(symbol) >= 0) { stack.push(symbol); } else if (stack.isEmpty()) { balanced = false; } else { - top = stack.pop(); + // makes sure the stack isn't empty. + if (!stack.isEmpty()) { + top = stack.pop(); + } else { // error case + balanced = false; + } if (!(opens.indexOf(top) === closers.indexOf(symbol))) { balanced = false; } } index++; } - if (balanced && stack.isEmpty()) { - return true; - } - return false; + return balanced && stack.isEmpty(); } From dee0191427e720a2b48b374160c9a1d8c1976905 Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Sun, 8 Apr 2018 18:24:39 +0200 Subject: [PATCH 076/188] removed a comment and moved some code. --- src/js/others/balanced-symbols.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/js/others/balanced-symbols.js b/src/js/others/balanced-symbols.js index 8bf7a204..60887593 100644 --- a/src/js/others/balanced-symbols.js +++ b/src/js/others/balanced-symbols.js @@ -17,15 +17,14 @@ export function parenthesesChecker(symbols) { } else if (stack.isEmpty()) { balanced = false; } else { - // makes sure the stack isn't empty. if (!stack.isEmpty()) { top = stack.pop(); + if (!(opens.indexOf(top) === closers.indexOf(symbol))) { + balanced = false; + } } else { // error case balanced = false; } - if (!(opens.indexOf(top) === closers.indexOf(symbol))) { - balanced = false; - } } index++; } From ba52bc924d16199d9c86b3fe3e1bcc45af610215 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 12:53:27 -0400 Subject: [PATCH 077/188] exported chapter 3 functions - closes #45 --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- examples/PacktDataStructuresAlgorithms.min.js.map | 2 +- src/js/index.js | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index c71dbf36..bfe6713b 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=53)}([function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lesserEquals=function(e,n,r){var i=r(e,n);return i===t.LESS_THAN||i===t.EQUALS},e.biggerEquals=function(e,n,r){var i=r(e,n);return i===t.BIGGER_THAN||i===t.EQUALS},e.defaultCompare=function(e,n){return e===n?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(38)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(38)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { default as hanoi } from './others/hanoi';\nexport { default as hanoiStack } from './others/hanoi';\nexport { default as baseConverter } from './others/base-converter';\nexport { default as decimalToBinary } from './others/base-converter';\nexport { default as parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://PacktDataStructuresAlgorithms/webpack/universalModuleDefinition","webpack://PacktDataStructuresAlgorithms/webpack/bootstrap","webpack://PacktDataStructuresAlgorithms/./src/js/util.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/min-max-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/linked-list-models.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/queue.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/quicksort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/insertion-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/node.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/binary-search-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/dictionary.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/doubly-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/deque.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/avl-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/sequential-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/interpolation-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/shell-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/selection-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/radix-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/merge-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/counting-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bucket-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort-improved.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/shuffle/fisher–yates.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/kruskal.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/prim.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/floyd-warshall.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/dijkstra.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/depth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/breadth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/graph.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/heap-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/heap.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/fibonacci.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/factorial.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-separate-chaining.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/set.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/sorted-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/circular-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/palindrome-checker.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hot-potato.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/balanced-symbols.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/base-converter.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hanoi.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-array.js","webpack://PacktDataStructuresAlgorithms/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","lesserEquals","a","b","compareFn","comp","Compare","LESS_THAN","EQUALS","biggerEquals","BIGGER_THAN","defaultCompare","defaultEquals","defaultToString","item","undefined","String","toString","swap","array","_ref","reverseCompare","defaultDiff","Number","DOES_NOT_EXIST","ValuePair","key","_classCallCheck","this","LinkedList","equalsFn","arguments","length","_util","count","head","element","node","_linkedListModels","Node","current","next","index","previous","getElementAt","indexOf","removeAt","size","objString","Stack","items","isEmpty","result","findMaxValue","max","findMinValue","min","DoublyNode","prev","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","Queue","lowestCount","quick","left","right","pivot","Math","floor","j","partition","quickSort","insertionSort","temp","BinarySearchTree","_node","insertNode","searchNode","callback","inOrderTraverseNode","preOrderTraverseNode","postOrderTraverseNode","minNode","maxNode","removeNode","aux","Dictionary","toStrFn","table","tableKey","_valuePair","valuePair","hasKey","keyValues","map","values","callbackFn","valuePairs","keys","DoublyLinkedList","tail","_get","Deque","addBack","BalanceFactor","UNBALANCED_RIGHT","SLIGHTLY_UNBALANCED_RIGHT","BALANCED","SLIGHTLY_UNBALANCED_LEFT","UNBALANCED_LEFT","AVLTree","getNodeHeight","tmp","rotationRR","rotationLL","heightDifference","balanceFactor","getBalanceFactor","rotationLR","rotationRL","sequentialSearch","interpolationSearch","diffFn","low","high","position","delta","binarySearch","sortedArray","_quicksort","mid","shellSort","increment","selectionSort","indexMin","radixSort","radixBase","minValue","_minMaxSearch","maxValue","significantDigit","countingSortForRadix","getBucketIndex","bucketsIndex","buckets","mergeSort","_array","middle","slice","push","concat","merge","countingSort","sortedIndex","counts","Array","forEach","bucketSort","bucketSize","_insertionSort","apply","_toConsumableArray","sortBuckets","bucketCount","createBuckets","modifiedBubbleSort","bubbleSort","shuffle","currentIndex","randomIndex","random","INF","MAX_SAFE_INTEGER","find","parent","union","kruskal","graph","ne","u","v","cost","initializeCost","minKey","visited","minIndex","prim","floydWarshall","dist","isFinite","Infinity","k","minDistance","dijkstra","src","Colors","WHITE","GREY","BLACK","initializeColor","vertices","color","depthFirstSearchVisit","adjList","neighbors","w","DFSVisit","depthFirstSearch","getVertices","getAdjList","f","time","DFS","discovery","finished","predecessors","breadthFirstSearch","startVertex","queue","_queue2","default","enqueue","dequeue","BFS","distances","Graph","isDirected","_dictionary2","includes","set","addVertex","heapify","heapSize","largest","buildMaxHeap","MinHeap","heap","siftUp","getLeftIndex","getRightIndex","siftDown","getParentIndex","shift","removedValue","pop","maxIndex","MaxHeap","fibonacci","fibonacciIterative","fibNMinus2","fibNMinus1","fibN","fibonacciMemoization","memo","fibonacciMem","num","factorialIterative","number","total","factorial","ValuePairLazy","isDeleted","HashTableLinearProbingLazy","hash","charCodeAt","loseloseHashCode","hashCode","_valuePairLazy","HashTableLinearProbing","verifyRemoveSideEffect","removedPosition","posHash","HashTableSeparateChaining","_linkedList2","linkedList","getHead","remove","HashTable","Set","has","otherSet","unionSet","add","intersectionSet","otherValues","biggerSet","smallerSet","differenceSet","isSubset","every","StackLinkedList","_doublyLinkedList2","clear","SortedLinkedList","getIndexNextSortedElement","pos","CircularLinkedList","removed","palindromeChecker","aString","deque","_deque2","lowerString","toLocaleLowerCase","split","join","isEqual","firstChar","lastChar","charAt","removeFront","removeBack","hotPotato","elementsList","elimitatedList","eliminated","winner","parenthesesChecker","symbols","stack","_stack2","balanced","symbol","top","decimalToBinary","decNumber","remStack","rem","binaryString","baseConverter","base","baseString","hanoiStack","plates","source","dest","helper","towerOfHanoi","sourceName","helperName","destName","moves","move","hanoi","StackArray","util"],"mappings":"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","file":"PacktDataStructuresAlgorithms.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"PacktDataStructuresAlgorithms\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PacktDataStructuresAlgorithms\"] = factory();\n\telse\n\t\troot[\"PacktDataStructuresAlgorithms\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 53);\n","export const Compare = {\n LESS_THAN: -1,\n BIGGER_THAN: 1,\n EQUALS: 0\n};\n\nexport const DOES_NOT_EXIST = -1;\n\nexport function lesserEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.LESS_THAN || comp === Compare.EQUALS;\n}\n\nexport function biggerEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS;\n}\n\nexport function defaultCompare(a, b) {\n if (a === b) {\n return 0;\n }\n return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN;\n}\n\nexport function defaultEquals(a, b) {\n return a === b;\n}\n\nexport function defaultToString(item) {\n if (item === null) {\n return 'NULL';\n } else if (item === undefined) {\n return 'UNDEFINED';\n } else if (typeof item === 'string' || item instanceof String) {\n return `${item}`;\n }\n return item.toString();\n}\n\nexport function swap(array, a, b) {\n /* const temp = array[a];\n array[a] = array[b];\n array[b] = temp; */\n [array[a], array[b]] = [array[b], array[a]];\n}\nexport function reverseCompare(compareFn) {\n return (a, b) => compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/js/index.js b/src/js/index.js index 5e16442e..7ca4bd6d 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -6,11 +6,11 @@ export const util = _util; // chapter 03 export { default as StackArray } from './data-structures/stack-array'; export { default as Stack } from './data-structures/stack'; -export { default as hanoi } from './others/hanoi'; -export { default as hanoiStack } from './others/hanoi'; -export { default as baseConverter } from './others/base-converter'; -export { default as decimalToBinary } from './others/base-converter'; -export { default as parenthesesChecker } from './others/balanced-symbols'; +export { hanoi } from './others/hanoi'; +export { hanoiStack } from './others/hanoi'; +export { baseConverter } from './others/base-converter'; +export { decimalToBinary } from './others/base-converter'; +export { parenthesesChecker } from './others/balanced-symbols'; // chapter 04 export { default as Queue } from './data-structures/queue'; From f79544ee3d602f52e675828f2176402485b2056d Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sun, 8 Apr 2018 17:03:25 +0000 Subject: [PATCH 078/188] chore(package): update dependencies --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1f3edd60..35d8ee07 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ }, "devDependencies": { "@types/chai": "^4.1.2", - "@types/mocha": "^2.2.48", + "@types/mocha": "^5.0.0", "babel-cli": "^6.26.0", "babel-core": "^6.26.0", "babel-eslint": "^8.2.2", From 8fa8f269f2e7fb52122ec26491b19e31e4adca92 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sun, 8 Apr 2018 17:03:28 +0000 Subject: [PATCH 079/188] docs(readme): add Greenkeeper badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 93dad51f..96275915 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ Learning JavaScript Data Structures and Algorithms ==================================== +[![Greenkeeper badge](https://badges.greenkeeper.io/loiane/javascript-datastructures-algorithms.svg)](https://greenkeeper.io/) + [![Build Status](https://travis-ci.org/loiane/javascript-datastructures-algorithms.svg?branch=third-edition)](https://travis-ci.org/loiane/javascript-datastructures-algorithms) [![codecov](https://codecov.io/gh/loiane/javascript-datastructures-algorithms/branch/third-edition/graph/badge.svg)](https://codecov.io/gh/loiane/javascript-datastructures-algorithms) From 247dff256ec666ff0c40a9919534161cb9965f7e Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 13:04:59 -0400 Subject: [PATCH 080/188] updated readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 93dad51f..2eca3bca 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,10 @@ Learning JavaScript Data Structures and Algorithms [![Build Status](https://travis-ci.org/loiane/javascript-datastructures-algorithms.svg?branch=third-edition)](https://travis-ci.org/loiane/javascript-datastructures-algorithms) [![codecov](https://codecov.io/gh/loiane/javascript-datastructures-algorithms/branch/third-edition/graph/badge.svg)](https://codecov.io/gh/loiane/javascript-datastructures-algorithms) +[![devDependencies Status](https://david-dm.org/loiane/javascript-datastructures-algorithms/dev-status.svg)](https://david-dm.org/loiane/javascript-datastructures-algorithms?type=dev) +[![dependencies Status](https://david-dm.org/loiane/javascript-datastructures-algorithms/status.svg)](https://david-dm.org/loiane/javascript-datastructures-algorithms) +[![Greenkeeper badge](https://badges.greenkeeper.io/loiane/javascript-datastructures-algorithms.svg.svg)](https://greenkeeper.io/) + Source code of **Learning JavaScript Data Structures and Algorithms** book, third edition. From 1b121dcf828a64b9b2e6f99560c2696c465a8cd7 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 13:07:40 -0400 Subject: [PATCH 081/188] updated dependencies --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1f3edd60..35d8ee07 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ }, "devDependencies": { "@types/chai": "^4.1.2", - "@types/mocha": "^2.2.48", + "@types/mocha": "^5.0.0", "babel-cli": "^6.26.0", "babel-core": "^6.26.0", "babel-eslint": "^8.2.2", From bbdce77bbb7bb61e9f1afcbeea015c86969987c0 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 13:09:34 -0400 Subject: [PATCH 082/188] updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2eca3bca..40d17aaf 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Learning JavaScript Data Structures and Algorithms [![codecov](https://codecov.io/gh/loiane/javascript-datastructures-algorithms/branch/third-edition/graph/badge.svg)](https://codecov.io/gh/loiane/javascript-datastructures-algorithms) [![devDependencies Status](https://david-dm.org/loiane/javascript-datastructures-algorithms/dev-status.svg)](https://david-dm.org/loiane/javascript-datastructures-algorithms?type=dev) [![dependencies Status](https://david-dm.org/loiane/javascript-datastructures-algorithms/status.svg)](https://david-dm.org/loiane/javascript-datastructures-algorithms) -[![Greenkeeper badge](https://badges.greenkeeper.io/loiane/javascript-datastructures-algorithms.svg.svg)](https://greenkeeper.io/) +[![Greenkeeper badge](https://badges.greenkeeper.io/loiane/javascript-datastructures-algorithms.svg)](https://greenkeeper.io/) Source code of **Learning JavaScript Data Structures and Algorithms** book, third edition. From 0a68c19d2dfde174c629f8a8287281ac0690ccbe Mon Sep 17 00:00:00 2001 From: Loiane Groner Date: Sun, 8 Apr 2018 13:19:50 -0400 Subject: [PATCH 083/188] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 6c414eab..40d17aaf 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ Learning JavaScript Data Structures and Algorithms ==================================== -[![Greenkeeper badge](https://badges.greenkeeper.io/loiane/javascript-datastructures-algorithms.svg)](https://greenkeeper.io/) - [![Build Status](https://travis-ci.org/loiane/javascript-datastructures-algorithms.svg?branch=third-edition)](https://travis-ci.org/loiane/javascript-datastructures-algorithms) [![codecov](https://codecov.io/gh/loiane/javascript-datastructures-algorithms/branch/third-edition/graph/badge.svg)](https://codecov.io/gh/loiane/javascript-datastructures-algorithms) [![devDependencies Status](https://david-dm.org/loiane/javascript-datastructures-algorithms/dev-status.svg)](https://david-dm.org/loiane/javascript-datastructures-algorithms?type=dev) From 3c0f57e3daa4bd9de0ed88ac36d7062c7e1f7545 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 13:22:10 -0400 Subject: [PATCH 084/188] updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 40d17aaf..ad8f6b21 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Learning JavaScript Data Structures and Algorithms ==================================== [![Build Status](https://travis-ci.org/loiane/javascript-datastructures-algorithms.svg?branch=third-edition)](https://travis-ci.org/loiane/javascript-datastructures-algorithms) -[![codecov](https://codecov.io/gh/loiane/javascript-datastructures-algorithms/branch/third-edition/graph/badge.svg)](https://codecov.io/gh/loiane/javascript-datastructures-algorithms) +[![codecov](https://codecov.io/gh/loiane/javascript-datastructures-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/loiane/javascript-datastructures-algorithms) [![devDependencies Status](https://david-dm.org/loiane/javascript-datastructures-algorithms/dev-status.svg)](https://david-dm.org/loiane/javascript-datastructures-algorithms?type=dev) [![dependencies Status](https://david-dm.org/loiane/javascript-datastructures-algorithms/status.svg)](https://david-dm.org/loiane/javascript-datastructures-algorithms) [![Greenkeeper badge](https://badges.greenkeeper.io/loiane/javascript-datastructures-algorithms.svg)](https://greenkeeper.io/) From d64478d689135792fcde7f88d2d83d3a6c23a4d9 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 13:32:07 -0400 Subject: [PATCH 085/188] [Algorithm Design and Techniques] --- examples/chapter14/01-DC-BinarySearch.html | 11 +++++++++++ examples/chapter14/01-DC-BinarySearch.js | 0 examples/chapter14/02-MinCoinChangeDP.html | 11 +++++++++++ examples/chapter14/02-MinCoinChangeDP.js | 0 examples/chapter14/03-MinCoinChangeGreedy.html | 11 +++++++++++ examples/chapter14/03-MinCoinChangeGreedy.js | 0 examples/chapter14/04-KnapsackProblemDP.html | 11 +++++++++++ examples/chapter14/04-KnapsackProblemDP.js | 0 examples/chapter14/05-KnapSackProblemRecursive.html | 11 +++++++++++ examples/chapter14/05-KnapSackProblemRecursive.js | 0 examples/chapter14/06-KnapSackProblemGreedy.html | 11 +++++++++++ examples/chapter14/06-KnapSackProblemGreedy.js | 0 examples/chapter14/07-LongestCommonSubsequenceDP.html | 11 +++++++++++ examples/chapter14/07-LongestCommonSubsequenceDP.js | 0 .../08-LongestCommonSubsequenceRecursive.html | 11 +++++++++++ .../chapter14/08-LongestCommonSubsequenceRecursive.js | 0 .../chapter14/09-MatrixChainMultiplicationDP.html | 11 +++++++++++ examples/chapter14/09-MatrixChainMultiplicationDP.js | 0 .../10-MatrixChainMultiplicationRecursive.html | 11 +++++++++++ .../10-MatrixChainMultiplicationRecursive.js | 0 examples/chapter14/11-RatInMaze.html | 11 +++++++++++ examples/chapter14/11-RatInMaze.js | 0 examples/chapter14/12-SudokuSolver.html | 11 +++++++++++ examples/chapter14/12-SudokuSolver.js | 0 examples/chapter14/13-IntroFunctionalProgramming.html | 11 +++++++++++ examples/chapter14/13-IntroFunctionalProgramming.js | 0 26 files changed, 143 insertions(+) create mode 100644 examples/chapter14/01-DC-BinarySearch.html create mode 100644 examples/chapter14/01-DC-BinarySearch.js create mode 100644 examples/chapter14/02-MinCoinChangeDP.html create mode 100644 examples/chapter14/02-MinCoinChangeDP.js create mode 100644 examples/chapter14/03-MinCoinChangeGreedy.html create mode 100644 examples/chapter14/03-MinCoinChangeGreedy.js create mode 100644 examples/chapter14/04-KnapsackProblemDP.html create mode 100644 examples/chapter14/04-KnapsackProblemDP.js create mode 100644 examples/chapter14/05-KnapSackProblemRecursive.html create mode 100644 examples/chapter14/05-KnapSackProblemRecursive.js create mode 100644 examples/chapter14/06-KnapSackProblemGreedy.html create mode 100644 examples/chapter14/06-KnapSackProblemGreedy.js create mode 100644 examples/chapter14/07-LongestCommonSubsequenceDP.html create mode 100644 examples/chapter14/07-LongestCommonSubsequenceDP.js create mode 100644 examples/chapter14/08-LongestCommonSubsequenceRecursive.html create mode 100644 examples/chapter14/08-LongestCommonSubsequenceRecursive.js create mode 100644 examples/chapter14/09-MatrixChainMultiplicationDP.html create mode 100644 examples/chapter14/09-MatrixChainMultiplicationDP.js create mode 100644 examples/chapter14/10-MatrixChainMultiplicationRecursive.html create mode 100644 examples/chapter14/10-MatrixChainMultiplicationRecursive.js create mode 100644 examples/chapter14/11-RatInMaze.html create mode 100644 examples/chapter14/11-RatInMaze.js create mode 100644 examples/chapter14/12-SudokuSolver.html create mode 100644 examples/chapter14/12-SudokuSolver.js create mode 100644 examples/chapter14/13-IntroFunctionalProgramming.html create mode 100644 examples/chapter14/13-IntroFunctionalProgramming.js diff --git a/examples/chapter14/01-DC-BinarySearch.html b/examples/chapter14/01-DC-BinarySearch.html new file mode 100644 index 00000000..b110b636 --- /dev/null +++ b/examples/chapter14/01-DC-BinarySearch.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/01-DC-BinarySearch.js b/examples/chapter14/01-DC-BinarySearch.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/02-MinCoinChangeDP.html b/examples/chapter14/02-MinCoinChangeDP.html new file mode 100644 index 00000000..4c2027b3 --- /dev/null +++ b/examples/chapter14/02-MinCoinChangeDP.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/02-MinCoinChangeDP.js b/examples/chapter14/02-MinCoinChangeDP.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/03-MinCoinChangeGreedy.html b/examples/chapter14/03-MinCoinChangeGreedy.html new file mode 100644 index 00000000..92b0618f --- /dev/null +++ b/examples/chapter14/03-MinCoinChangeGreedy.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/03-MinCoinChangeGreedy.js b/examples/chapter14/03-MinCoinChangeGreedy.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/04-KnapsackProblemDP.html b/examples/chapter14/04-KnapsackProblemDP.html new file mode 100644 index 00000000..1f06c983 --- /dev/null +++ b/examples/chapter14/04-KnapsackProblemDP.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/04-KnapsackProblemDP.js b/examples/chapter14/04-KnapsackProblemDP.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/05-KnapSackProblemRecursive.html b/examples/chapter14/05-KnapSackProblemRecursive.html new file mode 100644 index 00000000..610d7310 --- /dev/null +++ b/examples/chapter14/05-KnapSackProblemRecursive.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/05-KnapSackProblemRecursive.js b/examples/chapter14/05-KnapSackProblemRecursive.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/06-KnapSackProblemGreedy.html b/examples/chapter14/06-KnapSackProblemGreedy.html new file mode 100644 index 00000000..0d2e3c04 --- /dev/null +++ b/examples/chapter14/06-KnapSackProblemGreedy.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/06-KnapSackProblemGreedy.js b/examples/chapter14/06-KnapSackProblemGreedy.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/07-LongestCommonSubsequenceDP.html b/examples/chapter14/07-LongestCommonSubsequenceDP.html new file mode 100644 index 00000000..f4b8b8a8 --- /dev/null +++ b/examples/chapter14/07-LongestCommonSubsequenceDP.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/07-LongestCommonSubsequenceDP.js b/examples/chapter14/07-LongestCommonSubsequenceDP.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/08-LongestCommonSubsequenceRecursive.html b/examples/chapter14/08-LongestCommonSubsequenceRecursive.html new file mode 100644 index 00000000..25fa3a3f --- /dev/null +++ b/examples/chapter14/08-LongestCommonSubsequenceRecursive.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/08-LongestCommonSubsequenceRecursive.js b/examples/chapter14/08-LongestCommonSubsequenceRecursive.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/09-MatrixChainMultiplicationDP.html b/examples/chapter14/09-MatrixChainMultiplicationDP.html new file mode 100644 index 00000000..110165d7 --- /dev/null +++ b/examples/chapter14/09-MatrixChainMultiplicationDP.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/09-MatrixChainMultiplicationDP.js b/examples/chapter14/09-MatrixChainMultiplicationDP.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/10-MatrixChainMultiplicationRecursive.html b/examples/chapter14/10-MatrixChainMultiplicationRecursive.html new file mode 100644 index 00000000..eba9ceaf --- /dev/null +++ b/examples/chapter14/10-MatrixChainMultiplicationRecursive.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/10-MatrixChainMultiplicationRecursive.js b/examples/chapter14/10-MatrixChainMultiplicationRecursive.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/11-RatInMaze.html b/examples/chapter14/11-RatInMaze.html new file mode 100644 index 00000000..da73582f --- /dev/null +++ b/examples/chapter14/11-RatInMaze.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/11-RatInMaze.js b/examples/chapter14/11-RatInMaze.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/12-SudokuSolver.html b/examples/chapter14/12-SudokuSolver.html new file mode 100644 index 00000000..b3126287 --- /dev/null +++ b/examples/chapter14/12-SudokuSolver.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/12-SudokuSolver.js b/examples/chapter14/12-SudokuSolver.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/chapter14/13-IntroFunctionalProgramming.html b/examples/chapter14/13-IntroFunctionalProgramming.html new file mode 100644 index 00000000..0d7cd0ed --- /dev/null +++ b/examples/chapter14/13-IntroFunctionalProgramming.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter14/13-IntroFunctionalProgramming.js b/examples/chapter14/13-IntroFunctionalProgramming.js new file mode 100644 index 00000000..e69de29b From aac21d032df7baba639a04714f95955ea693240c Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 13:56:31 -0400 Subject: [PATCH 086/188] [Algorithm Design and Techniques] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- .../PacktDataStructuresAlgorithms.min.js.map | 2 +- examples/chapter14/02-MinCoinChangeDP.js | 1 + examples/chapter14/11-RatInMaze.js | 10 ++++ examples/chapter14/12-SudokuSolver.js | 15 ++++++ examples/index.html | 47 +++++++++++++++++++ src/js/algorithms/backtracking/rat-in-maze.js | 2 +- src/js/index.js | 6 +++ 8 files changed, 82 insertions(+), 3 deletions(-) diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index bfe6713b..e81ec615 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=53)}([function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lesserEquals=function(e,n,r){var i=r(e,n);return i===t.LESS_THAN||i===t.EQUALS},e.biggerEquals=function(e,n,r){var i=r(e,n);return i===t.BIGGER_THAN||i===t.EQUALS},e.defaultCompare=function(e,n){return e===n?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(38)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sudokuSolver=function(e){return!0===function e(r){var i=0,o=0,u=!1;for(i=0;i=0&&n>=0&&t=0&&(o=t(u)),u>=0&&(o.length2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(10),n(9)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(41)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://PacktDataStructuresAlgorithms/webpack/universalModuleDefinition","webpack://PacktDataStructuresAlgorithms/webpack/bootstrap","webpack://PacktDataStructuresAlgorithms/./src/js/util.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/min-max-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/linked-list-models.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/queue.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/quicksort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/insertion-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/node.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/binary-search-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/dictionary.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/doubly-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/deque.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/heap-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/sudoku-solver.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/rat-in-maze.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/sequential-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/interpolation-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/shell-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/selection-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/radix-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/merge-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/counting-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bucket-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort-improved.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/shuffle/fisher–yates.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/kruskal.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/prim.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/floyd-warshall.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/dijkstra.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/depth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/breadth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/graph.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/heap.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/avl-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/fibonacci.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/factorial.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-separate-chaining.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/set.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/sorted-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/circular-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/palindrome-checker.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hot-potato.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/balanced-symbols.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/base-converter.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hanoi.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-array.js","webpack://PacktDataStructuresAlgorithms/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","lesserEquals","a","b","compareFn","comp","Compare","LESS_THAN","EQUALS","biggerEquals","BIGGER_THAN","defaultCompare","defaultEquals","defaultToString","item","undefined","String","toString","swap","array","_ref","reverseCompare","defaultDiff","Number","DOES_NOT_EXIST","ValuePair","key","_classCallCheck","this","LinkedList","equalsFn","arguments","length","_util","count","head","element","node","_linkedListModels","Node","current","next","index","previous","getElementAt","indexOf","removeAt","size","objString","Stack","items","isEmpty","result","findMaxValue","max","findMinValue","min","DoublyNode","prev","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","Queue","lowestCount","quick","left","right","pivot","Math","floor","j","partition","quickSort","insertionSort","temp","BinarySearchTree","_node","insertNode","searchNode","callback","inOrderTraverseNode","preOrderTraverseNode","postOrderTraverseNode","minNode","maxNode","removeNode","aux","Dictionary","toStrFn","table","tableKey","_valuePair","valuePair","hasKey","keyValues","map","values","callbackFn","valuePairs","keys","DoublyLinkedList","tail","_get","Deque","addBack","heapify","heapSize","largest","buildMaxHeap","sudokuSolver","matrix","solveSudoku","row","col","checkBlankSpaces","UNASSIGNED","num","isSafe","usedInRow","usedInCol","boxStartRow","boxStartCol","usedInBox","ratInAMaze","maze","solution","findPath","x","y","minCoinChange","coins","amount","cache","makeChange","newMin","newAmount","coin","concat","sequentialSearch","interpolationSearch","diffFn","low","high","position","delta","binarySearch","sortedArray","_quicksort","mid","shellSort","increment","selectionSort","indexMin","radixSort","radixBase","minValue","_minMaxSearch","maxValue","significantDigit","countingSortForRadix","getBucketIndex","bucketsIndex","buckets","mergeSort","_array","middle","slice","push","merge","countingSort","sortedIndex","counts","Array","forEach","bucketSort","bucketSize","_insertionSort","apply","_toConsumableArray","sortBuckets","bucketCount","createBuckets","modifiedBubbleSort","bubbleSort","shuffle","currentIndex","randomIndex","random","INF","MAX_SAFE_INTEGER","find","parent","union","kruskal","graph","ne","u","v","cost","initializeCost","minKey","visited","minIndex","prim","floydWarshall","dist","isFinite","Infinity","k","minDistance","dijkstra","src","Colors","WHITE","GREY","BLACK","initializeColor","vertices","color","depthFirstSearchVisit","adjList","neighbors","w","DFSVisit","depthFirstSearch","getVertices","getAdjList","f","time","DFS","discovery","finished","predecessors","breadthFirstSearch","startVertex","queue","_queue2","default","enqueue","dequeue","BFS","distances","Graph","isDirected","_dictionary2","includes","set","addVertex","MinHeap","heap","siftUp","getLeftIndex","getRightIndex","siftDown","getParentIndex","shift","removedValue","pop","maxIndex","MaxHeap","BalanceFactor","UNBALANCED_RIGHT","SLIGHTLY_UNBALANCED_RIGHT","BALANCED","SLIGHTLY_UNBALANCED_LEFT","UNBALANCED_LEFT","AVLTree","getNodeHeight","tmp","rotationRR","rotationLL","heightDifference","balanceFactor","getBalanceFactor","rotationLR","rotationRL","fibonacci","fibonacciIterative","fibNMinus2","fibNMinus1","fibN","fibonacciMemoization","memo","fibonacciMem","factorialIterative","number","total","factorial","ValuePairLazy","isDeleted","HashTableLinearProbingLazy","hash","charCodeAt","loseloseHashCode","hashCode","_valuePairLazy","HashTableLinearProbing","verifyRemoveSideEffect","removedPosition","posHash","HashTableSeparateChaining","_linkedList2","linkedList","getHead","remove","HashTable","Set","has","otherSet","unionSet","add","intersectionSet","otherValues","biggerSet","smallerSet","differenceSet","isSubset","every","StackLinkedList","_doublyLinkedList2","clear","SortedLinkedList","getIndexNextSortedElement","pos","CircularLinkedList","removed","palindromeChecker","aString","deque","_deque2","lowerString","toLocaleLowerCase","split","join","isEqual","firstChar","lastChar","charAt","removeFront","removeBack","hotPotato","elementsList","elimitatedList","eliminated","winner","parenthesesChecker","symbols","stack","_stack2","balanced","symbol","top","decimalToBinary","decNumber","remStack","rem","binaryString","baseConverter","base","baseString","hanoiStack","plates","source","dest","helper","towerOfHanoi","sourceName","helperName","destName","moves","move","hanoi","StackArray","util"],"mappings":"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","file":"PacktDataStructuresAlgorithms.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"PacktDataStructuresAlgorithms\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PacktDataStructuresAlgorithms\"] = factory();\n\telse\n\t\troot[\"PacktDataStructuresAlgorithms\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 56);\n","export const Compare = {\n LESS_THAN: -1,\n BIGGER_THAN: 1,\n EQUALS: 0\n};\n\nexport const DOES_NOT_EXIST = -1;\n\nexport function lesserEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.LESS_THAN || comp === Compare.EQUALS;\n}\n\nexport function biggerEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS;\n}\n\nexport function defaultCompare(a, b) {\n if (a === b) {\n return 0;\n }\n return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN;\n}\n\nexport function defaultEquals(a, b) {\n return a === b;\n}\n\nexport function defaultToString(item) {\n if (item === null) {\n return 'NULL';\n } else if (item === undefined) {\n return 'UNDEFINED';\n } else if (typeof item === 'string' || item instanceof String) {\n return `${item}`;\n }\n return item.toString();\n}\n\nexport function swap(array, a, b) {\n /* const temp = array[a];\n array[a] = array[b];\n array[b] = temp; */\n [array[a], array[b]] = [array[b], array[a]];\n}\nexport function reverseCompare(compareFn) {\n return (a, b) => compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","const UNASSIGNED = 0;\n\nfunction usedInRow(matrix, row, num) {\n for (let col = 0; col < matrix.length; col++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInCol(matrix, col, num) {\n for (let row = 0; row < matrix.length; row++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInBox(matrix, boxStartRow, boxStartCol, num) {\n for (let row = 0; row < 3; row++) {\n for (let col = 0; col < 3; col++) {\n if (matrix[row + boxStartRow][col + boxStartCol] === num) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isSafe(matrix, row, col, num) {\n return (\n !usedInRow(matrix, row, num) &&\n !usedInCol(matrix, col, num) &&\n !usedInBox(matrix, row - (row % 3), col - (col % 3), num)\n );\n}\nfunction solveSudoku(matrix) {\n let row = 0;\n let col = 0;\n let checkBlankSpaces = false;\n\n for (row = 0; row < matrix.length; row++) {\n for (col = 0; col < matrix[row].length; col++) {\n if (matrix[row][col] === UNASSIGNED) {\n checkBlankSpaces = true;\n break;\n }\n }\n if (checkBlankSpaces === true) {\n break;\n }\n }\n if (checkBlankSpaces === false) {\n return true;\n }\n\n for (let num = 1; num <= 9; num++) {\n if (isSafe(matrix, row, col, num)) {\n matrix[row][col] = num;\n if (solveSudoku(matrix)) {\n return true;\n }\n matrix[row][col] = UNASSIGNED;\n }\n }\n return false;\n}\n\nexport function sudokuSolver(matrix) {\n if (solveSudoku(matrix) === true) {\n return matrix;\n }\n return 'NO SOLUTION EXISTS!';\n}\n","function isSafe(maze, x, y) {\n const n = maze.length;\n if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {\n return true;\n }\n return false;\n}\n\nfunction findPath(maze, x, y, solution) {\n const n = maze.length;\n if (x === n - 1 && y === n - 1) {\n solution[x][y] = 1;\n return true;\n }\n if (isSafe(maze, x, y) === true) {\n solution[x][y] = 1;\n if (findPath(maze, x + 1, y, solution)) {\n return true;\n }\n if (findPath(maze, x, y + 1, solution)) {\n return true;\n }\n solution[x][y] = 0;\n return false;\n }\n return false;\n}\n\nexport function ratInAMaze(maze) {\n const solution = [];\n for (let i = 0; i < maze.length; i++) {\n solution[i] = [];\n for (let j = 0; j < maze[i].length; j++) {\n solution[i][j] = 0;\n }\n }\n if (findPath(maze, 0, 0, solution) === true) {\n return solution;\n }\n return 'NO PATH FOUND';\n}\n","export function minCoinChange(coins, amount) {\n const cache = [];\n\n const makeChange = (value) => {\n if (!value) {\n return [];\n }\n if (cache[value]) {\n return cache[value];\n }\n let min = [];\n let newMin;\n let newAmount;\n for (let i = 0; i < coins.length; i++) {\n const coin = coins[i];\n newAmount = value - coin;\n if (newAmount >= 0) {\n newMin = makeChange(newAmount);\n }\n if (\n newAmount >= 0 &&\n (newMin.length < min.length - 1 || !min.length) &&\n (newMin.length || !newAmount)\n ) {\n min = [coin].concat(newMin);\n // console.log('new Min ' + min + ' for ' + amount);\n }\n }\n return (cache[value] = min);\n };\n return makeChange(amount);\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n\n// chapter 14\n// export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive';\nexport { minCoinChange } from './algorithms/dynamic-programing/min-coin-change';\nexport { ratInAMaze } from './algorithms/backtracking/rat-in-maze';\nexport { sudokuSolver } from './algorithms/backtracking/sudoku-solver';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/chapter14/02-MinCoinChangeDP.js b/examples/chapter14/02-MinCoinChangeDP.js index e69de29b..d31673bf 100644 --- a/examples/chapter14/02-MinCoinChangeDP.js +++ b/examples/chapter14/02-MinCoinChangeDP.js @@ -0,0 +1 @@ +const { bubbleSort } = PacktDataStructuresAlgorithms; diff --git a/examples/chapter14/11-RatInMaze.js b/examples/chapter14/11-RatInMaze.js index e69de29b..221e7f19 100644 --- a/examples/chapter14/11-RatInMaze.js +++ b/examples/chapter14/11-RatInMaze.js @@ -0,0 +1,10 @@ +const { ratInAMaze } = PacktDataStructuresAlgorithms; + +const maze = [ + [1, 0, 0, 0], + [1, 1, 1, 1], + [0, 0, 1, 0], + [0, 1, 1, 1] +]; + +console.log(ratInAMaze(maze)); diff --git a/examples/chapter14/12-SudokuSolver.js b/examples/chapter14/12-SudokuSolver.js index e69de29b..bf52ddf3 100644 --- a/examples/chapter14/12-SudokuSolver.js +++ b/examples/chapter14/12-SudokuSolver.js @@ -0,0 +1,15 @@ +const { sudokuSolver } = PacktDataStructuresAlgorithms; + +const sudokuGrid = [ + [5, 3, 0, 0, 7, 0, 0, 0, 0], + [6, 0, 0, 1, 9, 5, 0, 0, 0], + [0, 9, 8, 0, 0, 0, 0, 6, 0], + [8, 0, 0, 0, 6, 0, 0, 0, 3], + [4, 0, 0, 8, 0, 3, 0, 0, 1], + [7, 0, 0, 0, 2, 0, 0, 0, 6], + [0, 6, 0, 0, 0, 0, 2, 8, 0], + [0, 0, 0, 4, 1, 9, 0, 0, 5], + [0, 0, 0, 0, 8, 0, 0, 7, 9] +]; + +console.log(sudokuSolver(sudokuGrid)); diff --git a/examples/index.html b/examples/index.html index 4e1f4cb3..51d70f57 100644 --- a/examples/index.html +++ b/examples/index.html @@ -49,6 +49,10 @@ 09 10 11 + 12 + 13 + 14 + 15
@@ -218,6 +222,49 @@
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+ +
diff --git a/src/js/algorithms/backtracking/rat-in-maze.js b/src/js/algorithms/backtracking/rat-in-maze.js index 36174e16..ff433130 100644 --- a/src/js/algorithms/backtracking/rat-in-maze.js +++ b/src/js/algorithms/backtracking/rat-in-maze.js @@ -34,7 +34,7 @@ export function ratInAMaze(maze) { solution[i][j] = 0; } } - if (findPath(maze, 0, 0, solution) === false) { + if (findPath(maze, 0, 0, solution) === true) { return solution; } return 'NO PATH FOUND'; diff --git a/src/js/index.js b/src/js/index.js index 7ca4bd6d..ee6cde5b 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -81,3 +81,9 @@ export { interpolationSearch } from './algorithms/search/interpolation-search'; export { sequentialSearch } from './algorithms/search/sequential-search'; export { findMaxValue } from './algorithms/search/min-max-search'; export { findMinValue } from './algorithms/search/min-max-search'; + +// chapter 14 +// export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive'; +export { minCoinChange } from './algorithms/dynamic-programing/min-coin-change'; +export { ratInAMaze } from './algorithms/backtracking/rat-in-maze'; +export { sudokuSolver } from './algorithms/backtracking/sudoku-solver'; From ab2dbaa505b5730c94ea6ac52f64338033c51c09 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 21:23:30 -0400 Subject: [PATCH 087/188] [Algorithm Design and Techniques] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- .../PacktDataStructuresAlgorithms.min.js.map | 2 +- examples/chapter14/02-MinCoinChangeDP.js | 6 ++++- examples/chapter14/03-MinCoinChangeGreedy.js | 5 ++++ examples/chapter14/04-KnapsackProblemDP.js | 8 +++++++ .../chapter14/05-KnapSackProblemRecursive.js | 8 +++++++ .../chapter14/06-KnapSackProblemGreedy.js | 7 ++++++ .../algorithms/dynamic-programing/knapsack.js | 4 ++-- .../search/binary-search-recursive.js | 24 +++++++++++++++++++ src/js/index.js | 9 ++++++- 10 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 src/js/algorithms/search/binary-search-recursive.js diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index e81ec615..1d81dbc2 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=56)}([function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lesserEquals=function(e,n,r){var i=r(e,n);return i===t.LESS_THAN||i===t.EQUALS},e.biggerEquals=function(e,n,r){var i=r(e,n);return i===t.BIGGER_THAN||i===t.EQUALS},e.defaultCompare=function(e,n){return e===n?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sudokuSolver=function(e){return!0===function e(r){var i=0,o=0,u=!1;for(i=0;i=0&&n>=0&&t=0&&(o=t(u)),u>=0&&(o.length2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(10),n(9)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(41)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.findMaxValue=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t=0&&n>=0&&tt)return e(t,n,r,i-1);var o=r[i-1]+e(t-n[i-1],n,r,i-1),u=e(t,n,r,i-1);return o>u?o:u}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";function t(e,t,n){for(var r=e,i=t;r>0&&i>0;)n[r][i]!==n[r-1][i]?(console.log("item "+r+" can be part of solution w,v: "+weights[r-1]+","+values[r-1]),i-=n[--r][i]):r--}Object.defineProperty(e,"__esModule",{value:!0}),e.knapSack=function(e,n,r,i){for(var o=[],u=0;u<=i;u++)o[u]=[];for(var a=0;a<=i;a++)for(var l=0;l<=e;l++)if(0===a||0===l)o[a][l]=0;else if(n[a-1]<=l){var f=r[a-1]+o[a-1][l-n[a-1]],s=o[a-1][l];o[a][l]=f>s?f:s}else o[a][l]=o[a-1][l];return t(i,e,o),o[i][e]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){for(var n=[],r=0,i=e.length;i>=0;i--)for(var o=e[i];r+o<=t;)n.push(o),r+=o;return n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){var n=[];return function t(r){if(!r)return[];if(n[r])return n[r];for(var i=[],o=void 0,u=void 0,a=0;a=0&&(o=t(u)),u>=0&&(o.length2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e).length-1;return function e(n,r,i,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultCompare;if(i<=o){var a=Math.floor((i+o)/2),l=n[a];return u(l,r)===t.Compare.LESS_THAN?e(n,r,a+1,o,u):u(l,r)===t.Compare.BIGGER_THAN?e(n,r,i,a-1,u):a}return t.DOES_NOT_EXIST}(e,r,0,o,i)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(4)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(10),n(9)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(46)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(7)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","const UNASSIGNED = 0;\n\nfunction usedInRow(matrix, row, num) {\n for (let col = 0; col < matrix.length; col++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInCol(matrix, col, num) {\n for (let row = 0; row < matrix.length; row++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInBox(matrix, boxStartRow, boxStartCol, num) {\n for (let row = 0; row < 3; row++) {\n for (let col = 0; col < 3; col++) {\n if (matrix[row + boxStartRow][col + boxStartCol] === num) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isSafe(matrix, row, col, num) {\n return (\n !usedInRow(matrix, row, num) &&\n !usedInCol(matrix, col, num) &&\n !usedInBox(matrix, row - (row % 3), col - (col % 3), num)\n );\n}\nfunction solveSudoku(matrix) {\n let row = 0;\n let col = 0;\n let checkBlankSpaces = false;\n\n for (row = 0; row < matrix.length; row++) {\n for (col = 0; col < matrix[row].length; col++) {\n if (matrix[row][col] === UNASSIGNED) {\n checkBlankSpaces = true;\n break;\n }\n }\n if (checkBlankSpaces === true) {\n break;\n }\n }\n if (checkBlankSpaces === false) {\n return true;\n }\n\n for (let num = 1; num <= 9; num++) {\n if (isSafe(matrix, row, col, num)) {\n matrix[row][col] = num;\n if (solveSudoku(matrix)) {\n return true;\n }\n matrix[row][col] = UNASSIGNED;\n }\n }\n return false;\n}\n\nexport function sudokuSolver(matrix) {\n if (solveSudoku(matrix) === true) {\n return matrix;\n }\n return 'NO SOLUTION EXISTS!';\n}\n","function isSafe(maze, x, y) {\n const n = maze.length;\n if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {\n return true;\n }\n return false;\n}\n\nfunction findPath(maze, x, y, solution) {\n const n = maze.length;\n if (x === n - 1 && y === n - 1) {\n solution[x][y] = 1;\n return true;\n }\n if (isSafe(maze, x, y) === true) {\n solution[x][y] = 1;\n if (findPath(maze, x + 1, y, solution)) {\n return true;\n }\n if (findPath(maze, x, y + 1, solution)) {\n return true;\n }\n solution[x][y] = 0;\n return false;\n }\n return false;\n}\n\nexport function ratInAMaze(maze) {\n const solution = [];\n for (let i = 0; i < maze.length; i++) {\n solution[i] = [];\n for (let j = 0; j < maze[i].length; j++) {\n solution[i][j] = 0;\n }\n }\n if (findPath(maze, 0, 0, solution) === true) {\n return solution;\n }\n return 'NO PATH FOUND';\n}\n","export function minCoinChange(coins, amount) {\n const cache = [];\n\n const makeChange = (value) => {\n if (!value) {\n return [];\n }\n if (cache[value]) {\n return cache[value];\n }\n let min = [];\n let newMin;\n let newAmount;\n for (let i = 0; i < coins.length; i++) {\n const coin = coins[i];\n newAmount = value - coin;\n if (newAmount >= 0) {\n newMin = makeChange(newAmount);\n }\n if (\n newAmount >= 0 &&\n (newMin.length < min.length - 1 || !min.length) &&\n (newMin.length || !newAmount)\n ) {\n min = [coin].concat(newMin);\n // console.log('new Min ' + min + ' for ' + amount);\n }\n }\n return (cache[value] = min);\n };\n return makeChange(amount);\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n\n// chapter 14\n// export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive';\nexport { minCoinChange } from './algorithms/dynamic-programing/min-coin-change';\nexport { ratInAMaze } from './algorithms/backtracking/rat-in-maze';\nexport { sudokuSolver } from './algorithms/backtracking/sudoku-solver';\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://PacktDataStructuresAlgorithms/webpack/universalModuleDefinition","webpack://PacktDataStructuresAlgorithms/webpack/bootstrap","webpack://PacktDataStructuresAlgorithms/./src/js/util.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/quicksort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/min-max-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/linked-list-models.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/queue.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/insertion-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/node.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/binary-search-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/dictionary.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/doubly-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/deque.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/breadth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/sudoku-solver.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/rat-in-maze.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/knapsack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/knapsack-recursive.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/knapsack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search-recursive.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/sequential-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/interpolation-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/shell-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/selection-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/radix-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/merge-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/counting-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bucket-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort-improved.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/shuffle/fisher–yates.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/kruskal.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/prim.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/floyd-warshall.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/dijkstra.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/depth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/graph.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/heap-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/heap.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/avl-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/fibonacci.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/factorial.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-separate-chaining.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/set.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/sorted-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/circular-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/palindrome-checker.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hot-potato.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/balanced-symbols.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/base-converter.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hanoi.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-array.js","webpack://PacktDataStructuresAlgorithms/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","lesserEquals","a","b","compareFn","comp","Compare","LESS_THAN","EQUALS","biggerEquals","BIGGER_THAN","defaultCompare","defaultEquals","defaultToString","item","undefined","String","toString","swap","array","_ref","reverseCompare","defaultDiff","Number","DOES_NOT_EXIST","ValuePair","key","_classCallCheck","this","LinkedList","equalsFn","arguments","length","_util","count","head","element","node","_linkedListModels","Node","current","next","index","previous","getElementAt","indexOf","removeAt","size","objString","Stack","items","isEmpty","result","quick","left","right","pivot","Math","floor","j","partition","quickSort","findMaxValue","max","findMinValue","min","DoublyNode","prev","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","Queue","lowestCount","insertionSort","temp","BinarySearchTree","_node","insertNode","searchNode","callback","inOrderTraverseNode","preOrderTraverseNode","postOrderTraverseNode","minNode","maxNode","removeNode","aux","Dictionary","toStrFn","table","tableKey","_valuePair","valuePair","hasKey","keyValues","map","values","callbackFn","valuePairs","keys","DoublyLinkedList","tail","_get","Deque","addBack","Colors","WHITE","GREY","BLACK","initializeColor","vertices","color","breadthFirstSearch","graph","startVertex","getVertices","adjList","getAdjList","queue","_queue2","default","enqueue","u","dequeue","neighbors","w","BFS","distances","predecessors","sudokuSolver","matrix","solveSudoku","row","col","checkBlankSpaces","UNASSIGNED","num","isSafe","usedInRow","usedInCol","boxStartRow","boxStartCol","usedInBox","ratInAMaze","maze","solution","findPath","x","y","knapSack","capacity","weights","load","val","findValues","kS","k","console","log","minCoinChange","coins","amount","change","total","coin","push","cache","makeChange","newMin","newAmount","concat","binarySearch","high","_quicksort","binarySearchRecursive","low","mid","sequentialSearch","interpolationSearch","diffFn","position","delta","sortedArray","shellSort","increment","selectionSort","indexMin","radixSort","radixBase","minValue","_minMaxSearch","maxValue","significantDigit","countingSortForRadix","getBucketIndex","bucketsIndex","buckets","mergeSort","_array","middle","slice","merge","countingSort","sortedIndex","counts","Array","forEach","bucketSort","bucketSize","_insertionSort","apply","_toConsumableArray","sortBuckets","bucketCount","createBuckets","modifiedBubbleSort","bubbleSort","shuffle","currentIndex","randomIndex","random","INF","MAX_SAFE_INTEGER","find","parent","union","kruskal","ne","v","cost","initializeCost","minKey","visited","minIndex","prim","floydWarshall","dist","isFinite","Infinity","minDistance","dijkstra","src","depthFirstSearchVisit","DFSVisit","depthFirstSearch","f","time","DFS","discovery","finished","Graph","isDirected","_dictionary2","includes","set","addVertex","heapify","heapSize","largest","buildMaxHeap","MinHeap","heap","siftUp","getLeftIndex","getRightIndex","siftDown","getParentIndex","shift","removedValue","pop","maxIndex","MaxHeap","BalanceFactor","UNBALANCED_RIGHT","SLIGHTLY_UNBALANCED_RIGHT","BALANCED","SLIGHTLY_UNBALANCED_LEFT","UNBALANCED_LEFT","AVLTree","getNodeHeight","tmp","rotationRR","rotationLL","heightDifference","balanceFactor","getBalanceFactor","rotationLR","rotationRL","fibonacci","fibonacciIterative","fibNMinus2","fibNMinus1","fibN","fibonacciMemoization","memo","fibonacciMem","factorialIterative","number","factorial","ValuePairLazy","isDeleted","HashTableLinearProbingLazy","hash","charCodeAt","loseloseHashCode","hashCode","_valuePairLazy","HashTableLinearProbing","verifyRemoveSideEffect","removedPosition","posHash","HashTableSeparateChaining","_linkedList2","linkedList","getHead","remove","HashTable","Set","has","otherSet","unionSet","add","intersectionSet","otherValues","biggerSet","smallerSet","differenceSet","isSubset","every","StackLinkedList","_doublyLinkedList2","clear","SortedLinkedList","getIndexNextSortedElement","pos","CircularLinkedList","removed","palindromeChecker","aString","deque","_deque2","lowerString","toLocaleLowerCase","split","join","isEqual","firstChar","lastChar","charAt","removeFront","removeBack","hotPotato","elementsList","elimitatedList","eliminated","winner","parenthesesChecker","symbols","stack","_stack2","balanced","symbol","top","decimalToBinary","decNumber","remStack","rem","binaryString","baseConverter","base","baseString","hanoiStack","plates","source","dest","helper","towerOfHanoi","sourceName","helperName","destName","moves","move","hanoi","StackArray","util"],"mappings":"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","file":"PacktDataStructuresAlgorithms.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"PacktDataStructuresAlgorithms\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PacktDataStructuresAlgorithms\"] = factory();\n\telse\n\t\troot[\"PacktDataStructuresAlgorithms\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 61);\n","export const Compare = {\n LESS_THAN: -1,\n BIGGER_THAN: 1,\n EQUALS: 0\n};\n\nexport const DOES_NOT_EXIST = -1;\n\nexport function lesserEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.LESS_THAN || comp === Compare.EQUALS;\n}\n\nexport function biggerEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS;\n}\n\nexport function defaultCompare(a, b) {\n if (a === b) {\n return 0;\n }\n return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN;\n}\n\nexport function defaultEquals(a, b) {\n return a === b;\n}\n\nexport function defaultToString(item) {\n if (item === null) {\n return 'NULL';\n } else if (item === undefined) {\n return 'UNDEFINED';\n } else if (typeof item === 'string' || item instanceof String) {\n return `${item}`;\n }\n return item.toString();\n}\n\nexport function swap(array, a, b) {\n /* const temp = array[a];\n array[a] = array[b];\n array[b] = temp; */\n [array[a], array[b]] = [array[b], array[a]];\n}\nexport function reverseCompare(compareFn) {\n return (a, b) => compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","const UNASSIGNED = 0;\n\nfunction usedInRow(matrix, row, num) {\n for (let col = 0; col < matrix.length; col++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInCol(matrix, col, num) {\n for (let row = 0; row < matrix.length; row++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInBox(matrix, boxStartRow, boxStartCol, num) {\n for (let row = 0; row < 3; row++) {\n for (let col = 0; col < 3; col++) {\n if (matrix[row + boxStartRow][col + boxStartCol] === num) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isSafe(matrix, row, col, num) {\n return (\n !usedInRow(matrix, row, num) &&\n !usedInCol(matrix, col, num) &&\n !usedInBox(matrix, row - (row % 3), col - (col % 3), num)\n );\n}\nfunction solveSudoku(matrix) {\n let row = 0;\n let col = 0;\n let checkBlankSpaces = false;\n\n for (row = 0; row < matrix.length; row++) {\n for (col = 0; col < matrix[row].length; col++) {\n if (matrix[row][col] === UNASSIGNED) {\n checkBlankSpaces = true;\n break;\n }\n }\n if (checkBlankSpaces === true) {\n break;\n }\n }\n if (checkBlankSpaces === false) {\n return true;\n }\n\n for (let num = 1; num <= 9; num++) {\n if (isSafe(matrix, row, col, num)) {\n matrix[row][col] = num;\n if (solveSudoku(matrix)) {\n return true;\n }\n matrix[row][col] = UNASSIGNED;\n }\n }\n return false;\n}\n\nexport function sudokuSolver(matrix) {\n if (solveSudoku(matrix) === true) {\n return matrix;\n }\n return 'NO SOLUTION EXISTS!';\n}\n","function isSafe(maze, x, y) {\n const n = maze.length;\n if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {\n return true;\n }\n return false;\n}\n\nfunction findPath(maze, x, y, solution) {\n const n = maze.length;\n if (x === n - 1 && y === n - 1) {\n solution[x][y] = 1;\n return true;\n }\n if (isSafe(maze, x, y) === true) {\n solution[x][y] = 1;\n if (findPath(maze, x + 1, y, solution)) {\n return true;\n }\n if (findPath(maze, x, y + 1, solution)) {\n return true;\n }\n solution[x][y] = 0;\n return false;\n }\n return false;\n}\n\nexport function ratInAMaze(maze) {\n const solution = [];\n for (let i = 0; i < maze.length; i++) {\n solution[i] = [];\n for (let j = 0; j < maze[i].length; j++) {\n solution[i][j] = 0;\n }\n }\n if (findPath(maze, 0, 0, solution) === true) {\n return solution;\n }\n return 'NO PATH FOUND';\n}\n","export function knapSack(capacity, weights, values) {\n const n = values.length;\n let load = 0;\n let val = 0;\n for (let i = 0; i < n && load < capacity; i++) {\n if (weights[i] <= capacity - load) {\n val += values[i];\n load += weights[i];\n // console.log('using item ' + (i + 1) + ' for the solution');\n } else {\n const r = (capacity - load) / weights[i];\n val += r * values[i];\n load += weights[i];\n // console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution');\n }\n }\n return val;\n}\n","export function knapSack(capacity, weights, values, n) {\n if (n === 0 || capacity === 0) {\n return 0;\n }\n if (weights[n - 1] > capacity) {\n return knapSack(capacity, weights, values, n - 1);\n }\n const a = values[n - 1] + knapSack(capacity - weights[n - 1], weights, values, n - 1);\n const b = knapSack(capacity, weights, values, n - 1);\n return a > b ? a : b;\n}\n","function findValues(n, capacity, kS) {\n let i = n;\n let k = capacity;\n // console.log('Items that are part of the solution:');\n while (i > 0 && k > 0) {\n if (kS[i][k] !== kS[i - 1][k]) {\n console.log(\n 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1]\n );\n i--;\n k -= kS[i][k];\n } else {\n i--;\n }\n }\n}\n\nexport function knapSack(capacity, weights, values, n) {\n const kS = [];\n for (let i = 0; i <= n; i++) {\n kS[i] = [];\n }\n for (let i = 0; i <= n; i++) {\n for (let w = 0; w <= capacity; w++) {\n if (i === 0 || w === 0) {\n kS[i][w] = 0;\n } else if (weights[i - 1] <= w) {\n const a = values[i - 1] + kS[i - 1][w - weights[i - 1]];\n const b = kS[i - 1][w];\n kS[i][w] = a > b ? a : b; // max(a,b)\n // console.log(a + ' can be part of the solution');\n } else {\n kS[i][w] = kS[i - 1][w];\n }\n }\n // console.log(kS[i].join());\n }\n // extra algorithm to find the items that are part of the solution\n findValues(n, capacity, kS);\n return kS[n][capacity];\n}\n","export function minCoinChange(coins, amount) {\n const change = [];\n let total = 0;\n for (let i = coins.length; i >= 0; i--) {\n const coin = coins[i];\n while (total + coin <= amount) {\n change.push(coin);\n total += coin;\n }\n }\n return change;\n}\n","export function minCoinChange(coins, amount) {\n const cache = [];\n\n const makeChange = (value) => {\n if (!value) {\n return [];\n }\n if (cache[value]) {\n return cache[value];\n }\n let min = [];\n let newMin;\n let newAmount;\n for (let i = 0; i < coins.length; i++) {\n const coin = coins[i];\n newAmount = value - coin;\n if (newAmount >= 0) {\n newMin = makeChange(newAmount);\n }\n if (\n newAmount >= 0 &&\n (newMin.length < min.length - 1 || !min.length) &&\n (newMin.length || !newAmount)\n ) {\n min = [coin].concat(newMin);\n // console.log('new Min ' + min + ' for ' + amount);\n }\n }\n return (cache[value] = min);\n };\n return makeChange(amount);\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nfunction binarySearchRecursive(array, value, low, high, compareFn = defaultCompare) {\n if (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = array[mid];\n if (compareFn(element, value) === Compare.LESS_THAN) {\n return binarySearchRecursive(array, value, mid + 1, high, compareFn);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n return binarySearchRecursive(array, value, low, mid - 1, compareFn);\n } else {\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n const low = 0;\n const high = sortedArray.length - 1;\n return binarySearchRecursive(array, value, low, high, compareFn);\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n\n// chapter 14\nexport { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive';\nexport { minCoinChange } from './algorithms/dynamic-programing/min-coin-change';\nexport { minCoinChange as minCoinChangeGreedy } from './algorithms/greedy/min-coin-change';\nexport { knapSack } from './algorithms/dynamic-programing/knapsack';\nexport { knapSack as knapSackRecursive } from './algorithms/dynamic-programing/knapsack-recursive';\nexport { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack';\nexport { ratInAMaze } from './algorithms/backtracking/rat-in-maze';\nexport { sudokuSolver } from './algorithms/backtracking/sudoku-solver';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/chapter14/02-MinCoinChangeDP.js b/examples/chapter14/02-MinCoinChangeDP.js index d31673bf..51ce7ed3 100644 --- a/examples/chapter14/02-MinCoinChangeDP.js +++ b/examples/chapter14/02-MinCoinChangeDP.js @@ -1 +1,5 @@ -const { bubbleSort } = PacktDataStructuresAlgorithms; +const { minCoinChange } = PacktDataStructuresAlgorithms; + +console.log(minCoinChange([1, 5, 10], 15)); // [5, 10] +console.log(minCoinChange([1, 3, 4], 6)); // [3, 3] + diff --git a/examples/chapter14/03-MinCoinChangeGreedy.js b/examples/chapter14/03-MinCoinChangeGreedy.js index e69de29b..584603f2 100644 --- a/examples/chapter14/03-MinCoinChangeGreedy.js +++ b/examples/chapter14/03-MinCoinChangeGreedy.js @@ -0,0 +1,5 @@ +const { minCoinChangeGreedy } = PacktDataStructuresAlgorithms; + +console.log(minCoinChangeGreedy([1, 5, 10], 15)); // [5, 10] +console.log(minCoinChangeGreedy([1, 3, 4], 6)); // [4, 1, 1] + diff --git a/examples/chapter14/04-KnapsackProblemDP.js b/examples/chapter14/04-KnapsackProblemDP.js index e69de29b..e9ff4369 100644 --- a/examples/chapter14/04-KnapsackProblemDP.js +++ b/examples/chapter14/04-KnapsackProblemDP.js @@ -0,0 +1,8 @@ +const { knapSack } = PacktDataStructuresAlgorithms; + +const values = [3,4,5]; +const weights = [2,3,4]; +const capacity = 5; +const n = values.length; + +console.log(knapSack(capacity, weights, values, n)); diff --git a/examples/chapter14/05-KnapSackProblemRecursive.js b/examples/chapter14/05-KnapSackProblemRecursive.js index e69de29b..ba76971b 100644 --- a/examples/chapter14/05-KnapSackProblemRecursive.js +++ b/examples/chapter14/05-KnapSackProblemRecursive.js @@ -0,0 +1,8 @@ +const { knapSackRecursive } = PacktDataStructuresAlgorithms; + +const values = [3,4,5]; +const weights = [2,3,4]; +const capacity = 5; +const n = values.length; + +console.log(knapSackRecursive(capacity, weights, values, n)); diff --git a/examples/chapter14/06-KnapSackProblemGreedy.js b/examples/chapter14/06-KnapSackProblemGreedy.js index e69de29b..d9858107 100644 --- a/examples/chapter14/06-KnapSackProblemGreedy.js +++ b/examples/chapter14/06-KnapSackProblemGreedy.js @@ -0,0 +1,7 @@ +const { knapSackGreedy } = PacktDataStructuresAlgorithms; + +const values = [3,4,5]; +const weights = [2,3,4]; +const capacity = 5; + +console.log(knapSackGreedy(capacity, weights, values)); diff --git a/src/js/algorithms/dynamic-programing/knapsack.js b/src/js/algorithms/dynamic-programing/knapsack.js index 14919f44..b4d98d79 100644 --- a/src/js/algorithms/dynamic-programing/knapsack.js +++ b/src/js/algorithms/dynamic-programing/knapsack.js @@ -4,9 +4,9 @@ function findValues(n, capacity, kS) { // console.log('Items that are part of the solution:'); while (i > 0 && k > 0) { if (kS[i][k] !== kS[i - 1][k]) { - /* console.log( + console.log( 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1] - ); */ + ); i--; k -= kS[i][k]; } else { diff --git a/src/js/algorithms/search/binary-search-recursive.js b/src/js/algorithms/search/binary-search-recursive.js new file mode 100644 index 00000000..f422fe8f --- /dev/null +++ b/src/js/algorithms/search/binary-search-recursive.js @@ -0,0 +1,24 @@ +import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util'; +import { quickSort } from '../sorting/quicksort'; + +function binarySearchRecursive(array, value, low, high, compareFn = defaultCompare) { + if (low <= high) { + const mid = Math.floor((low + high) / 2); + const element = array[mid]; + if (compareFn(element, value) === Compare.LESS_THAN) { + return binarySearchRecursive(array, value, mid + 1, high, compareFn); + } else if (compareFn(element, value) === Compare.BIGGER_THAN) { + return binarySearchRecursive(array, value, low, mid - 1, compareFn); + } else { + return mid; + } + } + return DOES_NOT_EXIST; +} + +export function binarySearch(array, value, compareFn = defaultCompare) { + const sortedArray = quickSort(array); + const low = 0; + const high = sortedArray.length - 1; + return binarySearchRecursive(array, value, low, high, compareFn); +} diff --git a/src/js/index.js b/src/js/index.js index ee6cde5b..50f655b4 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -83,7 +83,14 @@ export { findMaxValue } from './algorithms/search/min-max-search'; export { findMinValue } from './algorithms/search/min-max-search'; // chapter 14 -// export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive'; +export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive'; export { minCoinChange } from './algorithms/dynamic-programing/min-coin-change'; +export { minCoinChange as minCoinChangeGreedy } from './algorithms/greedy/min-coin-change'; +export { knapSack } from './algorithms/dynamic-programing/knapsack'; +export { knapSack as knapSackRecursive } from './algorithms/dynamic-programing/knapsack-recursive'; +export { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack'; +export { lcs } from './algorithms/dynamic-programing/longest-common-subsequence'; +export { lcs as lcsPrint } from './algorithms/dynamic-programing/longest-common-subsequence-print'; +export { lcs as lcsRecursive } from './algorithms/greedy/longest-common-subsequence'; export { ratInAMaze } from './algorithms/backtracking/rat-in-maze'; export { sudokuSolver } from './algorithms/backtracking/sudoku-solver'; From 05e82e364dbd50450b6fbbdb778ddd791d7c774d Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 21:23:30 -0400 Subject: [PATCH 088/188] [Algorithm Design and Techniques] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- .../PacktDataStructuresAlgorithms.min.js.map | 2 +- examples/chapter14/02-MinCoinChangeDP.js | 6 ++++- examples/chapter14/03-MinCoinChangeGreedy.js | 5 ++++ examples/chapter14/04-KnapsackProblemDP.js | 8 +++++++ .../chapter14/05-KnapSackProblemRecursive.js | 8 +++++++ .../chapter14/06-KnapSackProblemGreedy.js | 7 ++++++ .../algorithms/dynamic-programing/knapsack.js | 4 ++-- .../search/binary-search-recursive.js | 24 +++++++++++++++++++ src/js/index.js | 9 ++++++- 10 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 src/js/algorithms/search/binary-search-recursive.js diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index e81ec615..1d81dbc2 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=56)}([function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lesserEquals=function(e,n,r){var i=r(e,n);return i===t.LESS_THAN||i===t.EQUALS},e.biggerEquals=function(e,n,r){var i=r(e,n);return i===t.BIGGER_THAN||i===t.EQUALS},e.defaultCompare=function(e,n){return e===n?0:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.insertionSort=void 0,e.insertionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sudokuSolver=function(e){return!0===function e(r){var i=0,o=0,u=!1;for(i=0;i=0&&n>=0&&t=0&&(o=t(u)),u>=0&&(o.length2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(7)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(10),n(9)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(41)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(6)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.findMaxValue=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t=0&&n>=0&&tt)return e(t,n,r,i-1);var o=r[i-1]+e(t-n[i-1],n,r,i-1),u=e(t,n,r,i-1);return o>u?o:u}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";function t(e,t,n){for(var r=e,i=t;r>0&&i>0;)n[r][i]!==n[r-1][i]?(console.log("item "+r+" can be part of solution w,v: "+weights[r-1]+","+values[r-1]),i-=n[--r][i]):r--}Object.defineProperty(e,"__esModule",{value:!0}),e.knapSack=function(e,n,r,i){for(var o=[],u=0;u<=i;u++)o[u]=[];for(var a=0;a<=i;a++)for(var l=0;l<=e;l++)if(0===a||0===l)o[a][l]=0;else if(n[a-1]<=l){var f=r[a-1]+o[a-1][l-n[a-1]],s=o[a-1][l];o[a][l]=f>s?f:s}else o[a][l]=o[a-1][l];return t(i,e,o),o[i][e]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){for(var n=[],r=0,i=e.length;i>=0;i--)for(var o=e[i];r+o<=t;)n.push(o),r+=o;return n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){var n=[];return function t(r){if(!r)return[];if(n[r])return n[r];for(var i=[],o=void 0,u=void 0,a=0;a=0&&(o=t(u)),u>=0&&(o.length2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e).length-1;return function e(n,r,i,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultCompare;if(i<=o){var a=Math.floor((i+o)/2),l=n[a];return u(l,r)===t.Compare.LESS_THAN?e(n,r,a+1,o,u):u(l,r)===t.Compare.BIGGER_THAN?e(n,r,i,a-1,u):a}return t.DOES_NOT_EXIST}(e,r,0,o,i)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(4)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(10),n(9)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:(t[n]=e(n-1)+e(n-2),t[n]=e(n-1)+e(n-2))}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(46)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&i;)o=t.removeFront(),u=t.removeBack(),o!==u&&(i=!1);return i};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(7)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return!(!n||!t.isEmpty())};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","const UNASSIGNED = 0;\n\nfunction usedInRow(matrix, row, num) {\n for (let col = 0; col < matrix.length; col++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInCol(matrix, col, num) {\n for (let row = 0; row < matrix.length; row++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInBox(matrix, boxStartRow, boxStartCol, num) {\n for (let row = 0; row < 3; row++) {\n for (let col = 0; col < 3; col++) {\n if (matrix[row + boxStartRow][col + boxStartCol] === num) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isSafe(matrix, row, col, num) {\n return (\n !usedInRow(matrix, row, num) &&\n !usedInCol(matrix, col, num) &&\n !usedInBox(matrix, row - (row % 3), col - (col % 3), num)\n );\n}\nfunction solveSudoku(matrix) {\n let row = 0;\n let col = 0;\n let checkBlankSpaces = false;\n\n for (row = 0; row < matrix.length; row++) {\n for (col = 0; col < matrix[row].length; col++) {\n if (matrix[row][col] === UNASSIGNED) {\n checkBlankSpaces = true;\n break;\n }\n }\n if (checkBlankSpaces === true) {\n break;\n }\n }\n if (checkBlankSpaces === false) {\n return true;\n }\n\n for (let num = 1; num <= 9; num++) {\n if (isSafe(matrix, row, col, num)) {\n matrix[row][col] = num;\n if (solveSudoku(matrix)) {\n return true;\n }\n matrix[row][col] = UNASSIGNED;\n }\n }\n return false;\n}\n\nexport function sudokuSolver(matrix) {\n if (solveSudoku(matrix) === true) {\n return matrix;\n }\n return 'NO SOLUTION EXISTS!';\n}\n","function isSafe(maze, x, y) {\n const n = maze.length;\n if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {\n return true;\n }\n return false;\n}\n\nfunction findPath(maze, x, y, solution) {\n const n = maze.length;\n if (x === n - 1 && y === n - 1) {\n solution[x][y] = 1;\n return true;\n }\n if (isSafe(maze, x, y) === true) {\n solution[x][y] = 1;\n if (findPath(maze, x + 1, y, solution)) {\n return true;\n }\n if (findPath(maze, x, y + 1, solution)) {\n return true;\n }\n solution[x][y] = 0;\n return false;\n }\n return false;\n}\n\nexport function ratInAMaze(maze) {\n const solution = [];\n for (let i = 0; i < maze.length; i++) {\n solution[i] = [];\n for (let j = 0; j < maze[i].length; j++) {\n solution[i][j] = 0;\n }\n }\n if (findPath(maze, 0, 0, solution) === true) {\n return solution;\n }\n return 'NO PATH FOUND';\n}\n","export function minCoinChange(coins, amount) {\n const cache = [];\n\n const makeChange = (value) => {\n if (!value) {\n return [];\n }\n if (cache[value]) {\n return cache[value];\n }\n let min = [];\n let newMin;\n let newAmount;\n for (let i = 0; i < coins.length; i++) {\n const coin = coins[i];\n newAmount = value - coin;\n if (newAmount >= 0) {\n newMin = makeChange(newAmount);\n }\n if (\n newAmount >= 0 &&\n (newMin.length < min.length - 1 || !min.length) &&\n (newMin.length || !newAmount)\n ) {\n min = [coin].concat(newMin);\n // console.log('new Min ' + min + ' for ' + amount);\n }\n }\n return (cache[value] = min);\n };\n return makeChange(amount);\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n\n// chapter 14\n// export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive';\nexport { minCoinChange } from './algorithms/dynamic-programing/min-coin-change';\nexport { ratInAMaze } from './algorithms/backtracking/rat-in-maze';\nexport { sudokuSolver } from './algorithms/backtracking/sudoku-solver';\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://PacktDataStructuresAlgorithms/webpack/universalModuleDefinition","webpack://PacktDataStructuresAlgorithms/webpack/bootstrap","webpack://PacktDataStructuresAlgorithms/./src/js/util.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/quicksort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/min-max-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/linked-list-models.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/queue.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/insertion-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/node.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/binary-search-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/dictionary.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/doubly-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/deque.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/breadth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/sudoku-solver.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/rat-in-maze.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/knapsack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/knapsack-recursive.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/knapsack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search-recursive.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/sequential-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/interpolation-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/shell-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/selection-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/radix-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/merge-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/counting-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bucket-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort-improved.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/shuffle/fisher–yates.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/kruskal.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/prim.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/floyd-warshall.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/dijkstra.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/depth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/graph.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/heap-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/heap.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/avl-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/fibonacci.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/factorial.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-separate-chaining.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/set.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/sorted-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/circular-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/palindrome-checker.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hot-potato.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/balanced-symbols.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/base-converter.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hanoi.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-array.js","webpack://PacktDataStructuresAlgorithms/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","lesserEquals","a","b","compareFn","comp","Compare","LESS_THAN","EQUALS","biggerEquals","BIGGER_THAN","defaultCompare","defaultEquals","defaultToString","item","undefined","String","toString","swap","array","_ref","reverseCompare","defaultDiff","Number","DOES_NOT_EXIST","ValuePair","key","_classCallCheck","this","LinkedList","equalsFn","arguments","length","_util","count","head","element","node","_linkedListModels","Node","current","next","index","previous","getElementAt","indexOf","removeAt","size","objString","Stack","items","isEmpty","result","quick","left","right","pivot","Math","floor","j","partition","quickSort","findMaxValue","max","findMinValue","min","DoublyNode","prev","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","Queue","lowestCount","insertionSort","temp","BinarySearchTree","_node","insertNode","searchNode","callback","inOrderTraverseNode","preOrderTraverseNode","postOrderTraverseNode","minNode","maxNode","removeNode","aux","Dictionary","toStrFn","table","tableKey","_valuePair","valuePair","hasKey","keyValues","map","values","callbackFn","valuePairs","keys","DoublyLinkedList","tail","_get","Deque","addBack","Colors","WHITE","GREY","BLACK","initializeColor","vertices","color","breadthFirstSearch","graph","startVertex","getVertices","adjList","getAdjList","queue","_queue2","default","enqueue","u","dequeue","neighbors","w","BFS","distances","predecessors","sudokuSolver","matrix","solveSudoku","row","col","checkBlankSpaces","UNASSIGNED","num","isSafe","usedInRow","usedInCol","boxStartRow","boxStartCol","usedInBox","ratInAMaze","maze","solution","findPath","x","y","knapSack","capacity","weights","load","val","findValues","kS","k","console","log","minCoinChange","coins","amount","change","total","coin","push","cache","makeChange","newMin","newAmount","concat","binarySearch","high","_quicksort","binarySearchRecursive","low","mid","sequentialSearch","interpolationSearch","diffFn","position","delta","sortedArray","shellSort","increment","selectionSort","indexMin","radixSort","radixBase","minValue","_minMaxSearch","maxValue","significantDigit","countingSortForRadix","getBucketIndex","bucketsIndex","buckets","mergeSort","_array","middle","slice","merge","countingSort","sortedIndex","counts","Array","forEach","bucketSort","bucketSize","_insertionSort","apply","_toConsumableArray","sortBuckets","bucketCount","createBuckets","modifiedBubbleSort","bubbleSort","shuffle","currentIndex","randomIndex","random","INF","MAX_SAFE_INTEGER","find","parent","union","kruskal","ne","v","cost","initializeCost","minKey","visited","minIndex","prim","floydWarshall","dist","isFinite","Infinity","minDistance","dijkstra","src","depthFirstSearchVisit","DFSVisit","depthFirstSearch","f","time","DFS","discovery","finished","Graph","isDirected","_dictionary2","includes","set","addVertex","heapify","heapSize","largest","buildMaxHeap","MinHeap","heap","siftUp","getLeftIndex","getRightIndex","siftDown","getParentIndex","shift","removedValue","pop","maxIndex","MaxHeap","BalanceFactor","UNBALANCED_RIGHT","SLIGHTLY_UNBALANCED_RIGHT","BALANCED","SLIGHTLY_UNBALANCED_LEFT","UNBALANCED_LEFT","AVLTree","getNodeHeight","tmp","rotationRR","rotationLL","heightDifference","balanceFactor","getBalanceFactor","rotationLR","rotationRL","fibonacci","fibonacciIterative","fibNMinus2","fibNMinus1","fibN","fibonacciMemoization","memo","fibonacciMem","factorialIterative","number","factorial","ValuePairLazy","isDeleted","HashTableLinearProbingLazy","hash","charCodeAt","loseloseHashCode","hashCode","_valuePairLazy","HashTableLinearProbing","verifyRemoveSideEffect","removedPosition","posHash","HashTableSeparateChaining","_linkedList2","linkedList","getHead","remove","HashTable","Set","has","otherSet","unionSet","add","intersectionSet","otherValues","biggerSet","smallerSet","differenceSet","isSubset","every","StackLinkedList","_doublyLinkedList2","clear","SortedLinkedList","getIndexNextSortedElement","pos","CircularLinkedList","removed","palindromeChecker","aString","deque","_deque2","lowerString","toLocaleLowerCase","split","join","isEqual","firstChar","lastChar","charAt","removeFront","removeBack","hotPotato","elementsList","elimitatedList","eliminated","winner","parenthesesChecker","symbols","stack","_stack2","balanced","symbol","top","decimalToBinary","decNumber","remStack","rem","binaryString","baseConverter","base","baseString","hanoiStack","plates","source","dest","helper","towerOfHanoi","sourceName","helperName","destName","moves","move","hanoi","StackArray","util"],"mappings":"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","file":"PacktDataStructuresAlgorithms.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"PacktDataStructuresAlgorithms\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PacktDataStructuresAlgorithms\"] = factory();\n\telse\n\t\troot[\"PacktDataStructuresAlgorithms\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 61);\n","export const Compare = {\n LESS_THAN: -1,\n BIGGER_THAN: 1,\n EQUALS: 0\n};\n\nexport const DOES_NOT_EXIST = -1;\n\nexport function lesserEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.LESS_THAN || comp === Compare.EQUALS;\n}\n\nexport function biggerEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS;\n}\n\nexport function defaultCompare(a, b) {\n if (a === b) {\n return 0;\n }\n return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN;\n}\n\nexport function defaultEquals(a, b) {\n return a === b;\n}\n\nexport function defaultToString(item) {\n if (item === null) {\n return 'NULL';\n } else if (item === undefined) {\n return 'UNDEFINED';\n } else if (typeof item === 'string' || item instanceof String) {\n return `${item}`;\n }\n return item.toString();\n}\n\nexport function swap(array, a, b) {\n /* const temp = array[a];\n array[a] = array[b];\n array[b] = temp; */\n [array[a], array[b]] = [array[b], array[a]];\n}\nexport function reverseCompare(compareFn) {\n return (a, b) => compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","const UNASSIGNED = 0;\n\nfunction usedInRow(matrix, row, num) {\n for (let col = 0; col < matrix.length; col++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInCol(matrix, col, num) {\n for (let row = 0; row < matrix.length; row++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInBox(matrix, boxStartRow, boxStartCol, num) {\n for (let row = 0; row < 3; row++) {\n for (let col = 0; col < 3; col++) {\n if (matrix[row + boxStartRow][col + boxStartCol] === num) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isSafe(matrix, row, col, num) {\n return (\n !usedInRow(matrix, row, num) &&\n !usedInCol(matrix, col, num) &&\n !usedInBox(matrix, row - (row % 3), col - (col % 3), num)\n );\n}\nfunction solveSudoku(matrix) {\n let row = 0;\n let col = 0;\n let checkBlankSpaces = false;\n\n for (row = 0; row < matrix.length; row++) {\n for (col = 0; col < matrix[row].length; col++) {\n if (matrix[row][col] === UNASSIGNED) {\n checkBlankSpaces = true;\n break;\n }\n }\n if (checkBlankSpaces === true) {\n break;\n }\n }\n if (checkBlankSpaces === false) {\n return true;\n }\n\n for (let num = 1; num <= 9; num++) {\n if (isSafe(matrix, row, col, num)) {\n matrix[row][col] = num;\n if (solveSudoku(matrix)) {\n return true;\n }\n matrix[row][col] = UNASSIGNED;\n }\n }\n return false;\n}\n\nexport function sudokuSolver(matrix) {\n if (solveSudoku(matrix) === true) {\n return matrix;\n }\n return 'NO SOLUTION EXISTS!';\n}\n","function isSafe(maze, x, y) {\n const n = maze.length;\n if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {\n return true;\n }\n return false;\n}\n\nfunction findPath(maze, x, y, solution) {\n const n = maze.length;\n if (x === n - 1 && y === n - 1) {\n solution[x][y] = 1;\n return true;\n }\n if (isSafe(maze, x, y) === true) {\n solution[x][y] = 1;\n if (findPath(maze, x + 1, y, solution)) {\n return true;\n }\n if (findPath(maze, x, y + 1, solution)) {\n return true;\n }\n solution[x][y] = 0;\n return false;\n }\n return false;\n}\n\nexport function ratInAMaze(maze) {\n const solution = [];\n for (let i = 0; i < maze.length; i++) {\n solution[i] = [];\n for (let j = 0; j < maze[i].length; j++) {\n solution[i][j] = 0;\n }\n }\n if (findPath(maze, 0, 0, solution) === true) {\n return solution;\n }\n return 'NO PATH FOUND';\n}\n","export function knapSack(capacity, weights, values) {\n const n = values.length;\n let load = 0;\n let val = 0;\n for (let i = 0; i < n && load < capacity; i++) {\n if (weights[i] <= capacity - load) {\n val += values[i];\n load += weights[i];\n // console.log('using item ' + (i + 1) + ' for the solution');\n } else {\n const r = (capacity - load) / weights[i];\n val += r * values[i];\n load += weights[i];\n // console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution');\n }\n }\n return val;\n}\n","export function knapSack(capacity, weights, values, n) {\n if (n === 0 || capacity === 0) {\n return 0;\n }\n if (weights[n - 1] > capacity) {\n return knapSack(capacity, weights, values, n - 1);\n }\n const a = values[n - 1] + knapSack(capacity - weights[n - 1], weights, values, n - 1);\n const b = knapSack(capacity, weights, values, n - 1);\n return a > b ? a : b;\n}\n","function findValues(n, capacity, kS) {\n let i = n;\n let k = capacity;\n // console.log('Items that are part of the solution:');\n while (i > 0 && k > 0) {\n if (kS[i][k] !== kS[i - 1][k]) {\n console.log(\n 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1]\n );\n i--;\n k -= kS[i][k];\n } else {\n i--;\n }\n }\n}\n\nexport function knapSack(capacity, weights, values, n) {\n const kS = [];\n for (let i = 0; i <= n; i++) {\n kS[i] = [];\n }\n for (let i = 0; i <= n; i++) {\n for (let w = 0; w <= capacity; w++) {\n if (i === 0 || w === 0) {\n kS[i][w] = 0;\n } else if (weights[i - 1] <= w) {\n const a = values[i - 1] + kS[i - 1][w - weights[i - 1]];\n const b = kS[i - 1][w];\n kS[i][w] = a > b ? a : b; // max(a,b)\n // console.log(a + ' can be part of the solution');\n } else {\n kS[i][w] = kS[i - 1][w];\n }\n }\n // console.log(kS[i].join());\n }\n // extra algorithm to find the items that are part of the solution\n findValues(n, capacity, kS);\n return kS[n][capacity];\n}\n","export function minCoinChange(coins, amount) {\n const change = [];\n let total = 0;\n for (let i = coins.length; i >= 0; i--) {\n const coin = coins[i];\n while (total + coin <= amount) {\n change.push(coin);\n total += coin;\n }\n }\n return change;\n}\n","export function minCoinChange(coins, amount) {\n const cache = [];\n\n const makeChange = (value) => {\n if (!value) {\n return [];\n }\n if (cache[value]) {\n return cache[value];\n }\n let min = [];\n let newMin;\n let newAmount;\n for (let i = 0; i < coins.length; i++) {\n const coin = coins[i];\n newAmount = value - coin;\n if (newAmount >= 0) {\n newMin = makeChange(newAmount);\n }\n if (\n newAmount >= 0 &&\n (newMin.length < min.length - 1 || !min.length) &&\n (newMin.length || !newAmount)\n ) {\n min = [coin].concat(newMin);\n // console.log('new Min ' + min + ' for ' + amount);\n }\n }\n return (cache[value] = min);\n };\n return makeChange(amount);\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nfunction binarySearchRecursive(array, value, low, high, compareFn = defaultCompare) {\n if (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = array[mid];\n if (compareFn(element, value) === Compare.LESS_THAN) {\n return binarySearchRecursive(array, value, mid + 1, high, compareFn);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n return binarySearchRecursive(array, value, low, mid - 1, compareFn);\n } else {\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n const low = 0;\n const high = sortedArray.length - 1;\n return binarySearchRecursive(array, value, low, high, compareFn);\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n\n// chapter 14\nexport { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive';\nexport { minCoinChange } from './algorithms/dynamic-programing/min-coin-change';\nexport { minCoinChange as minCoinChangeGreedy } from './algorithms/greedy/min-coin-change';\nexport { knapSack } from './algorithms/dynamic-programing/knapsack';\nexport { knapSack as knapSackRecursive } from './algorithms/dynamic-programing/knapsack-recursive';\nexport { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack';\nexport { ratInAMaze } from './algorithms/backtracking/rat-in-maze';\nexport { sudokuSolver } from './algorithms/backtracking/sudoku-solver';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/chapter14/02-MinCoinChangeDP.js b/examples/chapter14/02-MinCoinChangeDP.js index d31673bf..51ce7ed3 100644 --- a/examples/chapter14/02-MinCoinChangeDP.js +++ b/examples/chapter14/02-MinCoinChangeDP.js @@ -1 +1,5 @@ -const { bubbleSort } = PacktDataStructuresAlgorithms; +const { minCoinChange } = PacktDataStructuresAlgorithms; + +console.log(minCoinChange([1, 5, 10], 15)); // [5, 10] +console.log(minCoinChange([1, 3, 4], 6)); // [3, 3] + diff --git a/examples/chapter14/03-MinCoinChangeGreedy.js b/examples/chapter14/03-MinCoinChangeGreedy.js index e69de29b..584603f2 100644 --- a/examples/chapter14/03-MinCoinChangeGreedy.js +++ b/examples/chapter14/03-MinCoinChangeGreedy.js @@ -0,0 +1,5 @@ +const { minCoinChangeGreedy } = PacktDataStructuresAlgorithms; + +console.log(minCoinChangeGreedy([1, 5, 10], 15)); // [5, 10] +console.log(minCoinChangeGreedy([1, 3, 4], 6)); // [4, 1, 1] + diff --git a/examples/chapter14/04-KnapsackProblemDP.js b/examples/chapter14/04-KnapsackProblemDP.js index e69de29b..e9ff4369 100644 --- a/examples/chapter14/04-KnapsackProblemDP.js +++ b/examples/chapter14/04-KnapsackProblemDP.js @@ -0,0 +1,8 @@ +const { knapSack } = PacktDataStructuresAlgorithms; + +const values = [3,4,5]; +const weights = [2,3,4]; +const capacity = 5; +const n = values.length; + +console.log(knapSack(capacity, weights, values, n)); diff --git a/examples/chapter14/05-KnapSackProblemRecursive.js b/examples/chapter14/05-KnapSackProblemRecursive.js index e69de29b..ba76971b 100644 --- a/examples/chapter14/05-KnapSackProblemRecursive.js +++ b/examples/chapter14/05-KnapSackProblemRecursive.js @@ -0,0 +1,8 @@ +const { knapSackRecursive } = PacktDataStructuresAlgorithms; + +const values = [3,4,5]; +const weights = [2,3,4]; +const capacity = 5; +const n = values.length; + +console.log(knapSackRecursive(capacity, weights, values, n)); diff --git a/examples/chapter14/06-KnapSackProblemGreedy.js b/examples/chapter14/06-KnapSackProblemGreedy.js index e69de29b..d9858107 100644 --- a/examples/chapter14/06-KnapSackProblemGreedy.js +++ b/examples/chapter14/06-KnapSackProblemGreedy.js @@ -0,0 +1,7 @@ +const { knapSackGreedy } = PacktDataStructuresAlgorithms; + +const values = [3,4,5]; +const weights = [2,3,4]; +const capacity = 5; + +console.log(knapSackGreedy(capacity, weights, values)); diff --git a/src/js/algorithms/dynamic-programing/knapsack.js b/src/js/algorithms/dynamic-programing/knapsack.js index 14919f44..aaca8c21 100644 --- a/src/js/algorithms/dynamic-programing/knapsack.js +++ b/src/js/algorithms/dynamic-programing/knapsack.js @@ -4,9 +4,9 @@ function findValues(n, capacity, kS) { // console.log('Items that are part of the solution:'); while (i > 0 && k > 0) { if (kS[i][k] !== kS[i - 1][k]) { - /* console.log( + /* console.log( 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1] - ); */ + );*/ i--; k -= kS[i][k]; } else { diff --git a/src/js/algorithms/search/binary-search-recursive.js b/src/js/algorithms/search/binary-search-recursive.js new file mode 100644 index 00000000..f422fe8f --- /dev/null +++ b/src/js/algorithms/search/binary-search-recursive.js @@ -0,0 +1,24 @@ +import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util'; +import { quickSort } from '../sorting/quicksort'; + +function binarySearchRecursive(array, value, low, high, compareFn = defaultCompare) { + if (low <= high) { + const mid = Math.floor((low + high) / 2); + const element = array[mid]; + if (compareFn(element, value) === Compare.LESS_THAN) { + return binarySearchRecursive(array, value, mid + 1, high, compareFn); + } else if (compareFn(element, value) === Compare.BIGGER_THAN) { + return binarySearchRecursive(array, value, low, mid - 1, compareFn); + } else { + return mid; + } + } + return DOES_NOT_EXIST; +} + +export function binarySearch(array, value, compareFn = defaultCompare) { + const sortedArray = quickSort(array); + const low = 0; + const high = sortedArray.length - 1; + return binarySearchRecursive(array, value, low, high, compareFn); +} diff --git a/src/js/index.js b/src/js/index.js index ee6cde5b..50f655b4 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -83,7 +83,14 @@ export { findMaxValue } from './algorithms/search/min-max-search'; export { findMinValue } from './algorithms/search/min-max-search'; // chapter 14 -// export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive'; +export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive'; export { minCoinChange } from './algorithms/dynamic-programing/min-coin-change'; +export { minCoinChange as minCoinChangeGreedy } from './algorithms/greedy/min-coin-change'; +export { knapSack } from './algorithms/dynamic-programing/knapsack'; +export { knapSack as knapSackRecursive } from './algorithms/dynamic-programing/knapsack-recursive'; +export { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack'; +export { lcs } from './algorithms/dynamic-programing/longest-common-subsequence'; +export { lcs as lcsPrint } from './algorithms/dynamic-programing/longest-common-subsequence-print'; +export { lcs as lcsRecursive } from './algorithms/greedy/longest-common-subsequence'; export { ratInAMaze } from './algorithms/backtracking/rat-in-maze'; export { sudokuSolver } from './algorithms/backtracking/sudoku-solver'; From c1d88dc4563e66b9911ad506c6fbd1dc0361c203 Mon Sep 17 00:00:00 2001 From: Loiane Groner Date: Sun, 8 Apr 2018 21:31:52 -0400 Subject: [PATCH 089/188] Update knapsack.js --- src/js/algorithms/dynamic-programing/knapsack.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/algorithms/dynamic-programing/knapsack.js b/src/js/algorithms/dynamic-programing/knapsack.js index b4d98d79..8e200650 100644 --- a/src/js/algorithms/dynamic-programing/knapsack.js +++ b/src/js/algorithms/dynamic-programing/knapsack.js @@ -4,9 +4,9 @@ function findValues(n, capacity, kS) { // console.log('Items that are part of the solution:'); while (i > 0 && k > 0) { if (kS[i][k] !== kS[i - 1][k]) { - console.log( + /*console.log( 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1] - ); + );*/ i--; k -= kS[i][k]; } else { From 17d192ee455895c7ff3f80068056605ac0dd8b52 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 21:38:19 -0400 Subject: [PATCH 090/188] [Algorithm Design and Techniques] --- .gitignore | 1 + src/js/algorithms/dynamic-programing/knapsack.js | 6 +++--- src/js/algorithms/search/binary-search-recursive.js | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 25cf67d5..0c2aa12a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,6 @@ coverage coverage.lcov mochawesome-report/* dist/js/* +dist-/* dist/ts/* snippet.js diff --git a/src/js/algorithms/dynamic-programing/knapsack.js b/src/js/algorithms/dynamic-programing/knapsack.js index 8e200650..7ee43dad 100644 --- a/src/js/algorithms/dynamic-programing/knapsack.js +++ b/src/js/algorithms/dynamic-programing/knapsack.js @@ -4,9 +4,9 @@ function findValues(n, capacity, kS) { // console.log('Items that are part of the solution:'); while (i > 0 && k > 0) { if (kS[i][k] !== kS[i - 1][k]) { - /*console.log( - 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1] - );*/ + //console.log( + // 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1] + // ); i--; k -= kS[i][k]; } else { diff --git a/src/js/algorithms/search/binary-search-recursive.js b/src/js/algorithms/search/binary-search-recursive.js index f422fe8f..d8daa439 100644 --- a/src/js/algorithms/search/binary-search-recursive.js +++ b/src/js/algorithms/search/binary-search-recursive.js @@ -7,11 +7,11 @@ function binarySearchRecursive(array, value, low, high, compareFn = defaultCompa const element = array[mid]; if (compareFn(element, value) === Compare.LESS_THAN) { return binarySearchRecursive(array, value, mid + 1, high, compareFn); - } else if (compareFn(element, value) === Compare.BIGGER_THAN) { + } + if (compareFn(element, value) === Compare.BIGGER_THAN) { return binarySearchRecursive(array, value, low, mid - 1, compareFn); - } else { - return mid; } + return mid; } return DOES_NOT_EXIST; } From 1ff78ec512018d7e09916e6d44162ad4a4a67f15 Mon Sep 17 00:00:00 2001 From: loiane Date: Sun, 8 Apr 2018 21:45:11 -0400 Subject: [PATCH 091/188] [Algorithm Design and Techniques] --- src/js/algorithms/dynamic-programing/knapsack.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/js/algorithms/dynamic-programing/knapsack.js b/src/js/algorithms/dynamic-programing/knapsack.js index 7ee43dad..9c979360 100644 --- a/src/js/algorithms/dynamic-programing/knapsack.js +++ b/src/js/algorithms/dynamic-programing/knapsack.js @@ -4,9 +4,9 @@ function findValues(n, capacity, kS) { // console.log('Items that are part of the solution:'); while (i > 0 && k > 0) { if (kS[i][k] !== kS[i - 1][k]) { - //console.log( - // 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1] - // ); + // console.log( + // item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1] + // ); i--; k -= kS[i][k]; } else { From 24e5e916cec6be6a5945f8d22a952a60f25a3b59 Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Mon, 9 Apr 2018 16:16:58 +0200 Subject: [PATCH 092/188] removed error handling --- package-lock.json | 13296 ++++++++++++++++++++++++++++ src/js/others/balanced-symbols.js | 8 +- 2 files changed, 13298 insertions(+), 6 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..ebe12770 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13296 @@ +{ + "name": "javascript-datastructures-algorithms", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.44" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "2.5.1", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "@babel/template": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "lodash": "4.17.5" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + } + } + }, + "@babel/traverse": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "debug": "3.1.0", + "globals": "11.4.0", + "invariant": "2.2.4", + "lodash": "4.17.5" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", + "dev": true, + "requires": { + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, + "@types/chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz", + "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==", + "dev": true + }, + "@types/mocha": { + "version": "2.2.48", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", + "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", + "dev": true + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "dev": true, + "requires": { + "acorn": "5.5.3" + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "any-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", + "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", + "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", + "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": 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.0", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", + "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "dev": true + }, + "babel-cli": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.15.1", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.2", + "lodash": "4.17.5", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.7", + "v8flags": "2.1.1" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-eslint": { + "version": "8.2.2", + "resolved": "http://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.2.tgz", + "integrity": "sha512-Qt2lz2egBxNYWqN9JIO2z4NOOf8i4b5JS6CFoYrOZZTDssueiV1jH/jsefyg+86SeNY3rB361/mi3kE1WK2WYQ==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-loader": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", + "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", + "dev": true, + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-add-module-exports": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", + "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=", + "dev": true + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "dev": true, + "requires": { + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.5", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, + "babel-preset-env": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", + "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.11.3", + "invariant": "2.2.4", + "semver": "5.5.0" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "dev": true, + "requires": { + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.5", + "home-or-tmp": "2.0.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.5", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.5" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-js": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", + "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "binaryextensions": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.1.tgz", + "integrity": "sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA==", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, + "browserslist": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000824", + "electron-to-chromium": "1.3.42" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.3", + "ieee754": "1.1.11", + "isarray": "1.0.0" + } + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.2", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.3.0", + "unique-filename": "1.1.0", + "y18n": "4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "caniuse-lite": { + "version": "1.0.30000824", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000824.tgz", + "integrity": "sha512-KcgeAvVkpzN05Mjiyz5vf0le5AWRwfRGqGkKXWWsdrLQd4EIBevReSy7mYCdwSq7MqKrmJ0lEQEkUQE2VspRRw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.8" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "optional": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "chrome-trace-event": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.2.tgz", + "integrity": "sha1-kPNohdU0WlBiEzLwcXtZWIPV2YI=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-spinners": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "dev": true + }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + } + } + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "1.0.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "1.0.0" + } + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "process-nextick-args": "2.0.0", + "readable-stream": "2.3.6" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codecov": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.0.tgz", + "integrity": "sha1-wnO4xPEpRXI+jcnSWAPYk0Pl8o4=", + "dev": true, + "requires": { + "argv": "0.0.2", + "request": "2.81.0", + "urlgrey": "0.4.4" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", + "integrity": "sha512-s8+wktIuDSLffCywiwSxQOMqtPxML11a/dtHE17tMn4B1MSWw/C22EKf7M2KGUBcDaVFEGT+S8N02geDXeuNKg==", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-versions": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz", + "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dargs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", + "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "1.0.0" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "detect-conflict": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", + "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", + "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "dev": true + }, + "ejs": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.8.tgz", + "integrity": "sha512-QIDZL54fyV8MDcAsO91BMH1ft2qGGaHIJsJIA/+t+7uvXol1dm413fPcUgUb4k8F/9457rx4/KFE4XfDifrQxQ==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.42", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz", + "integrity": "sha1-lcM78B0MxAVVauyJn+Yf1NduoPk=", + "dev": true + }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "0.4.21" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", + "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "tapable": "1.0.0" + } + }, + "envinfo": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-4.4.2.tgz", + "integrity": "sha512-5rfRs+m+6pwoKRCFqpsA5+qsLngFms1aWPrxfKbrObCzQaPc3M3yPloZx+BL9UE3dK58cxw36XVQbFRSCCfGSQ==", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "dev": true, + "requires": { + "string-template": "0.2.1", + "xtend": "4.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.3.2", + "concat-stream": "1.6.2", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.1", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.4.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "regexpp": "1.1.0", + "require-uncached": "1.0.3", + "semver": "5.5.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "eslint-config-airbnb-base": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz", + "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", + "dev": true, + "requires": { + "eslint-restricted-globals": "0.1.1" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "2.6.9", + "resolve": "1.7.0" + } + }, + "eslint-module-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "dev": true, + "requires": { + "debug": "2.6.9", + "pkg-dir": "1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.10.0.tgz", + "integrity": "sha1-+gkIPVp1KI35xsfQn+EiVZhWVec=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.2.0", + "has": "1.0.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + } + } + }, + "eslint-restricted-globals": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", + "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "dev": true + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.21", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "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": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fbjs": { + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "dev": true, + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.17" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + } + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "7.1.2", + "minimatch": "3.0.4" + } + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.2.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "first-chunk-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", + "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", + "dev": true, + "requires": { + "readable-stream": "2.3.6" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "flow-parser": { + "version": "0.69.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.69.0.tgz", + "integrity": "sha1-N4tRKNbQtVSosvFqTKPhq5ZJ8A4=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "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.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "fsu": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.0.4.tgz", + "integrity": "sha512-T8DGjqL3DNJsA/uHWUTIZhJ/VuEqi3QdNsQBAWpKtoIPS/8rK4HWG79ae2+HEw+Cz9e5lIsWghpoXCcNsrDPFA==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "gh-got": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", + "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", + "dev": true, + "requires": { + "got": "7.1.0", + "is-plain-obj": "1.1.0" + }, + "dependencies": { + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "requires": { + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.1", + "p-cancelable": "0.3.0", + "p-timeout": "1.2.1", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0", + "url-to-options": "1.0.1" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "requires": { + "p-finally": "1.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + } + } + }, + "github-username": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", + "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", + "dev": true, + "requires": { + "gh-got": "6.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-all": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", + "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", + "dev": true, + "requires": { + "glob": "7.1.2", + "yargs": "1.2.6" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", + "dev": true + }, + "yargs": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", + "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", + "dev": true, + "requires": { + "minimist": "0.1.0" + } + } + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "1.0.2", + "is-windows": "1.0.2", + "resolve-dir": "1.0.1" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.1", + "ini": "1.3.5", + "is-windows": "1.0.2", + "which": "1.3.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "got": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.0.tgz", + "integrity": "sha512-kBNy/S2CGwrYgDSec5KTWGKUvupwkkTVAjIsVFF2shXO13xpZdFP4d4kxa//CLX2tN/rV0aYwK8vY6UKWGn2vQ==", + "dev": true, + "requires": { + "@sindresorhus/is": "0.7.0", + "cacheable-request": "2.1.4", + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "into-stream": "3.1.0", + "is-retry-allowed": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.1", + "mimic-response": "1.0.0", + "p-cancelable": "0.4.1", + "p-timeout": "2.0.1", + "pify": "3.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "url-parse-lax": "3.0.0", + "url-to-options": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "grouped-queue": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", + "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "1.4.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ieee754": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.3.2", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.2.0", + "figures": "2.0.0", + "lodash": "4.17.5", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "requires": { + "from2": "2.3.0", + "p-is-promise": "1.1.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true + }, + "is-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", + "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", + "dev": true, + "requires": { + "symbol-observable": "0.2.4" + }, + "dependencies": { + "symbol-observable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", + "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "dev": true + } + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-scoped": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", + "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", + "dev": true, + "requires": { + "scoped-regex": "1.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "requires": { + "node-fetch": "1.7.3", + "whatwg-fetch": "2.0.4" + } + }, + "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": { + "version": "1.1.0-alpha.1", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-1.1.0-alpha.1.tgz", + "integrity": "sha1-eBeVZWAYohdMX2DzZ+5dNhy1e3c=", + "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "istanbul-api": "1.3.1", + "js-yaml": "3.11.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "which": "1.3.0", + "wordwrap": "1.0.0" + } + }, + "istanbul-api": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", + "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", + "dev": true, + "requires": { + "async": "2.6.0", + "compare-versions": "3.1.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-hook": "1.2.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.4", + "istanbul-lib-source-maps": "1.2.4", + "istanbul-reports": "1.3.0", + "js-yaml": "3.11.0", + "mkdirp": "0.5.1", + "once": "1.4.0" + }, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz", + "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==", + "dev": true, + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", + "dev": true, + "requires": { + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.0", + "semver": "5.5.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", + "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz", + "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==", + "dev": true, + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", + "dev": true, + "requires": { + "handlebars": "4.0.11" + } + }, + "istextorbinary": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", + "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", + "dev": true, + "requires": { + "binaryextensions": "2.1.1", + "editions": "1.3.4", + "textextensions": "2.2.0" + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "1.0.10", + "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, + "optional": true + }, + "jscodeshift": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.0.tgz", + "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", + "dev": true, + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-1": "6.24.1", + "babel-register": "6.26.0", + "babylon": "7.0.0-beta.44", + "colors": "1.2.1", + "flow-parser": "0.69.0", + "lodash": "4.17.5", + "micromatch": "2.3.11", + "neo-async": "2.5.0", + "node-dir": "0.1.8", + "nomnom": "1.8.1", + "recast": "0.14.7", + "temp": "0.8.3", + "write-file-atomic": "1.3.4" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + } + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "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.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "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": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "listr": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", + "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "figures": "1.7.0", + "indent-string": "2.1.0", + "is-observable": "0.2.0", + "is-promise": "2.1.0", + "is-stream": "1.1.0", + "listr-silent-renderer": "1.1.1", + "listr-update-renderer": "0.4.0", + "listr-verbose-renderer": "0.4.1", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "ora": "0.2.3", + "p-map": "1.2.0", + "rxjs": "5.5.8", + "stream-to-observable": "0.2.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", + "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "elegant-spinner": "1.0.1", + "figures": "1.7.0", + "indent-string": "3.2.0", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + } + } + }, + "listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "date-fns": "1.29.0", + "figures": "1.7.0" + }, + "dependencies": { + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "2.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "cli-cursor": "1.0.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "make-error": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "mem-fs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", + "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", + "dev": true, + "requires": { + "through2": "2.0.3", + "vinyl": "1.2.0", + "vinyl-file": "2.0.0" + } + }, + "mem-fs-editor": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz", + "integrity": "sha1-3Qpuryu4prN3QAZ6pUnrUwEFr58=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "deep-extend": "0.4.2", + "ejs": "2.5.8", + "glob": "7.1.2", + "globby": "6.1.0", + "mkdirp": "0.5.1", + "multimatch": "2.1.0", + "rimraf": "2.6.2", + "through2": "2.0.3", + "vinyl": "2.1.0" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "dev": true, + "requires": { + "clone": "2.1.2", + "clone-buffer": "1.0.0", + "clone-stats": "1.0.0", + "cloneable-readable": "1.1.2", + "remove-trailing-separator": "1.1.0", + "replace-ext": "1.0.0" + } + } + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.6" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", + "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.5.4", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.5.tgz", + "integrity": "sha512-3MM3UjZ5p8EJrYpG7s+29HAI9G7sTzKEe4+w37Dg0QP7qL4XGsV+Q2xet2cE37AqdgN1OtYQB6Vl98YiPV3PgA==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "mochawesome": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-3.0.2.tgz", + "integrity": "sha512-2fdl+Y5rSPlslVmuBRjT3829GYj/hh7Cyber+EkIubD60W44EkMR58jPHeopG5eBGgk3HWRl6Rm/g2knDeSbEA==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "chalk": "2.3.2", + "diff": "3.5.0", + "json-stringify-safe": "5.0.1", + "lodash": "4.17.5", + "mochawesome-report-generator": "3.1.1", + "strip-ansi": "4.0.0", + "uuid": "3.2.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "mochawesome-report-generator": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-3.1.1.tgz", + "integrity": "sha512-dzhYGBkmzKLwbO1hvSHkXcG5Q0PiUpstBH5viIePD9VYkBkFpFyDcK5Jyu9JP28qg+H7fAxKZo59aHepowdiuQ==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "dateformat": "3.0.3", + "fs-extra": "4.0.3", + "fsu": "1.0.4", + "lodash.isfunction": "3.0.9", + "opener": "1.4.3", + "prop-types": "15.6.1", + "react": "16.3.1", + "react-dom": "16.3.1", + "tcomb": "3.2.25", + "tcomb-validation": "3.4.1", + "validator": "9.4.1", + "yargs": "10.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "cliui": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.1.0" + } + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", + "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==", + "dev": true + }, + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "dev": true + }, + "node-dir": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.8.tgz", + "integrity": "sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=", + "dev": true + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.1", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.6", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } + }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "0.4.0", + "underscore": "1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.0.9" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "2.0.0", + "query-string": "5.1.1", + "sort-keys": "2.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nyc": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.6.0.tgz", + "integrity": "sha512-ZaXCh0wmbk2aSBH2B5hZGGvK2s9aM8DIm2rVY+BG3Fx8tUS+bpJSswUVZqOD1YfCmnYRFSqgYJSr7UeeUcW0jg==", + "dev": true, + "requires": { + "archy": "1.0.0", + "arrify": "1.0.1", + "caching-transform": "1.0.1", + "convert-source-map": "1.5.1", + "debug-log": "1.0.1", + "default-require-extensions": "1.0.0", + "find-cache-dir": "0.1.1", + "find-up": "2.1.0", + "foreground-child": "1.5.6", + "glob": "7.1.2", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-hook": "1.1.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.3", + "istanbul-lib-source-maps": "1.2.3", + "istanbul-reports": "1.3.0", + "md5-hex": "1.3.0", + "merge-source-map": "1.1.0", + "micromatch": "2.3.11", + "mkdirp": "0.5.1", + "resolve-from": "2.0.0", + "rimraf": "2.6.2", + "signal-exit": "3.0.2", + "spawn-wrap": "1.4.2", + "test-exclude": "4.2.1", + "yargs": "11.1.0", + "yargs-parser": "8.1.0" + }, + "dependencies": { + "align-text": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "append-transform": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "arrify": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "async": { + "version": "1.5.2", + "bundled": true, + "dev": true + }, + "atob": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-generator": { + "version": "6.26.1", + "bundled": true, + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" + } + }, + "babel-traverse": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.3", + "lodash": "4.17.5" + } + }, + "babel-types": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "bundled": true, + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "base": { + "version": "0.11.2", + "bundled": true, + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "bundled": true, + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "builtin-modules": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "caching-transform": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "md5-hex": "1.3.0", + "mkdirp": "0.5.1", + "write-file-atomic": "1.3.4" + } + }, + "camelcase": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true + }, + "center-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "class-utils": { + "version": "0.3.6", + "bundled": true, + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, + "cliui": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "commondir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "bundled": true, + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "core-js": { + "version": "2.5.3", + "bundled": true, + "dev": true + }, + "cross-spawn": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "which": "1.3.0" + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } + }, + "define-property": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "detect-indent": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "esutils": { + "version": "2.0.2", + "bundled": true, + "dev": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "bundled": true, + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "extend-shallow": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "extglob": { + "version": "0.3.2", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "bundled": true, + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "for-own": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreground-child": { + "version": "1.5.6", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "signal-exit": "3.0.2" + } + }, + "fragment-cache": { + "version": "0.2.1", + "bundled": true, + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "get-value": { + "version": "2.0.6", + "bundled": true, + "dev": true + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "bundled": true, + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "bundled": true, + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "has-value": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hosted-git-info": { + "version": "2.6.0", + "bundled": true, + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "invariant": { + "version": "2.2.3", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "is-descriptor": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-odd": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "bundled": true, + "dev": true + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "isobject": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.1", + "bundled": true, + "dev": true, + "requires": { + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.0", + "semver": "5.5.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.3", + "bundled": true, + "dev": true, + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "handlebars": "4.0.11" + } + }, + "js-tokens": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + }, + "lodash": { + "version": "4.17.5", + "bundled": true, + "dev": true + }, + "longest": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "map-cache": { + "version": "0.2.2", + "bundled": true, + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "md5-hex": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "md5-o-matic": "0.1.1" + } + }, + "md5-o-matic": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "merge-source-map": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } + } + }, + "micromatch": { + "version": "2.3.11", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "nanomatch": { + "version": "1.2.9", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "normalize-package-data": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" + } + }, + "normalize-path": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "1.2.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "pascalcase": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "path-type": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "bundled": true, + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "1.1.2" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "preserve": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "read-pkg": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + } + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "bundled": true, + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "bundled": true, + "dev": true + }, + "repeating": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "resolve-from": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "ret": { + "version": "0.1.15", + "bundled": true, + "dev": true + }, + "right-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-regex": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "set-value": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "slide": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "source-map": { + "version": "0.5.7", + "bundled": true, + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "atob": "2.0.3", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "bundled": true, + "dev": true + }, + "spawn-wrap": { + "version": "1.4.2", + "bundled": true, + "dev": true, + "requires": { + "foreground-child": "1.5.6", + "mkdirp": "0.5.1", + "os-homedir": "1.0.2", + "rimraf": "2.6.2", + "signal-exit": "3.0.2", + "which": "1.3.0" + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "split-string": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "static-extend": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "test-exclude": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "3.1.9", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "bundled": true, + "dev": true + }, + "braces": { + "version": "2.3.1", + "bundled": true, + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + }, + "micromatch": { + "version": "3.1.9", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } + } + }, + "to-fast-properties": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "trim-right": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "union-value": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unset-value": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "bundled": true, + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "bundled": true, + "dev": true + }, + "use": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "validate-npm-package-license": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "which": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "window-size": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "bundled": true, + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, + "y18n": { + "version": "3.2.1", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "11.1.0", + "bundled": true, + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "9.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true, + "dev": true + }, + "cliui": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "yargs-parser": { + "version": "9.0.2", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "8.1.0", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "bundled": true, + "dev": true + } + } + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-spinners": "0.1.2", + "object-assign": "4.1.1" + }, + "dependencies": { + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, + "p-lazy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-1.0.0.tgz", + "integrity": "sha1-7FPIAvLuOsKPFmzILQsrAt4nqDU=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.2.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.11" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.11.1.tgz", + "integrity": "sha512-T/KD65Ot0PB97xTrG8afQ46x3oiVhnfGjGESSI9NWYcG92+OUPZKkwHqGWXH2t9jK1crnQjubECW0FuOth+hxw==", + "dev": true + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "requires": { + "asap": "2.0.6" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prop-types": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.6" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", + "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "dev": true, + "requires": { + "duplexify": "3.5.4", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" + } + }, + "react": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.3.1.tgz", + "integrity": "sha512-NbkxN9jsZ6+G+ICsLdC7/wUD26uNbvKU/RAxEWgc9kcdKvROt+5d5j2cNQm5PSFTQ4WNGsR3pa4qL2Q0/WSy1w==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.1" + } + }, + "react-dom": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.1.tgz", + "integrity": "sha512-2Infg89vzahq8nfVi1GkjPqq0vrBvf0f3T0+dTtyjq4f6HKOqKixAK25Vr593O3QTx4kw/vmUtAJwerlevNWOA==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.1" + } + }, + "read-chunk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", + "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", + "dev": true, + "requires": { + "pify": "3.0.0", + "safe-buffer": "5.1.1" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" + } + }, + "recast": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", + "integrity": "sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A==", + "dev": true, + "requires": { + "ast-types": "0.11.3", + "esprima": "4.0.0", + "private": "0.1.8", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.7.0" + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "resolve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz", + "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "1.0.1" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "rxjs": { + "version": "5.5.8", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.8.tgz", + "integrity": "sha512-Bz7qou7VAIoGiglJZbzbXa4vpX5BmTTN2Dj/se6+SwADtw4SihqBIiEa7VmTXJ8pynvq0iFr5Gx9VLyye1rIxQ==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "6.4.0", + "ajv-keywords": "3.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + } + } + }, + "scoped-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", + "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "serialize-javascript": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", + "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "dev": true, + "requires": { + "atob": "2.1.0", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "stream-to-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", + "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", + "dev": true, + "requires": { + "any-observable": "0.2.0" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-bom-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", + "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", + "dev": true, + "requires": { + "first-chunk-stream": "2.0.0", + "strip-bom": "2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.3.2", + "lodash": "4.17.5", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "tapable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "dev": true + }, + "tcomb": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.25.tgz", + "integrity": "sha512-eywfhynigULV4SzNfvcXF7Ow77W0UBniQ1/9x8sNNo10al5s3PjRHShOb5OoVL8DQvLcatYRN3boviNcqb7Pkw==", + "dev": true + }, + "tcomb-validation": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", + "dev": true, + "requires": { + "tcomb": "3.2.25" + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "rimraf": "2.2.8" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "textextensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.2.0.tgz", + "integrity": "sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", + "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "ts-node": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-5.0.1.tgz", + "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "chalk": "2.3.2", + "diff": "3.5.0", + "make-error": "1.3.4", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.5.4", + "yn": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz", + "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==", + "dev": true, + "requires": { + "source-map": "0.6.1" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "tslib": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", + "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", + "dev": true + }, + "tslint": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", + "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "builtin-modules": "1.1.1", + "chalk": "2.3.2", + "commander": "2.15.1", + "diff": "3.5.0", + "glob": "7.1.2", + "js-yaml": "3.11.0", + "minimatch": "3.0.4", + "resolve": "1.7.0", + "semver": "5.5.0", + "tslib": "1.9.0", + "tsutils": "2.26.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "tsutils": { + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.26.1.tgz", + "integrity": "sha512-bnm9bcjOqOr1UljleL94wVCDlpa6KjfGaTkefeLch4GRafgDkROxPizbB/FxTEdI++5JqhxczRy/Qub0syNqZA==", + "dev": true, + "requires": { + "tslib": "1.9.0" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "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.1.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, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.1.tgz", + "integrity": "sha512-Ao/f6d/4EPLq0YwzsQz8iXflezpTkQzqAyenTiw4kCUGr1uPiFLC3+fZ+gMZz6eeI/qdRUqvC+HxIJzUAzEFdg==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", + "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz", + "integrity": "sha512-z0IbjpW8b3O/OVn+TTZN4pI29RN1zktFBXLIzzfZ+++cUtZ1ERSlLWgpE/5OERuEUs1ijVQnpYAkSlpoVmQmSQ==", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.5", + "serialize-javascript": "1.4.0", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.1.0", + "worker-farm": "1.6.0" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + } + } + } + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, + "universalify": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "untildify": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.2.tgz", + "integrity": "sha1-fx8wIFWz/qDz6B3HjrNnZstl4/E=", + "dev": true + }, + "upath": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", + "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", + "dev": true + }, + "uri-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", + "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "dev": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "2.0.0" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, + "urlgrey": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", + "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", + "dev": true + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, + "v8-compile-cache": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", + "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "validator": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", + "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==", + "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.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.4", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", + "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0", + "strip-bom-stream": "2.0.0", + "vinyl": "1.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "watchpack": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", + "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "dev": true, + "requires": { + "chokidar": "2.0.3", + "graceful-fs": "4.1.11", + "neo-async": "2.5.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "chokidar": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.1.3", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.0.4" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } + } + }, + "webpack": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.5.0.tgz", + "integrity": "sha512-6GrZsvQJnG7o7mjbfjp6s5CyMfdopjt1A/X8LcYwceis9ySjqBX6Lusso2wNZ06utHj2ZvfL6L3f7hfgVeJP6g==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "acorn-dynamic-import": "3.0.0", + "ajv": "6.4.0", + "ajv-keywords": "3.1.0", + "chrome-trace-event": "0.1.2", + "enhanced-resolve": "4.0.0", + "eslint-scope": "3.7.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.5.0", + "node-libs-browser": "2.1.0", + "schema-utils": "0.4.5", + "tapable": "1.0.0", + "uglifyjs-webpack-plugin": "1.2.4", + "watchpack": "1.5.0", + "webpack-sources": "1.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } + } + }, + "webpack-addons": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/webpack-addons/-/webpack-addons-1.1.5.tgz", + "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", + "dev": true, + "requires": { + "jscodeshift": "0.4.1" + }, + "dependencies": { + "ast-types": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", + "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", + "dev": true + }, + "jscodeshift": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", + "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", + "dev": true, + "requires": { + "async": "1.5.2", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-1": "6.24.1", + "babel-register": "6.26.0", + "babylon": "6.18.0", + "colors": "1.2.1", + "flow-parser": "0.69.0", + "lodash": "4.17.5", + "micromatch": "2.3.11", + "node-dir": "0.1.8", + "nomnom": "1.8.1", + "recast": "0.12.9", + "temp": "0.8.3", + "write-file-atomic": "1.3.4" + } + }, + "recast": { + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", + "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", + "dev": true, + "requires": { + "ast-types": "0.10.1", + "core-js": "2.5.5", + "esprima": "4.0.0", + "private": "0.1.8", + "source-map": "0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.14.tgz", + "integrity": "sha512-gRoWaxSi2JWiYsn1QgOTb6ENwIeSvN1YExZ+kJ0STsTZK7bWPElW+BBBv1UnTbvcPC3v7E17mK8hlFX8DOYSGw==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "cross-spawn": "6.0.5", + "diff": "3.5.0", + "enhanced-resolve": "4.0.0", + "envinfo": "4.4.2", + "glob-all": "3.1.0", + "global-modules": "1.0.0", + "got": "8.3.0", + "import-local": "1.0.0", + "inquirer": "5.2.0", + "interpret": "1.1.0", + "jscodeshift": "0.5.0", + "listr": "0.13.0", + "loader-utils": "1.1.0", + "lodash": "4.17.5", + "log-symbols": "2.2.0", + "mkdirp": "0.5.1", + "p-each-series": "1.0.0", + "p-lazy": "1.0.0", + "prettier": "1.11.1", + "supports-color": "5.3.0", + "v8-compile-cache": "1.1.2", + "webpack-addons": "1.1.5", + "yargs": "11.1.0", + "yeoman-environment": "2.0.6", + "yeoman-generator": "2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "cliui": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "1.0.4", + "path-key": "2.0.1", + "semver": "5.5.0", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.3.2", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.2.0", + "figures": "2.0.0", + "lodash": "4.17.5", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rxjs": "5.5.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "9.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, + "yeoman-environment": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", + "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "globby": "6.1.0", + "grouped-queue": "0.3.3", + "inquirer": "3.3.0", + "is-scoped": "1.0.0", + "lodash": "4.17.5", + "log-symbols": "2.2.0", + "mem-fs": "1.1.3", + "text-table": "0.2.0", + "untildify": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "yeoman-generator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.3.tgz", + "integrity": "sha512-mODmrZ26a94djmGZZuIiomSGlN4wULdou29ZwcySupb2e9FdvoCl7Ps2FqHFjEHio3kOl/iBeaNqrnx3C3NwWg==", + "dev": true, + "requires": { + "async": "2.6.0", + "chalk": "2.3.2", + "cli-table": "0.3.1", + "cross-spawn": "5.1.0", + "dargs": "5.1.0", + "dateformat": "3.0.3", + "debug": "3.1.0", + "detect-conflict": "1.0.1", + "error": "7.0.2", + "find-up": "2.1.0", + "github-username": "4.1.0", + "istextorbinary": "2.2.1", + "lodash": "4.17.5", + "make-dir": "1.2.0", + "mem-fs-editor": "3.0.2", + "minimist": "1.2.0", + "pretty-bytes": "4.0.2", + "read-chunk": "2.1.0", + "read-pkg-up": "3.0.0", + "rimraf": "2.6.2", + "run-async": "2.3.0", + "shelljs": "0.8.1", + "text-table": "0.2.0", + "through2": "2.0.3", + "yeoman-environment": "2.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "4.0.0", + "pify": "3.0.0", + "strip-bom": "3.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.2" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "4.0.0", + "normalize-package-data": "2.4.0", + "path-type": "3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + } + } +} diff --git a/src/js/others/balanced-symbols.js b/src/js/others/balanced-symbols.js index 60887593..70bcd27d 100644 --- a/src/js/others/balanced-symbols.js +++ b/src/js/others/balanced-symbols.js @@ -17,12 +17,8 @@ export function parenthesesChecker(symbols) { } else if (stack.isEmpty()) { balanced = false; } else { - if (!stack.isEmpty()) { - top = stack.pop(); - if (!(opens.indexOf(top) === closers.indexOf(symbol))) { - balanced = false; - } - } else { // error case + top = stack.pop(); + if (!(opens.indexOf(top) === closers.indexOf(symbol))) { balanced = false; } } From 1b0f52d9adbca6cdae85fc821533e0bcea25fee1 Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Mon, 9 Apr 2018 16:20:50 +0200 Subject: [PATCH 093/188] simplified the code and clean up. --- src/ts/others/balanced-symbols.ts | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/ts/others/balanced-symbols.ts b/src/ts/others/balanced-symbols.ts index cf8c2fe4..35636d7e 100644 --- a/src/ts/others/balanced-symbols.ts +++ b/src/ts/others/balanced-symbols.ts @@ -10,34 +10,20 @@ export function parenthesesChecker(symbols: string) { let top: string; while (index < symbols.length && balanced) { - symbol = symbols.charAt(index); + symbol = symbols[index]; if (opens.indexOf(symbol) >= 0) { stack.push(symbol); - // console.log(`open symbol - stacking ${symbol}`); } else { - // console.log(`close symbol ${symbol}`); if (stack.isEmpty()) { balanced = false; - // console.log('Stack is empty, no more symbols to pop and compare'); } else { top = stack.pop(); - // if (!matches(top, symbol)){ if (!(opens.indexOf(top) === closers.indexOf(symbol))) { balanced = false; - /* console.log( - `poping symbol ${top} - is not a match compared to ${symbol}` - ); */ - } /* else { - console.log( - `poping symbol ${top} - is is a match compared to ${symbol}` - ); - } */ + } } } index++; } - if (balanced && stack.isEmpty()) { - return true; - } - return false; + return balanced && stack.isEmpty(); } From fb2742522936f646e593b2ab87c01c5c4c332ce5 Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Mon, 9 Apr 2018 16:25:10 +0200 Subject: [PATCH 094/188] Used the *= operator by factorial.ts --- src/ts/others/factorial.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ts/others/factorial.ts b/src/ts/others/factorial.ts index 5ee10414..e6e4cea9 100644 --- a/src/ts/others/factorial.ts +++ b/src/ts/others/factorial.ts @@ -4,7 +4,7 @@ export function factorialIterative(number: number) { } let total = 1; for (let n = number; n > 1; n--) { - total = total * n; + total *= n; } return total; } From e2426d5e57bb40ff7a25a800dd3f3533d2ad1dfd Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Mon, 9 Apr 2018 16:31:59 +0200 Subject: [PATCH 095/188] removed unnecessary variable isEqual --- src/ts/others/palindrome-checker.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/ts/others/palindrome-checker.ts b/src/ts/others/palindrome-checker.ts index 10c5a21a..4742d1cd 100644 --- a/src/ts/others/palindrome-checker.ts +++ b/src/ts/others/palindrome-checker.ts @@ -9,20 +9,19 @@ export function palindromeChecker(aString: string) { const deque = new Deque(); const lowerString = aString.toLocaleLowerCase().split(' ').join(''); - let isEqual = true; let firstChar: string, lastChar: string; for (let i = 0; i < lowerString.length; i++) { deque.addBack(lowerString.charAt(i)); } - while (deque.size() > 1 && isEqual) { + while (deque.size() > 1) { firstChar = deque.removeFront(); lastChar = deque.removeBack(); if (firstChar !== lastChar) { - isEqual = false; + return false; } } - return isEqual; + return true; } From 05841872b04369ca824272d2a9cadda7350c490d Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Mon, 9 Apr 2018 16:37:30 +0200 Subject: [PATCH 096/188] removed variable isEqual by the javascript version. of palindrome check --- src/js/others/palindrome-checker.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/js/others/palindrome-checker.js b/src/js/others/palindrome-checker.js index 17a0c581..54210c7b 100644 --- a/src/js/others/palindrome-checker.js +++ b/src/js/others/palindrome-checker.js @@ -10,7 +10,6 @@ export function palindromeChecker(aString) { } const deque = new Deque(); const lowerString = aString.toLocaleLowerCase().split(' ').join(''); - let isEqual = true; let firstChar; let lastChar; @@ -18,13 +17,13 @@ export function palindromeChecker(aString) { deque.addBack(lowerString.charAt(i)); } - while (deque.size() > 1 && isEqual) { + while (deque.size() > 1) { firstChar = deque.removeFront(); lastChar = deque.removeBack(); if (firstChar !== lastChar) { - isEqual = false; + return false; } } - return isEqual; + return true; } From cdd647c169174d9338db011b50fd4324fd67dec7 Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Mon, 9 Apr 2018 16:46:04 +0200 Subject: [PATCH 097/188] Put in defaultCompare the constant EQUALS --- src/js/util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/util.js b/src/js/util.js index 70e85181..f88d7bcd 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -18,7 +18,7 @@ export function biggerEquals(a, b, compareFn) { export function defaultCompare(a, b) { if (a === b) { - return 0; + return Compare.EQUALS; } return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN; } From 7d3fa40b4261f6d6848f1eae8fb27ac87c0aa14e Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Mon, 9 Apr 2018 17:01:57 +0200 Subject: [PATCH 098/188] clean up --- src/js/algorithms/sorting/quicksort.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/js/algorithms/sorting/quicksort.js b/src/js/algorithms/sorting/quicksort.js index 2ac40b4a..ede28fd5 100644 --- a/src/js/algorithms/sorting/quicksort.js +++ b/src/js/algorithms/sorting/quicksort.js @@ -4,18 +4,15 @@ function partition(array, left, right, compareFn) { const pivot = array[Math.floor((right + left) / 2)]; let i = left; let j = right; - // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right); + while (i <= j) { while (compareFn(array[i], pivot) === Compare.LESS_THAN) { i++; - // console.log('i = ' + i); } while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) { j--; - // console.log('j = ' + j); } if (i <= j) { - // console.log('swap ' + array[i] + ' with ' + array[j]); swap(array, i, j); i++; j--; From 6f4ef3328ae3f9dba0a24001819bf963b6a04bad Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Mon, 9 Apr 2018 17:22:12 +0200 Subject: [PATCH 099/188] added a script serve for running the http-server --- package-lock.json | 15212 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 6 +- 2 files changed, 15217 insertions(+), 1 deletion(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..ba3806c6 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,15212 @@ +{ + "name": "javascript-datastructures-algorithms", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.44" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "2.5.1", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "@babel/template": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "lodash": "4.17.5" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + } + } + }, + "@babel/traverse": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "debug": "3.1.0", + "globals": "11.4.0", + "invariant": "2.2.4", + "lodash": "4.17.5" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", + "dev": true, + "requires": { + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, + "@types/chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz", + "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==", + "dev": true + }, + "@types/mocha": { + "version": "2.2.48", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", + "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", + "dev": true + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "access-log": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/access-log/-/access-log-0.3.9.tgz", + "integrity": "sha1-AcJpW6fn0y21KI7z8U5k1nGfOtE=", + "requires": { + "strftime": "0.6.2" + } + }, + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "dev": true, + "requires": { + "acorn": "5.5.3" + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "any-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", + "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", + "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", + "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": 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.0", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", + "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "dev": true + }, + "babel-cli": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.15.1", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.2", + "lodash": "4.17.5", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.7", + "v8flags": "2.1.1" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-eslint": { + "version": "8.2.2", + "resolved": "http://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.2.tgz", + "integrity": "sha512-Qt2lz2egBxNYWqN9JIO2z4NOOf8i4b5JS6CFoYrOZZTDssueiV1jH/jsefyg+86SeNY3rB361/mi3kE1WK2WYQ==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-loader": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", + "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", + "dev": true, + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-add-module-exports": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", + "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=", + "dev": true + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "dev": true, + "requires": { + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.5", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, + "babel-preset-env": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", + "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.11.3", + "invariant": "2.2.4", + "semver": "5.5.0" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "dev": true, + "requires": { + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.5", + "home-or-tmp": "2.0.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.5", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.5" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-js": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", + "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "binaryextensions": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.1.tgz", + "integrity": "sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA==", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, + "browserslist": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000824", + "electron-to-chromium": "1.3.42" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.3", + "ieee754": "1.1.11", + "isarray": "1.0.0" + } + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.2", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.3.0", + "unique-filename": "1.1.0", + "y18n": "4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "caniuse-lite": { + "version": "1.0.30000824", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000824.tgz", + "integrity": "sha512-KcgeAvVkpzN05Mjiyz5vf0le5AWRwfRGqGkKXWWsdrLQd4EIBevReSy7mYCdwSq7MqKrmJ0lEQEkUQE2VspRRw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.8" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "optional": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "chrome-trace-event": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.2.tgz", + "integrity": "sha1-kPNohdU0WlBiEzLwcXtZWIPV2YI=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "cleanse": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/cleanse/-/cleanse-0.0.3.tgz", + "integrity": "sha1-4S7UkQLSaOoBelykgDQG3I0jjAU=" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-spinners": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "dev": true + }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + } + } + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "1.0.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "1.0.0" + } + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "process-nextick-args": "2.0.0", + "readable-stream": "2.3.6" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codecov": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.0.tgz", + "integrity": "sha1-wnO4xPEpRXI+jcnSWAPYk0Pl8o4=", + "dev": true, + "requires": { + "argv": "0.0.2", + "request": "2.81.0", + "urlgrey": "0.4.4" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", + "integrity": "sha512-s8+wktIuDSLffCywiwSxQOMqtPxML11a/dtHE17tMn4B1MSWw/C22EKf7M2KGUBcDaVFEGT+S8N02geDXeuNKg==", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-versions": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz", + "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=" + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dargs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", + "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "1.0.0" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "detect-conflict": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", + "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", + "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" + } + }, + "easyreq": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/easyreq/-/easyreq-0.1.3.tgz", + "integrity": "sha1-uS2JSu8epIFaRBA3KNe2hVvdero=", + "requires": { + "cleanse": "0.0.3" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ecstatic": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.2.0.tgz", + "integrity": "sha512-Goilx/2cfU9vvfQjgtNgc2VmJAD8CasQ6rZDqCd2u4Hsyd/qFET6nBf60jiHodevR3nl3IGzNKtrzPXWP88utQ==", + "requires": { + "he": "1.1.1", + "mime": "1.6.0", + "minimist": "1.2.0", + "url-join": "2.0.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "dev": true + }, + "ejs": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.8.tgz", + "integrity": "sha512-QIDZL54fyV8MDcAsO91BMH1ft2qGGaHIJsJIA/+t+7uvXol1dm413fPcUgUb4k8F/9457rx4/KFE4XfDifrQxQ==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.42", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz", + "integrity": "sha1-lcM78B0MxAVVauyJn+Yf1NduoPk=", + "dev": true + }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "0.4.21" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", + "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "tapable": "1.0.0" + } + }, + "envinfo": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-4.4.2.tgz", + "integrity": "sha512-5rfRs+m+6pwoKRCFqpsA5+qsLngFms1aWPrxfKbrObCzQaPc3M3yPloZx+BL9UE3dK58cxw36XVQbFRSCCfGSQ==", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "dev": true, + "requires": { + "string-template": "0.2.1", + "xtend": "4.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.3.2", + "concat-stream": "1.6.2", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.1", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.4.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "regexpp": "1.1.0", + "require-uncached": "1.0.3", + "semver": "5.5.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "eslint-config-airbnb-base": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz", + "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", + "dev": true, + "requires": { + "eslint-restricted-globals": "0.1.1" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "2.6.9", + "resolve": "1.7.0" + } + }, + "eslint-module-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "dev": true, + "requires": { + "debug": "2.6.9", + "pkg-dir": "1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.10.0.tgz", + "integrity": "sha1-+gkIPVp1KI35xsfQn+EiVZhWVec=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.2.0", + "has": "1.0.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + } + } + }, + "eslint-restricted-globals": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", + "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "dev": true + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.21", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "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": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fbjs": { + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "dev": true, + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.17" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + } + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "7.1.2", + "minimatch": "3.0.4" + } + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.2.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "first-chunk-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", + "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", + "dev": true, + "requires": { + "readable-stream": "2.3.6" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "flow-parser": { + "version": "0.69.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.69.0.tgz", + "integrity": "sha1-N4tRKNbQtVSosvFqTKPhq5ZJ8A4=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "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.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "fsu": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.0.4.tgz", + "integrity": "sha512-T8DGjqL3DNJsA/uHWUTIZhJ/VuEqi3QdNsQBAWpKtoIPS/8rK4HWG79ae2+HEw+Cz9e5lIsWghpoXCcNsrDPFA==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "gh-got": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", + "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", + "dev": true, + "requires": { + "got": "7.1.0", + "is-plain-obj": "1.1.0" + }, + "dependencies": { + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "requires": { + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.1", + "p-cancelable": "0.3.0", + "p-timeout": "1.2.1", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0", + "url-to-options": "1.0.1" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "requires": { + "p-finally": "1.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + } + } + }, + "github-username": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", + "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", + "dev": true, + "requires": { + "gh-got": "6.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-all": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", + "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", + "dev": true, + "requires": { + "glob": "7.1.2", + "yargs": "1.2.6" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", + "dev": true + }, + "yargs": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", + "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", + "dev": true, + "requires": { + "minimist": "0.1.0" + } + } + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "1.0.2", + "is-windows": "1.0.2", + "resolve-dir": "1.0.1" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.1", + "ini": "1.3.5", + "is-windows": "1.0.2", + "which": "1.3.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "got": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.0.tgz", + "integrity": "sha512-kBNy/S2CGwrYgDSec5KTWGKUvupwkkTVAjIsVFF2shXO13xpZdFP4d4kxa//CLX2tN/rV0aYwK8vY6UKWGn2vQ==", + "dev": true, + "requires": { + "@sindresorhus/is": "0.7.0", + "cacheable-request": "2.1.4", + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "into-stream": "3.1.0", + "is-retry-allowed": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.1", + "mimic-response": "1.0.0", + "p-cancelable": "0.4.1", + "p-timeout": "2.0.1", + "pify": "3.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "url-parse-lax": "3.0.0", + "url-to-options": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "grouped-queue": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", + "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "1.4.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-server": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz", + "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==", + "requires": { + "colors": "1.0.3", + "corser": "2.0.1", + "ecstatic": "3.2.0", + "http-proxy": "1.16.2", + "opener": "1.4.3", + "optimist": "0.6.1", + "portfinder": "1.0.13", + "union": "0.4.6" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "httpserver": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/httpserver/-/httpserver-0.3.0.tgz", + "integrity": "sha1-6a6usNLUCy74Eghr0M+FUFPnCVA=", + "requires": { + "access-log": "0.3.9", + "latest": "0.2.0", + "posix-getopt": "1.2.0", + "static-route": "0.1.2" + } + }, + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ieee754": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.3.2", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.2.0", + "figures": "2.0.0", + "lodash": "4.17.5", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "requires": { + "from2": "2.3.0", + "p-is-promise": "1.1.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true + }, + "is-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", + "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", + "dev": true, + "requires": { + "symbol-observable": "0.2.4" + }, + "dependencies": { + "symbol-observable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", + "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "dev": true + } + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-scoped": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", + "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", + "dev": true, + "requires": { + "scoped-regex": "1.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "requires": { + "node-fetch": "1.7.3", + "whatwg-fetch": "2.0.4" + } + }, + "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": { + "version": "1.1.0-alpha.1", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-1.1.0-alpha.1.tgz", + "integrity": "sha1-eBeVZWAYohdMX2DzZ+5dNhy1e3c=", + "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "istanbul-api": "1.3.1", + "js-yaml": "3.11.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "which": "1.3.0", + "wordwrap": "1.0.0" + } + }, + "istanbul-api": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", + "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", + "dev": true, + "requires": { + "async": "2.6.0", + "compare-versions": "3.1.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-hook": "1.2.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.4", + "istanbul-lib-source-maps": "1.2.4", + "istanbul-reports": "1.3.0", + "js-yaml": "3.11.0", + "mkdirp": "0.5.1", + "once": "1.4.0" + }, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz", + "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==", + "dev": true, + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", + "dev": true, + "requires": { + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.0", + "semver": "5.5.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", + "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz", + "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==", + "dev": true, + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", + "dev": true, + "requires": { + "handlebars": "4.0.11" + } + }, + "istextorbinary": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", + "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", + "dev": true, + "requires": { + "binaryextensions": "2.1.1", + "editions": "1.3.4", + "textextensions": "2.2.0" + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "1.0.10", + "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, + "optional": true + }, + "jscodeshift": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.0.tgz", + "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", + "dev": true, + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-1": "6.24.1", + "babel-register": "6.26.0", + "babylon": "7.0.0-beta.44", + "colors": "1.2.1", + "flow-parser": "0.69.0", + "lodash": "4.17.5", + "micromatch": "2.3.11", + "neo-async": "2.5.0", + "node-dir": "0.1.8", + "nomnom": "1.8.1", + "recast": "0.14.7", + "temp": "0.8.3", + "write-file-atomic": "1.3.4" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + } + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "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.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "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": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "latest": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/latest/-/latest-0.2.0.tgz", + "integrity": "sha1-6kfrj0srsM+RcW76qJbC4WI3WHs=", + "requires": { + "npm": "2.15.12" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "listr": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", + "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "figures": "1.7.0", + "indent-string": "2.1.0", + "is-observable": "0.2.0", + "is-promise": "2.1.0", + "is-stream": "1.1.0", + "listr-silent-renderer": "1.1.1", + "listr-update-renderer": "0.4.0", + "listr-verbose-renderer": "0.4.1", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "ora": "0.2.3", + "p-map": "1.2.0", + "rxjs": "5.5.8", + "stream-to-observable": "0.2.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", + "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "elegant-spinner": "1.0.1", + "figures": "1.7.0", + "indent-string": "3.2.0", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + } + } + }, + "listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "date-fns": "1.29.0", + "figures": "1.7.0" + }, + "dependencies": { + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "2.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "cli-cursor": "1.0.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "make-error": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "mem-fs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", + "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", + "dev": true, + "requires": { + "through2": "2.0.3", + "vinyl": "1.2.0", + "vinyl-file": "2.0.0" + } + }, + "mem-fs-editor": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz", + "integrity": "sha1-3Qpuryu4prN3QAZ6pUnrUwEFr58=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "deep-extend": "0.4.2", + "ejs": "2.5.8", + "glob": "7.1.2", + "globby": "6.1.0", + "mkdirp": "0.5.1", + "multimatch": "2.1.0", + "rimraf": "2.6.2", + "through2": "2.0.3", + "vinyl": "2.1.0" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "dev": true, + "requires": { + "clone": "2.1.2", + "clone-buffer": "1.0.0", + "clone-stats": "1.0.0", + "cloneable-readable": "1.1.2", + "remove-trailing-separator": "1.1.0", + "replace-ext": "1.0.0" + } + } + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.6" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", + "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.5.4", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.5.tgz", + "integrity": "sha512-3MM3UjZ5p8EJrYpG7s+29HAI9G7sTzKEe4+w37Dg0QP7qL4XGsV+Q2xet2cE37AqdgN1OtYQB6Vl98YiPV3PgA==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "mochawesome": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-3.0.2.tgz", + "integrity": "sha512-2fdl+Y5rSPlslVmuBRjT3829GYj/hh7Cyber+EkIubD60W44EkMR58jPHeopG5eBGgk3HWRl6Rm/g2knDeSbEA==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "chalk": "2.3.2", + "diff": "3.5.0", + "json-stringify-safe": "5.0.1", + "lodash": "4.17.5", + "mochawesome-report-generator": "3.1.1", + "strip-ansi": "4.0.0", + "uuid": "3.2.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "mochawesome-report-generator": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-3.1.1.tgz", + "integrity": "sha512-dzhYGBkmzKLwbO1hvSHkXcG5Q0PiUpstBH5viIePD9VYkBkFpFyDcK5Jyu9JP28qg+H7fAxKZo59aHepowdiuQ==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "dateformat": "3.0.3", + "fs-extra": "4.0.3", + "fsu": "1.0.4", + "lodash.isfunction": "3.0.9", + "opener": "1.4.3", + "prop-types": "15.6.1", + "react": "16.3.1", + "react-dom": "16.3.1", + "tcomb": "3.2.25", + "tcomb-validation": "3.4.1", + "validator": "9.4.1", + "yargs": "10.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "cliui": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.1.0" + } + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", + "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==", + "dev": true + }, + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "dev": true + }, + "node-dir": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.8.tgz", + "integrity": "sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=", + "dev": true + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.1", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.6", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } + }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "0.4.0", + "underscore": "1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.0.9" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "2.0.0", + "query-string": "5.1.1", + "sort-keys": "2.0.0" + } + }, + "npm": { + "version": "2.15.12", + "resolved": "https://registry.npmjs.org/npm/-/npm-2.15.12.tgz", + "integrity": "sha1-33w+1aJ3w/nUtdgZsFMR0QogCuY=", + "requires": { + "abbrev": "1.0.9", + "ansi": "0.3.1", + "ansi-regex": "2.0.0", + "ansicolors": "0.3.2", + "ansistyles": "0.1.3", + "archy": "1.0.0", + "async-some": "1.0.2", + "block-stream": "0.0.9", + "char-spinner": "1.0.1", + "chmodr": "1.0.2", + "chownr": "1.0.1", + "cmd-shim": "2.0.2", + "columnify": "1.5.4", + "config-chain": "1.1.10", + "dezalgo": "1.0.3", + "editor": "1.0.0", + "fs-vacuum": "1.2.9", + "fs-write-stream-atomic": "1.0.8", + "fstream": "1.0.10", + "fstream-npm": "1.1.1", + "github-url-from-git": "1.4.0", + "github-url-from-username-repo": "1.0.2", + "glob": "7.0.6", + "graceful-fs": "4.1.6", + "hosted-git-info": "2.1.5", + "imurmurhash": "0.1.4", + "inflight": "1.0.5", + "inherits": "2.0.3", + "ini": "1.3.4", + "init-package-json": "1.9.4", + "lockfile": "1.0.1", + "lru-cache": "4.0.1", + "minimatch": "3.0.3", + "mkdirp": "0.5.1", + "node-gyp": "3.6.0", + "nopt": "3.0.6", + "normalize-git-url": "3.0.2", + "normalize-package-data": "2.3.5", + "npm-cache-filename": "1.0.2", + "npm-install-checks": "1.0.7", + "npm-package-arg": "4.1.0", + "npm-registry-client": "7.2.1", + "npm-user-validate": "0.1.5", + "npmlog": "2.0.4", + "once": "1.4.0", + "opener": "1.4.1", + "osenv": "0.1.3", + "path-is-inside": "1.0.1", + "read": "1.0.7", + "read-installed": "4.0.3", + "read-package-json": "2.0.4", + "readable-stream": "2.1.5", + "realize-package-specifier": "3.0.1", + "request": "2.74.0", + "retry": "0.10.0", + "rimraf": "2.5.4", + "semver": "5.1.0", + "sha": "2.0.1", + "slide": "1.1.6", + "sorted-object": "2.0.0", + "spdx-license-ids": "1.2.2", + "strip-ansi": "3.0.1", + "tar": "2.2.1", + "text-table": "0.2.0", + "uid-number": "0.0.6", + "umask": "1.1.0", + "validate-npm-package-license": "3.0.1", + "validate-npm-package-name": "2.2.2", + "which": "1.2.11", + "wrappy": "1.0.2", + "write-file-atomic": "1.1.4" + }, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "bundled": true + }, + "ansi": { + "version": "0.3.1", + "bundled": true + }, + "ansi-regex": { + "version": "2.0.0", + "bundled": true + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "async-some": { + "version": "1.0.2", + "bundled": true, + "requires": { + "dezalgo": "1.0.3" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "char-spinner": { + "version": "1.0.1", + "bundled": true + }, + "chmodr": { + "version": "1.0.2", + "bundled": true + }, + "chownr": { + "version": "1.0.1", + "bundled": true + }, + "cmd-shim": { + "version": "2.0.2", + "bundled": true, + "requires": { + "graceful-fs": "4.1.6", + "mkdirp": "0.5.1" + } + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "3.0.1", + "wcwidth": "1.0.0" + }, + "dependencies": { + "wcwidth": { + "version": "1.0.0", + "bundled": true, + "requires": { + "defaults": "1.0.3" + }, + "dependencies": { + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.2", + "bundled": true + } + } + } + } + } + } + }, + "config-chain": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ini": "1.3.4", + "proto-list": "1.2.4" + }, + "dependencies": { + "proto-list": { + "version": "1.2.4", + "bundled": true + } + } + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "2.0.3", + "wrappy": "1.0.2" + }, + "dependencies": { + "asap": { + "version": "2.0.3", + "bundled": true + } + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "fs-vacuum": { + "version": "1.2.9", + "bundled": true, + "requires": { + "graceful-fs": "4.1.6", + "path-is-inside": "1.0.1", + "rimraf": "2.5.4" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.8", + "bundled": true, + "requires": { + "graceful-fs": "4.1.6", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.1.5" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "fstream": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "4.1.6", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.5.4" + } + }, + "fstream-npm": { + "version": "1.1.1", + "bundled": true, + "requires": { + "fstream-ignore": "1.0.5", + "inherits": "2.0.3" + }, + "dependencies": { + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "requires": { + "fstream": "1.0.10", + "inherits": "2.0.3", + "minimatch": "3.0.3" + } + } + } + }, + "github-url-from-git": { + "version": "1.4.0", + "bundled": true + }, + "github-url-from-username-repo": { + "version": "1.0.2", + "bundled": true + }, + "glob": { + "version": "7.0.6", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.5", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.0" + }, + "dependencies": { + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "path-is-absolute": { + "version": "1.0.0", + "bundled": true + } + } + }, + "graceful-fs": { + "version": "4.1.6", + "bundled": true + }, + "hosted-git-info": { + "version": "2.1.5", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "inflight": { + "version": "1.0.5", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true + }, + "init-package-json": { + "version": "1.9.4", + "bundled": true, + "requires": { + "glob": "6.0.4", + "npm-package-arg": "4.1.0", + "promzard": "0.3.0", + "read": "1.0.7", + "read-package-json": "2.0.4", + "semver": "5.1.0", + "validate-npm-package-license": "3.0.1", + "validate-npm-package-name": "2.2.2" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "bundled": true, + "requires": { + "inflight": "1.0.5", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.0" + }, + "dependencies": { + "path-is-absolute": { + "version": "1.0.0", + "bundled": true + } + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1.0.7" + } + } + } + }, + "lockfile": { + "version": "1.0.1", + "bundled": true + }, + "lru-cache": { + "version": "4.0.1", + "bundled": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.0.0" + }, + "dependencies": { + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "2.0.0", + "bundled": true + } + } + }, + "minimatch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "brace-expansion": "1.1.6" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "node-gyp": { + "version": "3.6.0", + "bundled": true, + "requires": { + "fstream": "1.0.10", + "glob": "7.0.6", + "graceful-fs": "4.1.6", + "minimatch": "3.0.3", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "2.0.4", + "osenv": "0.1.3", + "request": "2.74.0", + "rimraf": "2.5.4", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.2.11" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "bundled": true + } + } + }, + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1.0.9" + } + }, + "normalize-git-url": { + "version": "3.0.2", + "bundled": true + }, + "normalize-package-data": { + "version": "2.3.5", + "bundled": true, + "requires": { + "hosted-git-info": "2.1.5", + "is-builtin-module": "1.0.0", + "semver": "5.1.0", + "validate-npm-package-license": "3.0.1" + }, + "dependencies": { + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "requires": { + "builtin-modules": "1.1.0" + }, + "dependencies": { + "builtin-modules": { + "version": "1.1.0", + "bundled": true + } + } + } + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "1.0.7", + "bundled": true, + "requires": { + "npmlog": "2.0.4", + "semver": "5.1.0" + } + }, + "npm-package-arg": { + "version": "4.1.0", + "bundled": true, + "requires": { + "hosted-git-info": "2.1.5", + "semver": "5.1.0" + } + }, + "npm-registry-client": { + "version": "7.2.1", + "bundled": true, + "requires": { + "concat-stream": "1.5.2", + "graceful-fs": "4.1.6", + "normalize-package-data": "2.3.5", + "npm-package-arg": "4.1.0", + "npmlog": "2.0.4", + "once": "1.4.0", + "request": "2.74.0", + "retry": "0.10.0", + "semver": "5.1.0", + "slide": "1.1.6" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.2", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "bundled": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + }, + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "retry": { + "version": "0.10.0", + "bundled": true + } + } + }, + "npm-user-validate": { + "version": "0.1.5", + "bundled": true + }, + "npmlog": { + "version": "2.0.4", + "bundled": true, + "requires": { + "ansi": "0.3.1", + "are-we-there-yet": "1.1.2", + "gauge": "1.2.7" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.1.2", + "bundled": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.1.5" + }, + "dependencies": { + "delegates": { + "version": "1.0.0", + "bundled": true + } + } + }, + "gauge": { + "version": "1.2.7", + "bundled": true, + "requires": { + "ansi": "0.3.1", + "has-unicode": "2.0.0", + "lodash.pad": "4.4.0", + "lodash.padend": "4.5.0", + "lodash.padstart": "4.5.0" + }, + "dependencies": { + "has-unicode": { + "version": "2.0.0", + "bundled": true + }, + "lodash._baseslice": { + "version": "4.0.0", + "bundled": true + }, + "lodash._basetostring": { + "version": "4.12.0", + "bundled": true + }, + "lodash.pad": { + "version": "4.4.0", + "bundled": true, + "requires": { + "lodash._baseslice": "4.0.0", + "lodash._basetostring": "4.12.0", + "lodash.tostring": "4.1.4" + } + }, + "lodash.padend": { + "version": "4.5.0", + "bundled": true, + "requires": { + "lodash._baseslice": "4.0.0", + "lodash._basetostring": "4.12.0", + "lodash.tostring": "4.1.4" + } + }, + "lodash.padstart": { + "version": "4.5.0", + "bundled": true, + "requires": { + "lodash._baseslice": "4.0.0", + "lodash._basetostring": "4.12.0", + "lodash.tostring": "4.1.4" + } + }, + "lodash.tostring": { + "version": "4.1.4", + "bundled": true + } + } + } + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "opener": { + "version": "1.4.1", + "bundled": true + }, + "osenv": { + "version": "0.1.3", + "bundled": true, + "requires": { + "os-homedir": "1.0.0", + "os-tmpdir": "1.0.1" + }, + "dependencies": { + "os-homedir": { + "version": "1.0.0", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.1", + "bundled": true + } + } + }, + "path-is-inside": { + "version": "1.0.1", + "bundled": true + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "0.0.5" + }, + "dependencies": { + "mute-stream": { + "version": "0.0.5", + "bundled": true + } + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "1.0.1", + "graceful-fs": "4.1.6", + "read-package-json": "2.0.4", + "readdir-scoped-modules": "1.0.2", + "semver": "5.1.0", + "slide": "1.1.6", + "util-extend": "1.0.1" + }, + "dependencies": { + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "readdir-scoped-modules": { + "version": "1.0.2", + "bundled": true, + "requires": { + "debuglog": "1.0.1", + "dezalgo": "1.0.3", + "graceful-fs": "4.1.6", + "once": "1.4.0" + } + }, + "util-extend": { + "version": "1.0.1", + "bundled": true + } + } + }, + "read-package-json": { + "version": "2.0.4", + "bundled": true, + "requires": { + "glob": "6.0.4", + "graceful-fs": "4.1.6", + "json-parse-helpfulerror": "1.0.3", + "normalize-package-data": "2.3.5" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "bundled": true, + "requires": { + "inflight": "1.0.5", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.0" + }, + "dependencies": { + "path-is-absolute": { + "version": "1.0.0", + "bundled": true + } + } + }, + "json-parse-helpfulerror": { + "version": "1.0.3", + "bundled": true, + "requires": { + "jju": "1.3.0" + }, + "dependencies": { + "jju": { + "version": "1.3.0", + "bundled": true + } + } + } + } + }, + "readable-stream": { + "version": "2.1.5", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + }, + "realize-package-specifier": { + "version": "3.0.1", + "bundled": true, + "requires": { + "dezalgo": "1.0.3", + "npm-package-arg": "4.1.0" + } + }, + "request": { + "version": "2.74.0", + "bundled": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.4.1", + "bl": "1.1.2", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.0", + "forever-agent": "0.6.1", + "form-data": "1.0.0-rc4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.11", + "node-uuid": "1.4.7", + "oauth-sign": "0.8.2", + "qs": "6.2.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.1", + "tunnel-agent": "0.4.3" + }, + "dependencies": { + "aws-sign2": { + "version": "0.6.0", + "bundled": true + }, + "aws4": { + "version": "1.4.1", + "bundled": true + }, + "bl": { + "version": "1.1.2", + "bundled": true, + "requires": { + "readable-stream": "2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "bundled": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + } + } + }, + "caseless": { + "version": "0.11.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + }, + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.0", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "1.0.0-rc4", + "bundled": true, + "requires": { + "async": "1.5.2", + "combined-stream": "1.0.5", + "mime-types": "2.1.11" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "bundled": true + } + } + }, + "har-validator": { + "version": "2.0.6", + "bundled": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.13.1", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "bundled": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "bundled": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "ansi-regex": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "bundled": true + } + } + }, + "commander": { + "version": "2.9.0", + "bundled": true, + "requires": { + "graceful-readlink": "1.0.1" + }, + "dependencies": { + "graceful-readlink": { + "version": "1.0.1", + "bundled": true + } + } + }, + "is-my-json-valid": { + "version": "2.13.1", + "bundled": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "2.0.0", + "xtend": "4.0.1" + }, + "dependencies": { + "generate-function": { + "version": "2.0.0", + "bundled": true + }, + "generate-object-property": { + "version": "1.2.0", + "bundled": true, + "requires": { + "is-property": "1.0.2" + }, + "dependencies": { + "is-property": { + "version": "1.0.2", + "bundled": true + } + } + }, + "jsonpointer": { + "version": "2.0.0", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "requires": { + "pinkie": "2.0.4" + }, + "dependencies": { + "pinkie": { + "version": "2.0.4", + "bundled": true + } + } + } + } + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + }, + "dependencies": { + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.10.1" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.3.0", + "sshpk": "1.9.2" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "bundled": true + }, + "jsprim": { + "version": "1.3.0", + "bundled": true, + "requires": { + "extsprintf": "1.0.2", + "json-schema": "0.2.2", + "verror": "1.3.6" + }, + "dependencies": { + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "json-schema": { + "version": "0.2.2", + "bundled": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "requires": { + "extsprintf": "1.0.2" + } + } + } + }, + "sshpk": { + "version": "1.9.2", + "bundled": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "dashdash": "1.14.0", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.6", + "jodid25519": "1.0.2", + "jsbn": "0.1.0", + "tweetnacl": "0.13.3" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "bundled": true + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "dashdash": { + "version": "1.14.0", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.0" + } + }, + "getpass": { + "version": "0.1.6", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.0" + } + }, + "jsbn": { + "version": "0.1.0", + "bundled": true, + "optional": true + }, + "tweetnacl": { + "version": "0.13.3", + "bundled": true, + "optional": true + } + } + } + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "mime-types": { + "version": "2.1.11", + "bundled": true, + "requires": { + "mime-db": "1.23.0" + }, + "dependencies": { + "mime-db": { + "version": "1.23.0", + "bundled": true + } + } + }, + "node-uuid": { + "version": "1.4.7", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true + }, + "qs": { + "version": "6.2.1", + "bundled": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true + }, + "tough-cookie": { + "version": "2.3.1", + "bundled": true + }, + "tunnel-agent": { + "version": "0.4.3", + "bundled": true + } + } + }, + "retry": { + "version": "0.10.0", + "bundled": true + }, + "rimraf": { + "version": "2.5.4", + "bundled": true, + "requires": { + "glob": "7.0.6" + } + }, + "semver": { + "version": "5.1.0", + "bundled": true + }, + "sha": { + "version": "2.0.1", + "bundled": true, + "requires": { + "graceful-fs": "4.1.6", + "readable-stream": "2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.2", + "bundled": true, + "requires": { + "core-util-is": "1.0.1", + "inherits": "2.0.3", + "isarray": "0.0.1", + "process-nextick-args": "1.0.3", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.1" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.1", + "bundled": true + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.3", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "sorted-object": { + "version": "2.0.0", + "bundled": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.0.0" + } + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.10", + "inherits": "2.0.3" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "bundled": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.2" + }, + "dependencies": { + "spdx-correct": { + "version": "1.0.2", + "bundled": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.2", + "bundled": true, + "requires": { + "spdx-exceptions": "1.0.4", + "spdx-license-ids": "1.2.2" + }, + "dependencies": { + "spdx-exceptions": { + "version": "1.0.4", + "bundled": true + } + } + } + } + }, + "validate-npm-package-name": { + "version": "2.2.2", + "bundled": true, + "requires": { + "builtins": "0.0.7" + }, + "dependencies": { + "builtins": { + "version": "0.0.7", + "bundled": true + } + } + }, + "which": { + "version": "1.2.11", + "bundled": true, + "requires": { + "isexe": "1.1.2" + }, + "dependencies": { + "isexe": { + "version": "1.1.2", + "bundled": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "1.1.4", + "bundled": true, + "requires": { + "graceful-fs": "4.1.6", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nyc": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.6.0.tgz", + "integrity": "sha512-ZaXCh0wmbk2aSBH2B5hZGGvK2s9aM8DIm2rVY+BG3Fx8tUS+bpJSswUVZqOD1YfCmnYRFSqgYJSr7UeeUcW0jg==", + "dev": true, + "requires": { + "archy": "1.0.0", + "arrify": "1.0.1", + "caching-transform": "1.0.1", + "convert-source-map": "1.5.1", + "debug-log": "1.0.1", + "default-require-extensions": "1.0.0", + "find-cache-dir": "0.1.1", + "find-up": "2.1.0", + "foreground-child": "1.5.6", + "glob": "7.1.2", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-hook": "1.1.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.3", + "istanbul-lib-source-maps": "1.2.3", + "istanbul-reports": "1.3.0", + "md5-hex": "1.3.0", + "merge-source-map": "1.1.0", + "micromatch": "2.3.11", + "mkdirp": "0.5.1", + "resolve-from": "2.0.0", + "rimraf": "2.6.2", + "signal-exit": "3.0.2", + "spawn-wrap": "1.4.2", + "test-exclude": "4.2.1", + "yargs": "11.1.0", + "yargs-parser": "8.1.0" + }, + "dependencies": { + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "atob": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", + "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.3", + "lodash": "4.17.5" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "caching-transform": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", + "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", + "dev": true, + "requires": { + "md5-hex": "1.3.0", + "mkdirp": "0.5.1", + "write-file-atomic": "1.3.4" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "dev": true + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "which": "1.3.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreground-child": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", + "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "signal-exit": "3.0.2" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "invariant": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", + "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", + "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "dev": true, + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", + "dev": true, + "requires": { + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.0", + "semver": "5.5.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz", + "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", + "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", + "dev": true, + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", + "dev": true, + "requires": { + "handlebars": "4.0.11" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "md5-hex": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", + "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", + "dev": true, + "requires": { + "md5-o-matic": "0.1.1" + } + }, + "md5-o-matic": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", + "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.2.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + } + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "dev": true, + "requires": { + "atob": "2.0.3", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spawn-wrap": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", + "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", + "dev": true, + "requires": { + "foreground-child": "1.5.6", + "mkdirp": "0.5.1", + "os-homedir": "1.0.2", + "rimraf": "2.6.2", + "signal-exit": "3.0.2", + "which": "1.3.0" + } + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "test-exclude": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", + "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "3.1.9", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } + } + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "9.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=" + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-spinners": "0.1.2", + "object-assign": "4.1.1" + }, + "dependencies": { + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, + "p-lazy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-1.0.0.tgz", + "integrity": "sha1-7FPIAvLuOsKPFmzILQsrAt4nqDU=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.2.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.11" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "posix-getopt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/posix-getopt/-/posix-getopt-1.2.0.tgz", + "integrity": "sha1-Su7rfa3mb8qKk2XdqfawBXQctiE=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.11.1.tgz", + "integrity": "sha512-T/KD65Ot0PB97xTrG8afQ46x3oiVhnfGjGESSI9NWYcG92+OUPZKkwHqGWXH2t9jK1crnQjubECW0FuOth+hxw==", + "dev": true + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "requires": { + "asap": "2.0.6" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prop-types": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.6" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", + "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "dev": true, + "requires": { + "duplexify": "3.5.4", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" + } + }, + "react": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.3.1.tgz", + "integrity": "sha512-NbkxN9jsZ6+G+ICsLdC7/wUD26uNbvKU/RAxEWgc9kcdKvROt+5d5j2cNQm5PSFTQ4WNGsR3pa4qL2Q0/WSy1w==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.1" + } + }, + "react-dom": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.1.tgz", + "integrity": "sha512-2Infg89vzahq8nfVi1GkjPqq0vrBvf0f3T0+dTtyjq4f6HKOqKixAK25Vr593O3QTx4kw/vmUtAJwerlevNWOA==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.1" + } + }, + "read-chunk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", + "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", + "dev": true, + "requires": { + "pify": "3.0.0", + "safe-buffer": "5.1.1" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" + } + }, + "recast": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", + "integrity": "sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A==", + "dev": true, + "requires": { + "ast-types": "0.11.3", + "esprima": "4.0.0", + "private": "0.1.8", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.7.0" + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz", + "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "1.0.1" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "rxjs": { + "version": "5.5.8", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.8.tgz", + "integrity": "sha512-Bz7qou7VAIoGiglJZbzbXa4vpX5BmTTN2Dj/se6+SwADtw4SihqBIiEa7VmTXJ8pynvq0iFr5Gx9VLyye1rIxQ==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "6.4.0", + "ajv-keywords": "3.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + } + } + }, + "scoped-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", + "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "serialize-javascript": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", + "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "dev": true, + "requires": { + "atob": "2.1.0", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "static-route": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-route/-/static-route-0.1.2.tgz", + "integrity": "sha1-FpojTFnxFOvZAWNuULsgvEW2aSQ=", + "requires": { + "easyreq": "0.1.3", + "he": "0.4.1", + "mime": "1.2.11" + }, + "dependencies": { + "he": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/he/-/he-0.4.1.tgz", + "integrity": "sha1-yGZnYU0t1xvHN6GXx2D7LuyKGSE=" + }, + "mime": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=" + } + } + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "stream-to-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", + "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", + "dev": true, + "requires": { + "any-observable": "0.2.0" + } + }, + "strftime": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.6.2.tgz", + "integrity": "sha1-2kwSBzzr7jzWD0ghlAzCexnTSKE=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-bom-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", + "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", + "dev": true, + "requires": { + "first-chunk-stream": "2.0.0", + "strip-bom": "2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.3.2", + "lodash": "4.17.5", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "tapable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "dev": true + }, + "tcomb": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.25.tgz", + "integrity": "sha512-eywfhynigULV4SzNfvcXF7Ow77W0UBniQ1/9x8sNNo10al5s3PjRHShOb5OoVL8DQvLcatYRN3boviNcqb7Pkw==", + "dev": true + }, + "tcomb-validation": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", + "dev": true, + "requires": { + "tcomb": "3.2.25" + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "rimraf": "2.2.8" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "textextensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.2.0.tgz", + "integrity": "sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", + "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "ts-node": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-5.0.1.tgz", + "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "chalk": "2.3.2", + "diff": "3.5.0", + "make-error": "1.3.4", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.5.4", + "yn": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz", + "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==", + "dev": true, + "requires": { + "source-map": "0.6.1" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "tslib": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", + "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", + "dev": true + }, + "tslint": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", + "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "builtin-modules": "1.1.1", + "chalk": "2.3.2", + "commander": "2.15.1", + "diff": "3.5.0", + "glob": "7.1.2", + "js-yaml": "3.11.0", + "minimatch": "3.0.4", + "resolve": "1.7.0", + "semver": "5.5.0", + "tslib": "1.9.0", + "tsutils": "2.26.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "tsutils": { + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.26.1.tgz", + "integrity": "sha512-bnm9bcjOqOr1UljleL94wVCDlpa6KjfGaTkefeLch4GRafgDkROxPizbB/FxTEdI++5JqhxczRy/Qub0syNqZA==", + "dev": true, + "requires": { + "tslib": "1.9.0" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "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.1.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, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.1.tgz", + "integrity": "sha512-Ao/f6d/4EPLq0YwzsQz8iXflezpTkQzqAyenTiw4kCUGr1uPiFLC3+fZ+gMZz6eeI/qdRUqvC+HxIJzUAzEFdg==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", + "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz", + "integrity": "sha512-z0IbjpW8b3O/OVn+TTZN4pI29RN1zktFBXLIzzfZ+++cUtZ1ERSlLWgpE/5OERuEUs1ijVQnpYAkSlpoVmQmSQ==", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.5", + "serialize-javascript": "1.4.0", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.1.0", + "worker-farm": "1.6.0" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + } + } + } + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "union": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", + "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", + "requires": { + "qs": "2.3.3" + }, + "dependencies": { + "qs": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=" + } + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, + "universalify": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "untildify": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.2.tgz", + "integrity": "sha1-fx8wIFWz/qDz6B3HjrNnZstl4/E=", + "dev": true + }, + "upath": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", + "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", + "dev": true + }, + "uri-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", + "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "dev": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "2.0.0" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, + "urlgrey": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", + "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", + "dev": true + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, + "v8-compile-cache": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", + "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "validator": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", + "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==", + "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.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.4", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", + "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0", + "strip-bom-stream": "2.0.0", + "vinyl": "1.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "watchpack": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", + "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "dev": true, + "requires": { + "chokidar": "2.0.3", + "graceful-fs": "4.1.11", + "neo-async": "2.5.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "chokidar": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.1.3", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.0.4" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } + } + }, + "webpack": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.5.0.tgz", + "integrity": "sha512-6GrZsvQJnG7o7mjbfjp6s5CyMfdopjt1A/X8LcYwceis9ySjqBX6Lusso2wNZ06utHj2ZvfL6L3f7hfgVeJP6g==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "acorn-dynamic-import": "3.0.0", + "ajv": "6.4.0", + "ajv-keywords": "3.1.0", + "chrome-trace-event": "0.1.2", + "enhanced-resolve": "4.0.0", + "eslint-scope": "3.7.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.5.0", + "node-libs-browser": "2.1.0", + "schema-utils": "0.4.5", + "tapable": "1.0.0", + "uglifyjs-webpack-plugin": "1.2.4", + "watchpack": "1.5.0", + "webpack-sources": "1.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } + } + }, + "webpack-addons": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/webpack-addons/-/webpack-addons-1.1.5.tgz", + "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", + "dev": true, + "requires": { + "jscodeshift": "0.4.1" + }, + "dependencies": { + "ast-types": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", + "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", + "dev": true + }, + "jscodeshift": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", + "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", + "dev": true, + "requires": { + "async": "1.5.2", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-1": "6.24.1", + "babel-register": "6.26.0", + "babylon": "6.18.0", + "colors": "1.2.1", + "flow-parser": "0.69.0", + "lodash": "4.17.5", + "micromatch": "2.3.11", + "node-dir": "0.1.8", + "nomnom": "1.8.1", + "recast": "0.12.9", + "temp": "0.8.3", + "write-file-atomic": "1.3.4" + } + }, + "recast": { + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", + "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", + "dev": true, + "requires": { + "ast-types": "0.10.1", + "core-js": "2.5.5", + "esprima": "4.0.0", + "private": "0.1.8", + "source-map": "0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.14.tgz", + "integrity": "sha512-gRoWaxSi2JWiYsn1QgOTb6ENwIeSvN1YExZ+kJ0STsTZK7bWPElW+BBBv1UnTbvcPC3v7E17mK8hlFX8DOYSGw==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "cross-spawn": "6.0.5", + "diff": "3.5.0", + "enhanced-resolve": "4.0.0", + "envinfo": "4.4.2", + "glob-all": "3.1.0", + "global-modules": "1.0.0", + "got": "8.3.0", + "import-local": "1.0.0", + "inquirer": "5.2.0", + "interpret": "1.1.0", + "jscodeshift": "0.5.0", + "listr": "0.13.0", + "loader-utils": "1.1.0", + "lodash": "4.17.5", + "log-symbols": "2.2.0", + "mkdirp": "0.5.1", + "p-each-series": "1.0.0", + "p-lazy": "1.0.0", + "prettier": "1.11.1", + "supports-color": "5.3.0", + "v8-compile-cache": "1.1.2", + "webpack-addons": "1.1.5", + "yargs": "11.1.0", + "yeoman-environment": "2.0.6", + "yeoman-generator": "2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "cliui": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "1.0.4", + "path-key": "2.0.1", + "semver": "5.5.0", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.3.2", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.2.0", + "figures": "2.0.0", + "lodash": "4.17.5", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rxjs": "5.5.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "9.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, + "yeoman-environment": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", + "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "globby": "6.1.0", + "grouped-queue": "0.3.3", + "inquirer": "3.3.0", + "is-scoped": "1.0.0", + "lodash": "4.17.5", + "log-symbols": "2.2.0", + "mem-fs": "1.1.3", + "text-table": "0.2.0", + "untildify": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "yeoman-generator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.3.tgz", + "integrity": "sha512-mODmrZ26a94djmGZZuIiomSGlN4wULdou29ZwcySupb2e9FdvoCl7Ps2FqHFjEHio3kOl/iBeaNqrnx3C3NwWg==", + "dev": true, + "requires": { + "async": "2.6.0", + "chalk": "2.3.2", + "cli-table": "0.3.1", + "cross-spawn": "5.1.0", + "dargs": "5.1.0", + "dateformat": "3.0.3", + "debug": "3.1.0", + "detect-conflict": "1.0.1", + "error": "7.0.2", + "find-up": "2.1.0", + "github-username": "4.1.0", + "istextorbinary": "2.2.1", + "lodash": "4.17.5", + "make-dir": "1.2.0", + "mem-fs-editor": "3.0.2", + "minimist": "1.2.0", + "pretty-bytes": "4.0.2", + "read-chunk": "2.1.0", + "read-pkg-up": "3.0.0", + "rimraf": "2.6.2", + "run-async": "2.3.0", + "shelljs": "0.8.1", + "text-table": "0.2.0", + "through2": "2.0.3", + "yeoman-environment": "2.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "4.0.0", + "pify": "3.0.0", + "strip-bom": "3.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.2" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "4.0.0", + "normalize-package-data": "2.4.0", + "path-type": "3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + } + } +} diff --git a/package.json b/package.json index 1f3edd60..16575cb0 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,8 @@ "generate-report": "nyc --report-dir coverage npm run test && nyc report --reporter=text", "generate-report2": "nyc --report-dir coverage npm run test", "go": "npm run clean && npm run lint && npm run build && npm run test", - "webpack": "webpack --env build" + "webpack": "webpack --env build", + "serve" :"http-server" }, "nyc": { "include": [ @@ -77,5 +78,8 @@ "webpack": "^4.1.1", "webpack-cli": "^2.0.12", "yargs": "^11.0.0" + }, + "dependencies": { + "http-server": "^0.11.1" } } From 3daf9ea221b8f14bb55a971d702d830d1d78bfc9 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 19 Apr 2018 09:11:19 +0000 Subject: [PATCH 100/188] fix: pin nyc to 11.7.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 35d8ee07..d007a2a5 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "istanbul": "^v1.1.0-alpha.1", "mocha": "^5.0.4", "mochawesome": "^3.0.2", - "nyc": "^11.6.0", + "nyc": "11.7.0", "ts-node": "^5.0.1", "tslint": "^5.9.1", "typescript": "^2.7.2", From cd98518c5fc975bd69089a0dcc527be5f6d5f805 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 19 Apr 2018 17:15:52 +0000 Subject: [PATCH 101/188] chore(package): update @types/mocha to version 5.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 35d8ee07..9d0c8ea0 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ }, "devDependencies": { "@types/chai": "^4.1.2", - "@types/mocha": "^5.0.0", + "@types/mocha": "^5.2.0", "babel-cli": "^6.26.0", "babel-core": "^6.26.0", "babel-eslint": "^8.2.2", From 8e0c9982ea493e613faf676ce30763fcecf21ea6 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sat, 21 Apr 2018 07:18:19 +0000 Subject: [PATCH 102/188] fix: pin webpack-cli to 2.0.14 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 35d8ee07..c49a6968 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "tslint": "^5.9.1", "typescript": "^2.7.2", "webpack": "^4.1.1", - "webpack-cli": "^2.0.12", + "webpack-cli": "2.0.14", "yargs": "^11.0.0" } } From 4fb0158fdb96b82ed41e09ad80e930a5f4ea5fd9 Mon Sep 17 00:00:00 2001 From: Loiane Groner Date: Tue, 24 Apr 2018 15:43:19 -0400 Subject: [PATCH 103/188] Update index.html --- examples/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/index.html b/examples/index.html index 51d70f57..71c20da7 100644 --- a/examples/index.html +++ b/examples/index.html @@ -98,7 +98,7 @@ 03-Adding Removing Elements 04-Two Dimensional - MultiDimensional 05-ArrayMethods - 06-ES2015+ Methods + 06-ES2015+ Methods 07-Sorting 08-Searching 09-TypedArrays From 153a6bf70b78e4d1e0b5549b99f812086046e94e Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 24 Apr 2018 15:45:48 -0400 Subject: [PATCH 104/188] [Queues and Deques] --- src/js/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/index.js b/src/js/index.js index 50f655b4..096a418c 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -15,8 +15,8 @@ export { parenthesesChecker } from './others/balanced-symbols'; // chapter 04 export { default as Queue } from './data-structures/queue'; export { default as Deque } from './data-structures/deque'; -export { default as hotPotato } from './others/hot-potato'; -export { default as palindromeChecker } from './others/palindrome-checker'; +export { hotPotato } from './others/hot-potato'; +export { palindromeChecker } from './others/palindrome-checker'; // chapter 05 export { default as LinkedList } from './data-structures/linked-list'; From 0b6ac6fcb7b12d575bfcb979cdc0eefbcdcde061 Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 24 Apr 2018 15:57:28 -0400 Subject: [PATCH 105/188] redme --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ad8f6b21..726baaeb 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,8 @@ Work in Progress. * 10: [Heap](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter10) * 11: [Graphs](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter11) * 12: [Sorting and Searching Algorithms](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter12) -* 13: [String and Math Algorithms](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter13) -* 14: [Algorithm Design and Techniques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter14) -* 15: [Algorithm Complexity](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter15) +* 13: [Algorithm Design and Techniques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter14) +* 14: [Algorithm Complexity](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter15) ### Third Edition Updates From 0c0a8967fb6696e14478e8c2df9389091e61d82c Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 24 Apr 2018 20:29:21 -0400 Subject: [PATCH 106/188] Algorithm Complexity --- examples/chapter15/01-BigONotation.html | 10 ++++ examples/chapter15/01-BigONotation.js | 65 +++++++++++++++++++++++++ examples/chapter15/bigOChart/chart.js | 37 ++++++++++++++ 3 files changed, 112 insertions(+) create mode 100755 examples/chapter15/01-BigONotation.html create mode 100755 examples/chapter15/01-BigONotation.js create mode 100755 examples/chapter15/bigOChart/chart.js diff --git a/examples/chapter15/01-BigONotation.html b/examples/chapter15/01-BigONotation.html new file mode 100755 index 00000000..317a5bfb --- /dev/null +++ b/examples/chapter15/01-BigONotation.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/examples/chapter15/01-BigONotation.js b/examples/chapter15/01-BigONotation.js new file mode 100755 index 00000000..a48bd6ab --- /dev/null +++ b/examples/chapter15/01-BigONotation.js @@ -0,0 +1,65 @@ +//*************** o(1) +function increment(num){ + console.log('cost for increment with input ' + num + ' is 1'); + return ++num; +} + +increment(1); +increment(2); + +//*************** o(n) + +function createNonSortedArray(size){ + var array = []; + + for (var i = size; i> 0; i--){ + array[i] = i; + } + + return array; +} + +function sequentialSearch(array, item){ + var cost = 0; + for (var i=0; i array[j+1]){ + swap(array, j, j+1); + } + } + } + console.log('cost for bubbleSort with input size ' + length + ' is ' + cost); +} + +var array1 = createNonSortedArray(99); +var array2 = createNonSortedArray(999); +var array3 = createNonSortedArray(9999); +bubbleSort(array1); +bubbleSort(array2); +bubbleSort(array3); \ No newline at end of file diff --git a/examples/chapter15/bigOChart/chart.js b/examples/chapter15/bigOChart/chart.js new file mode 100755 index 00000000..765794df --- /dev/null +++ b/examples/chapter15/bigOChart/chart.js @@ -0,0 +1,37 @@ +google.load('visualization', '1.0', {'packages':['corechart']}); +google.setOnLoadCallback(drawChart); + +function drawChart() { + + var data = new google.visualization.DataTable(); + data.addColumn('string', 'n'); + data.addColumn('number', 'O(1)'); + data.addColumn('number', 'O(log n)'); + data.addColumn('number', 'O(n)'); + data.addColumn('number', 'O(n log n)'); + data.addColumn('number', 'O(n^2)'); + data.addColumn('number', 'O(2^n)'); + + for (var i = 0; i <= 30; i++) { + data.addRow([i+'', 1, Math.log(i), i, Math.log(i)*i, Math.pow(i,2), Math.pow(2,i)]); + } + + var options = {'title':'Big O Notation Complexity Chart', + 'width':700, + 'height':600, + 'backgroundColor':{stroke:'#CCC',strokeWidth:1}, + 'curveType':'function', + 'hAxis':{ + title:'Elements (n)', + showTextEvery:5 + }, + 'vAxis':{ + title:'Operations', + viewWindowMode:'explicit', + viewWindow:{min:0,max:450} + } + }; + + var chart = new google.visualization.LineChart(document.getElementById('chart_div')); + chart.draw(data, options); +} \ No newline at end of file From 9e19d76bf093b6d2453ae775966629f25360f1bb Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 24 Apr 2018 20:29:47 -0400 Subject: [PATCH 107/188] Algorithm Complexity --- examples/chapter15/bigOChart/index.html | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100755 examples/chapter15/bigOChart/index.html diff --git a/examples/chapter15/bigOChart/index.html b/examples/chapter15/bigOChart/index.html new file mode 100755 index 00000000..31118263 --- /dev/null +++ b/examples/chapter15/bigOChart/index.html @@ -0,0 +1,14 @@ + + + + + + + + + +
+ + \ No newline at end of file From 4c35e6bfe3d26e686229818d5e46014d7fa24ac7 Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 24 Apr 2018 20:29:57 -0400 Subject: [PATCH 108/188] organized chapters --- README.md | 29 ++-- .../01-HelloWorld.html | 0 .../01-HelloWorld.js | 0 .../02-Variables.html | 0 .../02-Variables.js | 0 .../03-Operators.html | 0 .../03-Operators.js | 0 .../04-TruthyFalsy.html | 0 .../04-TruthyFalsy.js | 0 .../05-EqualsOperators.html | 0 .../05-EqualsOperators.js | 0 .../06-ConditionalStatements.html | 0 .../06-ConditionalStatements.js | 0 .../{chapter01 => chapter01_02}/07-Loops.html | 0 .../{chapter01 => chapter01_02}/07-Loops.js | 0 .../08-Functions.html | 0 .../08-Functions.js | 0 .../09-ObjectOrientedJS.html | 0 .../09-ObjectOrientedJS.js | 0 .../10-ES2015-ES6-letconst.html | 0 .../10-ES2015-ES6-letconst.js | 0 .../11-ES2015-ES6-variableScope.html | 0 .../11-ES2015-ES6-variableScope.html.js | 0 .../12-ES2015-ES6-StringTemplates.html | 0 .../12-ES2015-ES6-StringTemplates.js | 0 .../13-ES2015-ES6-ArrowFunctions.html | 0 .../13-ES2015-ES6-ArrowFunctions.js | 0 .../14-ES2015-ES6-ParameterHandling.html | 0 .../14-ES2015-ES6-ParameterHandling.js | 0 ...5-ES2015-ES6-EnhancedObjectProperties.html | 0 .../15-ES2015-ES6-EnhancedObjectProperties.js | 0 .../16-ES2015-ES6-Classes.html | 0 .../16-ES2015-ES6-Classes.js | 0 .../{chapter01 => chapter01_02}/17-Book.js | 0 .../17-CalcArea.js | 0 .../17-ES2015-ES6-Modules-node.js | 0 .../17-ES2015-ES6-Modules.html | 0 .../17-ES2015-ES6-Modules.js | 0 .../17-ES2015-Modules-node/17-Book.mjs | 0 .../17-ES2015-Modules-node/17-CalcArea.mjs | 0 .../17-ES2015-ES6-Modules.mjs | 0 .../18-ES2016-ES7-ExponentiationOperator.html | 0 .../18-ES2016-ES7-ExponentiationOperator.js | 0 .../lib/17-Book.js | 0 .../lib/17-CalcArea.js | 0 .../lib/17-ES2015-ES6-Modules-bundle.js | 0 .../lib/17-ES2015-ES6-Modules.js | 0 .../typescript/hello-world.js | 0 .../typescript/hello-world.ts | 0 .../01-Introduction.html | 0 .../01-Introduction.js | 0 .../02-CreatingAndInitialingArrays.html | 0 .../02-CreatingAndInitialingArrays.js | 0 .../03-AddingRemovingElements.html | 0 .../03-AddingRemovingElements.js | 0 .../04-TwoDimensionalMultiDimensional.html | 0 .../04-TwoDimensionalMultiDimensional.js | 0 .../05-ArrayMethods.html | 0 .../05-ArrayMethods.js | 0 .../06-ES2015Methods.html | 0 .../06-ES2015Methods.js | 0 .../{chapter02 => chapter03}/07-Sorting.html | 0 .../{chapter02 => chapter03}/07-Sorting.js | 0 .../08-Searching.html | 0 .../{chapter02 => chapter03}/08-Searching.js | 0 .../09-TypedArrays.html | 0 .../09-TypedArrays.js | 0 .../10-ArraysAndTypeScript.ts | 0 .../{chapter03 => chapter04}/01-Stack.html | 0 examples/{chapter03 => chapter04}/01-Stack.js | 0 .../01-StackSymbol.js | 0 .../01-StackWeakMap.js | 0 .../02-BalancedSymbols.html | 0 .../02-BalancedSymbols.js | 0 .../03-DecimalToBinary.html | 0 .../03-DecimalToBinary.js | 0 .../04-TowerOfHanoi.html | 0 .../04-TowerOfHanoi.js | 0 .../{chapter04 => chapter05}/01-Queue.html | 0 examples/{chapter04 => chapter05}/01-Queue.js | 0 .../{chapter04 => chapter05}/02-Deque.html | 0 examples/{chapter04 => chapter05}/02-Deque.js | 0 .../03-HotPotato.html | 0 .../{chapter04 => chapter05}/03-HotPotato.js | 0 .../04-PalindromeChecker.html | 0 .../04-PalindromeChecker.js | 0 .../01-LinkedList.html | 0 .../{chapter05 => chapter06}/01-LinkedList.js | 0 .../02-DoublyLinkedList.html | 0 .../02-DoublyLinkedList.js | 0 .../03-CircularLinkedList.html | 0 .../03-CircularLinkedList.js | 0 .../04-SortedLinkedList.html | 0 .../04-SortedLinkedList.js | 0 .../05-StackLinkedList.html | 0 .../05-StackLinkedList.js | 0 examples/{chapter06 => chapter07}/01-Set.html | 0 examples/{chapter06 => chapter07}/01-Set.js | 0 .../02-SetOperations.html | 0 .../02-SetOperations.js | 0 .../03-ES2015Set.html | 0 .../{chapter06 => chapter07}/03-ES2015Set.js | 0 .../01-Dictionaries.html | 0 .../01-Dictionaries.js | 0 .../02-HashTable.html | 0 .../{chapter07 => chapter08}/02-HashTable.js | 0 .../03-HashCollisionSeparateChaining.html | 0 .../03-HashCollisionSeparateChaining.js | 0 .../04-HashCollisionLinearProbing.html | 0 .../04-HashCollisionLinearProbing.js | 0 .../05-ES2015Map.html | 0 .../{chapter07 => chapter08}/05-ES2015Map.js | 0 .../06-ES2015WeakMap.html | 0 .../06-ES2015WeakMap.js | 0 .../07-ES2015WeakSet.html | 0 .../07-ES2015WeakSet.js | 0 .../01-IntroRecursion.html | 0 .../01-IntroRecursion.js | 0 .../02-Factorial.html | 0 .../{chapter08 => chapter09}/02-Factorial.js | 0 .../03-JSCallStack.html | 0 .../03-JSCallStack.js | 0 .../04-Fibonacci.html | 0 .../{chapter08 => chapter09}/04-Fibonacci.js | 0 .../01-UsingMinHeap.html | 0 .../01-UsingMinHeap.js | 0 .../02-UsingMaxHeap.html | 0 .../02-UsingMaxHeap.js | 0 .../{chapter10 => chapter11}/03-HeapSort.html | 0 .../{chapter10 => chapter11}/03-HeapSort.js | 0 .../01-UsingGraphs.html | 0 .../01-UsingGraphs.js | 0 examples/{chapter11 => chapter12}/02-BFS.html | 0 examples/{chapter11 => chapter12}/02-BFS.js | 0 examples/{chapter11 => chapter12}/03-DFS.html | 0 examples/{chapter11 => chapter12}/03-DFS.js | 0 .../{chapter11 => chapter12}/04-Dijkstra.html | 0 .../{chapter11 => chapter12}/04-Dijkstra.js | 0 .../05-Floyd-Warshall.html | 0 .../05-Floyd-Warshall.js | 0 .../{chapter11 => chapter12}/06-Prim.html | 0 examples/{chapter11 => chapter12}/06-Prim.js | 0 .../{chapter11 => chapter12}/07-Kruskal.html | 0 .../{chapter11 => chapter12}/07-Kruskal.js | 0 .../01-BubbleSort.html | 0 .../{chapter12 => chapter13}/01-BubbleSort.js | 0 .../01-BucketSort.html | 0 .../{chapter12 => chapter13}/01-BucketSort.js | 0 .../01-CountingSort.html | 0 .../01-CountingSort.js | 0 .../01-InsertionSort.html | 0 .../01-InsertionSort.js | 0 .../01-MergeSort.html | 0 .../{chapter12 => chapter13}/01-MergeSort.js | 0 .../01-QuickSort.html | 0 .../{chapter12 => chapter13}/01-QuickSort.js | 0 .../01-RadixSort.html | 0 .../{chapter12 => chapter13}/01-RadixSort.js | 0 .../01-SelectionSort.html | 0 .../01-SelectionSort.js | 0 examples/index.html | 124 +++++++++--------- 161 files changed, 77 insertions(+), 76 deletions(-) rename examples/{chapter01 => chapter01_02}/01-HelloWorld.html (100%) rename examples/{chapter01 => chapter01_02}/01-HelloWorld.js (100%) rename examples/{chapter01 => chapter01_02}/02-Variables.html (100%) rename examples/{chapter01 => chapter01_02}/02-Variables.js (100%) rename examples/{chapter01 => chapter01_02}/03-Operators.html (100%) rename examples/{chapter01 => chapter01_02}/03-Operators.js (100%) rename examples/{chapter01 => chapter01_02}/04-TruthyFalsy.html (100%) rename examples/{chapter01 => chapter01_02}/04-TruthyFalsy.js (100%) rename examples/{chapter01 => chapter01_02}/05-EqualsOperators.html (100%) rename examples/{chapter01 => chapter01_02}/05-EqualsOperators.js (100%) rename examples/{chapter01 => chapter01_02}/06-ConditionalStatements.html (100%) rename examples/{chapter01 => chapter01_02}/06-ConditionalStatements.js (100%) rename examples/{chapter01 => chapter01_02}/07-Loops.html (100%) rename examples/{chapter01 => chapter01_02}/07-Loops.js (100%) rename examples/{chapter01 => chapter01_02}/08-Functions.html (100%) rename examples/{chapter01 => chapter01_02}/08-Functions.js (100%) rename examples/{chapter01 => chapter01_02}/09-ObjectOrientedJS.html (100%) rename examples/{chapter01 => chapter01_02}/09-ObjectOrientedJS.js (100%) rename examples/{chapter01 => chapter01_02}/10-ES2015-ES6-letconst.html (100%) rename examples/{chapter01 => chapter01_02}/10-ES2015-ES6-letconst.js (100%) rename examples/{chapter01 => chapter01_02}/11-ES2015-ES6-variableScope.html (100%) rename examples/{chapter01 => chapter01_02}/11-ES2015-ES6-variableScope.html.js (100%) rename examples/{chapter01 => chapter01_02}/12-ES2015-ES6-StringTemplates.html (100%) rename examples/{chapter01 => chapter01_02}/12-ES2015-ES6-StringTemplates.js (100%) rename examples/{chapter01 => chapter01_02}/13-ES2015-ES6-ArrowFunctions.html (100%) rename examples/{chapter01 => chapter01_02}/13-ES2015-ES6-ArrowFunctions.js (100%) rename examples/{chapter01 => chapter01_02}/14-ES2015-ES6-ParameterHandling.html (100%) rename examples/{chapter01 => chapter01_02}/14-ES2015-ES6-ParameterHandling.js (100%) rename examples/{chapter01 => chapter01_02}/15-ES2015-ES6-EnhancedObjectProperties.html (100%) rename examples/{chapter01 => chapter01_02}/15-ES2015-ES6-EnhancedObjectProperties.js (100%) rename examples/{chapter01 => chapter01_02}/16-ES2015-ES6-Classes.html (100%) rename examples/{chapter01 => chapter01_02}/16-ES2015-ES6-Classes.js (100%) rename examples/{chapter01 => chapter01_02}/17-Book.js (100%) rename examples/{chapter01 => chapter01_02}/17-CalcArea.js (100%) rename examples/{chapter01 => chapter01_02}/17-ES2015-ES6-Modules-node.js (100%) rename examples/{chapter01 => chapter01_02}/17-ES2015-ES6-Modules.html (100%) rename examples/{chapter01 => chapter01_02}/17-ES2015-ES6-Modules.js (100%) rename examples/{chapter01 => chapter01_02}/17-ES2015-Modules-node/17-Book.mjs (100%) rename examples/{chapter01 => chapter01_02}/17-ES2015-Modules-node/17-CalcArea.mjs (100%) rename examples/{chapter01 => chapter01_02}/17-ES2015-Modules-node/17-ES2015-ES6-Modules.mjs (100%) rename examples/{chapter01 => chapter01_02}/18-ES2016-ES7-ExponentiationOperator.html (100%) rename examples/{chapter01 => chapter01_02}/18-ES2016-ES7-ExponentiationOperator.js (100%) rename examples/{chapter01 => chapter01_02}/lib/17-Book.js (100%) rename examples/{chapter01 => chapter01_02}/lib/17-CalcArea.js (100%) rename examples/{chapter01 => chapter01_02}/lib/17-ES2015-ES6-Modules-bundle.js (100%) rename examples/{chapter01 => chapter01_02}/lib/17-ES2015-ES6-Modules.js (100%) rename examples/{chapter01 => chapter01_02}/typescript/hello-world.js (100%) rename examples/{chapter01 => chapter01_02}/typescript/hello-world.ts (100%) rename examples/{chapter02 => chapter03}/01-Introduction.html (100%) rename examples/{chapter02 => chapter03}/01-Introduction.js (100%) rename examples/{chapter02 => chapter03}/02-CreatingAndInitialingArrays.html (100%) rename examples/{chapter02 => chapter03}/02-CreatingAndInitialingArrays.js (100%) rename examples/{chapter02 => chapter03}/03-AddingRemovingElements.html (100%) rename examples/{chapter02 => chapter03}/03-AddingRemovingElements.js (100%) rename examples/{chapter02 => chapter03}/04-TwoDimensionalMultiDimensional.html (100%) rename examples/{chapter02 => chapter03}/04-TwoDimensionalMultiDimensional.js (100%) rename examples/{chapter02 => chapter03}/05-ArrayMethods.html (100%) rename examples/{chapter02 => chapter03}/05-ArrayMethods.js (100%) rename examples/{chapter02 => chapter03}/06-ES2015Methods.html (100%) rename examples/{chapter02 => chapter03}/06-ES2015Methods.js (100%) rename examples/{chapter02 => chapter03}/07-Sorting.html (100%) rename examples/{chapter02 => chapter03}/07-Sorting.js (100%) rename examples/{chapter02 => chapter03}/08-Searching.html (100%) rename examples/{chapter02 => chapter03}/08-Searching.js (100%) rename examples/{chapter02 => chapter03}/09-TypedArrays.html (100%) rename examples/{chapter02 => chapter03}/09-TypedArrays.js (100%) rename examples/{chapter02 => chapter03}/10-ArraysAndTypeScript.ts (100%) rename examples/{chapter03 => chapter04}/01-Stack.html (100%) rename examples/{chapter03 => chapter04}/01-Stack.js (100%) rename examples/{chapter03 => chapter04}/01-StackSymbol.js (100%) rename examples/{chapter03 => chapter04}/01-StackWeakMap.js (100%) rename examples/{chapter03 => chapter04}/02-BalancedSymbols.html (100%) rename examples/{chapter03 => chapter04}/02-BalancedSymbols.js (100%) rename examples/{chapter03 => chapter04}/03-DecimalToBinary.html (100%) rename examples/{chapter03 => chapter04}/03-DecimalToBinary.js (100%) rename examples/{chapter03 => chapter04}/04-TowerOfHanoi.html (100%) rename examples/{chapter03 => chapter04}/04-TowerOfHanoi.js (100%) rename examples/{chapter04 => chapter05}/01-Queue.html (100%) rename examples/{chapter04 => chapter05}/01-Queue.js (100%) rename examples/{chapter04 => chapter05}/02-Deque.html (100%) rename examples/{chapter04 => chapter05}/02-Deque.js (100%) rename examples/{chapter04 => chapter05}/03-HotPotato.html (100%) rename examples/{chapter04 => chapter05}/03-HotPotato.js (100%) rename examples/{chapter04 => chapter05}/04-PalindromeChecker.html (100%) rename examples/{chapter04 => chapter05}/04-PalindromeChecker.js (100%) rename examples/{chapter05 => chapter06}/01-LinkedList.html (100%) rename examples/{chapter05 => chapter06}/01-LinkedList.js (100%) rename examples/{chapter05 => chapter06}/02-DoublyLinkedList.html (100%) rename examples/{chapter05 => chapter06}/02-DoublyLinkedList.js (100%) rename examples/{chapter05 => chapter06}/03-CircularLinkedList.html (100%) rename examples/{chapter05 => chapter06}/03-CircularLinkedList.js (100%) rename examples/{chapter05 => chapter06}/04-SortedLinkedList.html (100%) rename examples/{chapter05 => chapter06}/04-SortedLinkedList.js (100%) rename examples/{chapter05 => chapter06}/05-StackLinkedList.html (100%) rename examples/{chapter05 => chapter06}/05-StackLinkedList.js (100%) rename examples/{chapter06 => chapter07}/01-Set.html (100%) rename examples/{chapter06 => chapter07}/01-Set.js (100%) rename examples/{chapter06 => chapter07}/02-SetOperations.html (100%) rename examples/{chapter06 => chapter07}/02-SetOperations.js (100%) rename examples/{chapter06 => chapter07}/03-ES2015Set.html (100%) rename examples/{chapter06 => chapter07}/03-ES2015Set.js (100%) rename examples/{chapter07 => chapter08}/01-Dictionaries.html (100%) rename examples/{chapter07 => chapter08}/01-Dictionaries.js (100%) rename examples/{chapter07 => chapter08}/02-HashTable.html (100%) rename examples/{chapter07 => chapter08}/02-HashTable.js (100%) rename examples/{chapter07 => chapter08}/03-HashCollisionSeparateChaining.html (100%) rename examples/{chapter07 => chapter08}/03-HashCollisionSeparateChaining.js (100%) rename examples/{chapter07 => chapter08}/04-HashCollisionLinearProbing.html (100%) rename examples/{chapter07 => chapter08}/04-HashCollisionLinearProbing.js (100%) rename examples/{chapter07 => chapter08}/05-ES2015Map.html (100%) rename examples/{chapter07 => chapter08}/05-ES2015Map.js (100%) rename examples/{chapter07 => chapter08}/06-ES2015WeakMap.html (100%) rename examples/{chapter07 => chapter08}/06-ES2015WeakMap.js (100%) rename examples/{chapter07 => chapter08}/07-ES2015WeakSet.html (100%) rename examples/{chapter07 => chapter08}/07-ES2015WeakSet.js (100%) rename examples/{chapter08 => chapter09}/01-IntroRecursion.html (100%) rename examples/{chapter08 => chapter09}/01-IntroRecursion.js (100%) rename examples/{chapter08 => chapter09}/02-Factorial.html (100%) rename examples/{chapter08 => chapter09}/02-Factorial.js (100%) rename examples/{chapter08 => chapter09}/03-JSCallStack.html (100%) rename examples/{chapter08 => chapter09}/03-JSCallStack.js (100%) rename examples/{chapter08 => chapter09}/04-Fibonacci.html (100%) rename examples/{chapter08 => chapter09}/04-Fibonacci.js (100%) rename examples/{chapter10 => chapter11}/01-UsingMinHeap.html (100%) rename examples/{chapter10 => chapter11}/01-UsingMinHeap.js (100%) rename examples/{chapter10 => chapter11}/02-UsingMaxHeap.html (100%) rename examples/{chapter10 => chapter11}/02-UsingMaxHeap.js (100%) rename examples/{chapter10 => chapter11}/03-HeapSort.html (100%) rename examples/{chapter10 => chapter11}/03-HeapSort.js (100%) rename examples/{chapter11 => chapter12}/01-UsingGraphs.html (100%) rename examples/{chapter11 => chapter12}/01-UsingGraphs.js (100%) rename examples/{chapter11 => chapter12}/02-BFS.html (100%) rename examples/{chapter11 => chapter12}/02-BFS.js (100%) rename examples/{chapter11 => chapter12}/03-DFS.html (100%) rename examples/{chapter11 => chapter12}/03-DFS.js (100%) rename examples/{chapter11 => chapter12}/04-Dijkstra.html (100%) rename examples/{chapter11 => chapter12}/04-Dijkstra.js (100%) rename examples/{chapter11 => chapter12}/05-Floyd-Warshall.html (100%) rename examples/{chapter11 => chapter12}/05-Floyd-Warshall.js (100%) rename examples/{chapter11 => chapter12}/06-Prim.html (100%) rename examples/{chapter11 => chapter12}/06-Prim.js (100%) rename examples/{chapter11 => chapter12}/07-Kruskal.html (100%) rename examples/{chapter11 => chapter12}/07-Kruskal.js (100%) rename examples/{chapter12 => chapter13}/01-BubbleSort.html (100%) rename examples/{chapter12 => chapter13}/01-BubbleSort.js (100%) rename examples/{chapter12 => chapter13}/01-BucketSort.html (100%) rename examples/{chapter12 => chapter13}/01-BucketSort.js (100%) rename examples/{chapter12 => chapter13}/01-CountingSort.html (100%) rename examples/{chapter12 => chapter13}/01-CountingSort.js (100%) rename examples/{chapter12 => chapter13}/01-InsertionSort.html (100%) rename examples/{chapter12 => chapter13}/01-InsertionSort.js (100%) rename examples/{chapter12 => chapter13}/01-MergeSort.html (100%) rename examples/{chapter12 => chapter13}/01-MergeSort.js (100%) rename examples/{chapter12 => chapter13}/01-QuickSort.html (100%) rename examples/{chapter12 => chapter13}/01-QuickSort.js (100%) rename examples/{chapter12 => chapter13}/01-RadixSort.html (100%) rename examples/{chapter12 => chapter13}/01-RadixSort.js (100%) rename examples/{chapter12 => chapter13}/01-SelectionSort.html (100%) rename examples/{chapter12 => chapter13}/01-SelectionSort.js (100%) diff --git a/README.md b/README.md index 726baaeb..b0a4a805 100644 --- a/README.md +++ b/README.md @@ -14,20 +14,21 @@ Work in Progress. ## List of available chapters: -* 01: [JavaScript, ECMAScript and TypeScript: a quick overview](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter01) -* 02: [Arrays](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter02) -* 03: [Stacks](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter03) -* 04: [Queues and Deques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter04) -* 05: [LinkedLists](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter05) -* 06: [Sets](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter06) -* 07: [Dictionaries and Hashes](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter07) -* 08: [Recursion](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter08) -* 09: [Trees](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter09) -* 10: [Heap](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter10) -* 11: [Graphs](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter11) -* 12: [Sorting and Searching Algorithms](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter12) -* 13: [Algorithm Design and Techniques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter14) -* 14: [Algorithm Complexity](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter15) +* 01: [JavaScript: a quick overview](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter01) +* 02: [ECMAScript and TypeScript Introduction](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter02) +* 03: [Arrays](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter03) +* 04: [Stacks](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter04) +* 05: [Queues and Deques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter05) +* 06: [LinkedLists](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter06) +* 07: [Sets](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter07) +* 08: [Dictionaries and Hashes](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter08) +* 09: [Recursion](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter09) +* 10: [Trees](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter10) +* 11: [Heap](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter11) +* 12: [Graphs](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter12) +* 13: [Sorting and Searching Algorithms](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter13) +* 14: [Algorithm Design and Techniques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter14) +* 15: [Algorithm Complexity](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter15) ### Third Edition Updates diff --git a/examples/chapter01/01-HelloWorld.html b/examples/chapter01_02/01-HelloWorld.html similarity index 100% rename from examples/chapter01/01-HelloWorld.html rename to examples/chapter01_02/01-HelloWorld.html diff --git a/examples/chapter01/01-HelloWorld.js b/examples/chapter01_02/01-HelloWorld.js similarity index 100% rename from examples/chapter01/01-HelloWorld.js rename to examples/chapter01_02/01-HelloWorld.js diff --git a/examples/chapter01/02-Variables.html b/examples/chapter01_02/02-Variables.html similarity index 100% rename from examples/chapter01/02-Variables.html rename to examples/chapter01_02/02-Variables.html diff --git a/examples/chapter01/02-Variables.js b/examples/chapter01_02/02-Variables.js similarity index 100% rename from examples/chapter01/02-Variables.js rename to examples/chapter01_02/02-Variables.js diff --git a/examples/chapter01/03-Operators.html b/examples/chapter01_02/03-Operators.html similarity index 100% rename from examples/chapter01/03-Operators.html rename to examples/chapter01_02/03-Operators.html diff --git a/examples/chapter01/03-Operators.js b/examples/chapter01_02/03-Operators.js similarity index 100% rename from examples/chapter01/03-Operators.js rename to examples/chapter01_02/03-Operators.js diff --git a/examples/chapter01/04-TruthyFalsy.html b/examples/chapter01_02/04-TruthyFalsy.html similarity index 100% rename from examples/chapter01/04-TruthyFalsy.html rename to examples/chapter01_02/04-TruthyFalsy.html diff --git a/examples/chapter01/04-TruthyFalsy.js b/examples/chapter01_02/04-TruthyFalsy.js similarity index 100% rename from examples/chapter01/04-TruthyFalsy.js rename to examples/chapter01_02/04-TruthyFalsy.js diff --git a/examples/chapter01/05-EqualsOperators.html b/examples/chapter01_02/05-EqualsOperators.html similarity index 100% rename from examples/chapter01/05-EqualsOperators.html rename to examples/chapter01_02/05-EqualsOperators.html diff --git a/examples/chapter01/05-EqualsOperators.js b/examples/chapter01_02/05-EqualsOperators.js similarity index 100% rename from examples/chapter01/05-EqualsOperators.js rename to examples/chapter01_02/05-EqualsOperators.js diff --git a/examples/chapter01/06-ConditionalStatements.html b/examples/chapter01_02/06-ConditionalStatements.html similarity index 100% rename from examples/chapter01/06-ConditionalStatements.html rename to examples/chapter01_02/06-ConditionalStatements.html diff --git a/examples/chapter01/06-ConditionalStatements.js b/examples/chapter01_02/06-ConditionalStatements.js similarity index 100% rename from examples/chapter01/06-ConditionalStatements.js rename to examples/chapter01_02/06-ConditionalStatements.js diff --git a/examples/chapter01/07-Loops.html b/examples/chapter01_02/07-Loops.html similarity index 100% rename from examples/chapter01/07-Loops.html rename to examples/chapter01_02/07-Loops.html diff --git a/examples/chapter01/07-Loops.js b/examples/chapter01_02/07-Loops.js similarity index 100% rename from examples/chapter01/07-Loops.js rename to examples/chapter01_02/07-Loops.js diff --git a/examples/chapter01/08-Functions.html b/examples/chapter01_02/08-Functions.html similarity index 100% rename from examples/chapter01/08-Functions.html rename to examples/chapter01_02/08-Functions.html diff --git a/examples/chapter01/08-Functions.js b/examples/chapter01_02/08-Functions.js similarity index 100% rename from examples/chapter01/08-Functions.js rename to examples/chapter01_02/08-Functions.js diff --git a/examples/chapter01/09-ObjectOrientedJS.html b/examples/chapter01_02/09-ObjectOrientedJS.html similarity index 100% rename from examples/chapter01/09-ObjectOrientedJS.html rename to examples/chapter01_02/09-ObjectOrientedJS.html diff --git a/examples/chapter01/09-ObjectOrientedJS.js b/examples/chapter01_02/09-ObjectOrientedJS.js similarity index 100% rename from examples/chapter01/09-ObjectOrientedJS.js rename to examples/chapter01_02/09-ObjectOrientedJS.js diff --git a/examples/chapter01/10-ES2015-ES6-letconst.html b/examples/chapter01_02/10-ES2015-ES6-letconst.html similarity index 100% rename from examples/chapter01/10-ES2015-ES6-letconst.html rename to examples/chapter01_02/10-ES2015-ES6-letconst.html diff --git a/examples/chapter01/10-ES2015-ES6-letconst.js b/examples/chapter01_02/10-ES2015-ES6-letconst.js similarity index 100% rename from examples/chapter01/10-ES2015-ES6-letconst.js rename to examples/chapter01_02/10-ES2015-ES6-letconst.js diff --git a/examples/chapter01/11-ES2015-ES6-variableScope.html b/examples/chapter01_02/11-ES2015-ES6-variableScope.html similarity index 100% rename from examples/chapter01/11-ES2015-ES6-variableScope.html rename to examples/chapter01_02/11-ES2015-ES6-variableScope.html diff --git a/examples/chapter01/11-ES2015-ES6-variableScope.html.js b/examples/chapter01_02/11-ES2015-ES6-variableScope.html.js similarity index 100% rename from examples/chapter01/11-ES2015-ES6-variableScope.html.js rename to examples/chapter01_02/11-ES2015-ES6-variableScope.html.js diff --git a/examples/chapter01/12-ES2015-ES6-StringTemplates.html b/examples/chapter01_02/12-ES2015-ES6-StringTemplates.html similarity index 100% rename from examples/chapter01/12-ES2015-ES6-StringTemplates.html rename to examples/chapter01_02/12-ES2015-ES6-StringTemplates.html diff --git a/examples/chapter01/12-ES2015-ES6-StringTemplates.js b/examples/chapter01_02/12-ES2015-ES6-StringTemplates.js similarity index 100% rename from examples/chapter01/12-ES2015-ES6-StringTemplates.js rename to examples/chapter01_02/12-ES2015-ES6-StringTemplates.js diff --git a/examples/chapter01/13-ES2015-ES6-ArrowFunctions.html b/examples/chapter01_02/13-ES2015-ES6-ArrowFunctions.html similarity index 100% rename from examples/chapter01/13-ES2015-ES6-ArrowFunctions.html rename to examples/chapter01_02/13-ES2015-ES6-ArrowFunctions.html diff --git a/examples/chapter01/13-ES2015-ES6-ArrowFunctions.js b/examples/chapter01_02/13-ES2015-ES6-ArrowFunctions.js similarity index 100% rename from examples/chapter01/13-ES2015-ES6-ArrowFunctions.js rename to examples/chapter01_02/13-ES2015-ES6-ArrowFunctions.js diff --git a/examples/chapter01/14-ES2015-ES6-ParameterHandling.html b/examples/chapter01_02/14-ES2015-ES6-ParameterHandling.html similarity index 100% rename from examples/chapter01/14-ES2015-ES6-ParameterHandling.html rename to examples/chapter01_02/14-ES2015-ES6-ParameterHandling.html diff --git a/examples/chapter01/14-ES2015-ES6-ParameterHandling.js b/examples/chapter01_02/14-ES2015-ES6-ParameterHandling.js similarity index 100% rename from examples/chapter01/14-ES2015-ES6-ParameterHandling.js rename to examples/chapter01_02/14-ES2015-ES6-ParameterHandling.js diff --git a/examples/chapter01/15-ES2015-ES6-EnhancedObjectProperties.html b/examples/chapter01_02/15-ES2015-ES6-EnhancedObjectProperties.html similarity index 100% rename from examples/chapter01/15-ES2015-ES6-EnhancedObjectProperties.html rename to examples/chapter01_02/15-ES2015-ES6-EnhancedObjectProperties.html diff --git a/examples/chapter01/15-ES2015-ES6-EnhancedObjectProperties.js b/examples/chapter01_02/15-ES2015-ES6-EnhancedObjectProperties.js similarity index 100% rename from examples/chapter01/15-ES2015-ES6-EnhancedObjectProperties.js rename to examples/chapter01_02/15-ES2015-ES6-EnhancedObjectProperties.js diff --git a/examples/chapter01/16-ES2015-ES6-Classes.html b/examples/chapter01_02/16-ES2015-ES6-Classes.html similarity index 100% rename from examples/chapter01/16-ES2015-ES6-Classes.html rename to examples/chapter01_02/16-ES2015-ES6-Classes.html diff --git a/examples/chapter01/16-ES2015-ES6-Classes.js b/examples/chapter01_02/16-ES2015-ES6-Classes.js similarity index 100% rename from examples/chapter01/16-ES2015-ES6-Classes.js rename to examples/chapter01_02/16-ES2015-ES6-Classes.js diff --git a/examples/chapter01/17-Book.js b/examples/chapter01_02/17-Book.js similarity index 100% rename from examples/chapter01/17-Book.js rename to examples/chapter01_02/17-Book.js diff --git a/examples/chapter01/17-CalcArea.js b/examples/chapter01_02/17-CalcArea.js similarity index 100% rename from examples/chapter01/17-CalcArea.js rename to examples/chapter01_02/17-CalcArea.js diff --git a/examples/chapter01/17-ES2015-ES6-Modules-node.js b/examples/chapter01_02/17-ES2015-ES6-Modules-node.js similarity index 100% rename from examples/chapter01/17-ES2015-ES6-Modules-node.js rename to examples/chapter01_02/17-ES2015-ES6-Modules-node.js diff --git a/examples/chapter01/17-ES2015-ES6-Modules.html b/examples/chapter01_02/17-ES2015-ES6-Modules.html similarity index 100% rename from examples/chapter01/17-ES2015-ES6-Modules.html rename to examples/chapter01_02/17-ES2015-ES6-Modules.html diff --git a/examples/chapter01/17-ES2015-ES6-Modules.js b/examples/chapter01_02/17-ES2015-ES6-Modules.js similarity index 100% rename from examples/chapter01/17-ES2015-ES6-Modules.js rename to examples/chapter01_02/17-ES2015-ES6-Modules.js diff --git a/examples/chapter01/17-ES2015-Modules-node/17-Book.mjs b/examples/chapter01_02/17-ES2015-Modules-node/17-Book.mjs similarity index 100% rename from examples/chapter01/17-ES2015-Modules-node/17-Book.mjs rename to examples/chapter01_02/17-ES2015-Modules-node/17-Book.mjs diff --git a/examples/chapter01/17-ES2015-Modules-node/17-CalcArea.mjs b/examples/chapter01_02/17-ES2015-Modules-node/17-CalcArea.mjs similarity index 100% rename from examples/chapter01/17-ES2015-Modules-node/17-CalcArea.mjs rename to examples/chapter01_02/17-ES2015-Modules-node/17-CalcArea.mjs diff --git a/examples/chapter01/17-ES2015-Modules-node/17-ES2015-ES6-Modules.mjs b/examples/chapter01_02/17-ES2015-Modules-node/17-ES2015-ES6-Modules.mjs similarity index 100% rename from examples/chapter01/17-ES2015-Modules-node/17-ES2015-ES6-Modules.mjs rename to examples/chapter01_02/17-ES2015-Modules-node/17-ES2015-ES6-Modules.mjs diff --git a/examples/chapter01/18-ES2016-ES7-ExponentiationOperator.html b/examples/chapter01_02/18-ES2016-ES7-ExponentiationOperator.html similarity index 100% rename from examples/chapter01/18-ES2016-ES7-ExponentiationOperator.html rename to examples/chapter01_02/18-ES2016-ES7-ExponentiationOperator.html diff --git a/examples/chapter01/18-ES2016-ES7-ExponentiationOperator.js b/examples/chapter01_02/18-ES2016-ES7-ExponentiationOperator.js similarity index 100% rename from examples/chapter01/18-ES2016-ES7-ExponentiationOperator.js rename to examples/chapter01_02/18-ES2016-ES7-ExponentiationOperator.js diff --git a/examples/chapter01/lib/17-Book.js b/examples/chapter01_02/lib/17-Book.js similarity index 100% rename from examples/chapter01/lib/17-Book.js rename to examples/chapter01_02/lib/17-Book.js diff --git a/examples/chapter01/lib/17-CalcArea.js b/examples/chapter01_02/lib/17-CalcArea.js similarity index 100% rename from examples/chapter01/lib/17-CalcArea.js rename to examples/chapter01_02/lib/17-CalcArea.js diff --git a/examples/chapter01/lib/17-ES2015-ES6-Modules-bundle.js b/examples/chapter01_02/lib/17-ES2015-ES6-Modules-bundle.js similarity index 100% rename from examples/chapter01/lib/17-ES2015-ES6-Modules-bundle.js rename to examples/chapter01_02/lib/17-ES2015-ES6-Modules-bundle.js diff --git a/examples/chapter01/lib/17-ES2015-ES6-Modules.js b/examples/chapter01_02/lib/17-ES2015-ES6-Modules.js similarity index 100% rename from examples/chapter01/lib/17-ES2015-ES6-Modules.js rename to examples/chapter01_02/lib/17-ES2015-ES6-Modules.js diff --git a/examples/chapter01/typescript/hello-world.js b/examples/chapter01_02/typescript/hello-world.js similarity index 100% rename from examples/chapter01/typescript/hello-world.js rename to examples/chapter01_02/typescript/hello-world.js diff --git a/examples/chapter01/typescript/hello-world.ts b/examples/chapter01_02/typescript/hello-world.ts similarity index 100% rename from examples/chapter01/typescript/hello-world.ts rename to examples/chapter01_02/typescript/hello-world.ts diff --git a/examples/chapter02/01-Introduction.html b/examples/chapter03/01-Introduction.html similarity index 100% rename from examples/chapter02/01-Introduction.html rename to examples/chapter03/01-Introduction.html diff --git a/examples/chapter02/01-Introduction.js b/examples/chapter03/01-Introduction.js similarity index 100% rename from examples/chapter02/01-Introduction.js rename to examples/chapter03/01-Introduction.js diff --git a/examples/chapter02/02-CreatingAndInitialingArrays.html b/examples/chapter03/02-CreatingAndInitialingArrays.html similarity index 100% rename from examples/chapter02/02-CreatingAndInitialingArrays.html rename to examples/chapter03/02-CreatingAndInitialingArrays.html diff --git a/examples/chapter02/02-CreatingAndInitialingArrays.js b/examples/chapter03/02-CreatingAndInitialingArrays.js similarity index 100% rename from examples/chapter02/02-CreatingAndInitialingArrays.js rename to examples/chapter03/02-CreatingAndInitialingArrays.js diff --git a/examples/chapter02/03-AddingRemovingElements.html b/examples/chapter03/03-AddingRemovingElements.html similarity index 100% rename from examples/chapter02/03-AddingRemovingElements.html rename to examples/chapter03/03-AddingRemovingElements.html diff --git a/examples/chapter02/03-AddingRemovingElements.js b/examples/chapter03/03-AddingRemovingElements.js similarity index 100% rename from examples/chapter02/03-AddingRemovingElements.js rename to examples/chapter03/03-AddingRemovingElements.js diff --git a/examples/chapter02/04-TwoDimensionalMultiDimensional.html b/examples/chapter03/04-TwoDimensionalMultiDimensional.html similarity index 100% rename from examples/chapter02/04-TwoDimensionalMultiDimensional.html rename to examples/chapter03/04-TwoDimensionalMultiDimensional.html diff --git a/examples/chapter02/04-TwoDimensionalMultiDimensional.js b/examples/chapter03/04-TwoDimensionalMultiDimensional.js similarity index 100% rename from examples/chapter02/04-TwoDimensionalMultiDimensional.js rename to examples/chapter03/04-TwoDimensionalMultiDimensional.js diff --git a/examples/chapter02/05-ArrayMethods.html b/examples/chapter03/05-ArrayMethods.html similarity index 100% rename from examples/chapter02/05-ArrayMethods.html rename to examples/chapter03/05-ArrayMethods.html diff --git a/examples/chapter02/05-ArrayMethods.js b/examples/chapter03/05-ArrayMethods.js similarity index 100% rename from examples/chapter02/05-ArrayMethods.js rename to examples/chapter03/05-ArrayMethods.js diff --git a/examples/chapter02/06-ES2015Methods.html b/examples/chapter03/06-ES2015Methods.html similarity index 100% rename from examples/chapter02/06-ES2015Methods.html rename to examples/chapter03/06-ES2015Methods.html diff --git a/examples/chapter02/06-ES2015Methods.js b/examples/chapter03/06-ES2015Methods.js similarity index 100% rename from examples/chapter02/06-ES2015Methods.js rename to examples/chapter03/06-ES2015Methods.js diff --git a/examples/chapter02/07-Sorting.html b/examples/chapter03/07-Sorting.html similarity index 100% rename from examples/chapter02/07-Sorting.html rename to examples/chapter03/07-Sorting.html diff --git a/examples/chapter02/07-Sorting.js b/examples/chapter03/07-Sorting.js similarity index 100% rename from examples/chapter02/07-Sorting.js rename to examples/chapter03/07-Sorting.js diff --git a/examples/chapter02/08-Searching.html b/examples/chapter03/08-Searching.html similarity index 100% rename from examples/chapter02/08-Searching.html rename to examples/chapter03/08-Searching.html diff --git a/examples/chapter02/08-Searching.js b/examples/chapter03/08-Searching.js similarity index 100% rename from examples/chapter02/08-Searching.js rename to examples/chapter03/08-Searching.js diff --git a/examples/chapter02/09-TypedArrays.html b/examples/chapter03/09-TypedArrays.html similarity index 100% rename from examples/chapter02/09-TypedArrays.html rename to examples/chapter03/09-TypedArrays.html diff --git a/examples/chapter02/09-TypedArrays.js b/examples/chapter03/09-TypedArrays.js similarity index 100% rename from examples/chapter02/09-TypedArrays.js rename to examples/chapter03/09-TypedArrays.js diff --git a/examples/chapter02/10-ArraysAndTypeScript.ts b/examples/chapter03/10-ArraysAndTypeScript.ts similarity index 100% rename from examples/chapter02/10-ArraysAndTypeScript.ts rename to examples/chapter03/10-ArraysAndTypeScript.ts diff --git a/examples/chapter03/01-Stack.html b/examples/chapter04/01-Stack.html similarity index 100% rename from examples/chapter03/01-Stack.html rename to examples/chapter04/01-Stack.html diff --git a/examples/chapter03/01-Stack.js b/examples/chapter04/01-Stack.js similarity index 100% rename from examples/chapter03/01-Stack.js rename to examples/chapter04/01-Stack.js diff --git a/examples/chapter03/01-StackSymbol.js b/examples/chapter04/01-StackSymbol.js similarity index 100% rename from examples/chapter03/01-StackSymbol.js rename to examples/chapter04/01-StackSymbol.js diff --git a/examples/chapter03/01-StackWeakMap.js b/examples/chapter04/01-StackWeakMap.js similarity index 100% rename from examples/chapter03/01-StackWeakMap.js rename to examples/chapter04/01-StackWeakMap.js diff --git a/examples/chapter03/02-BalancedSymbols.html b/examples/chapter04/02-BalancedSymbols.html similarity index 100% rename from examples/chapter03/02-BalancedSymbols.html rename to examples/chapter04/02-BalancedSymbols.html diff --git a/examples/chapter03/02-BalancedSymbols.js b/examples/chapter04/02-BalancedSymbols.js similarity index 100% rename from examples/chapter03/02-BalancedSymbols.js rename to examples/chapter04/02-BalancedSymbols.js diff --git a/examples/chapter03/03-DecimalToBinary.html b/examples/chapter04/03-DecimalToBinary.html similarity index 100% rename from examples/chapter03/03-DecimalToBinary.html rename to examples/chapter04/03-DecimalToBinary.html diff --git a/examples/chapter03/03-DecimalToBinary.js b/examples/chapter04/03-DecimalToBinary.js similarity index 100% rename from examples/chapter03/03-DecimalToBinary.js rename to examples/chapter04/03-DecimalToBinary.js diff --git a/examples/chapter03/04-TowerOfHanoi.html b/examples/chapter04/04-TowerOfHanoi.html similarity index 100% rename from examples/chapter03/04-TowerOfHanoi.html rename to examples/chapter04/04-TowerOfHanoi.html diff --git a/examples/chapter03/04-TowerOfHanoi.js b/examples/chapter04/04-TowerOfHanoi.js similarity index 100% rename from examples/chapter03/04-TowerOfHanoi.js rename to examples/chapter04/04-TowerOfHanoi.js diff --git a/examples/chapter04/01-Queue.html b/examples/chapter05/01-Queue.html similarity index 100% rename from examples/chapter04/01-Queue.html rename to examples/chapter05/01-Queue.html diff --git a/examples/chapter04/01-Queue.js b/examples/chapter05/01-Queue.js similarity index 100% rename from examples/chapter04/01-Queue.js rename to examples/chapter05/01-Queue.js diff --git a/examples/chapter04/02-Deque.html b/examples/chapter05/02-Deque.html similarity index 100% rename from examples/chapter04/02-Deque.html rename to examples/chapter05/02-Deque.html diff --git a/examples/chapter04/02-Deque.js b/examples/chapter05/02-Deque.js similarity index 100% rename from examples/chapter04/02-Deque.js rename to examples/chapter05/02-Deque.js diff --git a/examples/chapter04/03-HotPotato.html b/examples/chapter05/03-HotPotato.html similarity index 100% rename from examples/chapter04/03-HotPotato.html rename to examples/chapter05/03-HotPotato.html diff --git a/examples/chapter04/03-HotPotato.js b/examples/chapter05/03-HotPotato.js similarity index 100% rename from examples/chapter04/03-HotPotato.js rename to examples/chapter05/03-HotPotato.js diff --git a/examples/chapter04/04-PalindromeChecker.html b/examples/chapter05/04-PalindromeChecker.html similarity index 100% rename from examples/chapter04/04-PalindromeChecker.html rename to examples/chapter05/04-PalindromeChecker.html diff --git a/examples/chapter04/04-PalindromeChecker.js b/examples/chapter05/04-PalindromeChecker.js similarity index 100% rename from examples/chapter04/04-PalindromeChecker.js rename to examples/chapter05/04-PalindromeChecker.js diff --git a/examples/chapter05/01-LinkedList.html b/examples/chapter06/01-LinkedList.html similarity index 100% rename from examples/chapter05/01-LinkedList.html rename to examples/chapter06/01-LinkedList.html diff --git a/examples/chapter05/01-LinkedList.js b/examples/chapter06/01-LinkedList.js similarity index 100% rename from examples/chapter05/01-LinkedList.js rename to examples/chapter06/01-LinkedList.js diff --git a/examples/chapter05/02-DoublyLinkedList.html b/examples/chapter06/02-DoublyLinkedList.html similarity index 100% rename from examples/chapter05/02-DoublyLinkedList.html rename to examples/chapter06/02-DoublyLinkedList.html diff --git a/examples/chapter05/02-DoublyLinkedList.js b/examples/chapter06/02-DoublyLinkedList.js similarity index 100% rename from examples/chapter05/02-DoublyLinkedList.js rename to examples/chapter06/02-DoublyLinkedList.js diff --git a/examples/chapter05/03-CircularLinkedList.html b/examples/chapter06/03-CircularLinkedList.html similarity index 100% rename from examples/chapter05/03-CircularLinkedList.html rename to examples/chapter06/03-CircularLinkedList.html diff --git a/examples/chapter05/03-CircularLinkedList.js b/examples/chapter06/03-CircularLinkedList.js similarity index 100% rename from examples/chapter05/03-CircularLinkedList.js rename to examples/chapter06/03-CircularLinkedList.js diff --git a/examples/chapter05/04-SortedLinkedList.html b/examples/chapter06/04-SortedLinkedList.html similarity index 100% rename from examples/chapter05/04-SortedLinkedList.html rename to examples/chapter06/04-SortedLinkedList.html diff --git a/examples/chapter05/04-SortedLinkedList.js b/examples/chapter06/04-SortedLinkedList.js similarity index 100% rename from examples/chapter05/04-SortedLinkedList.js rename to examples/chapter06/04-SortedLinkedList.js diff --git a/examples/chapter05/05-StackLinkedList.html b/examples/chapter06/05-StackLinkedList.html similarity index 100% rename from examples/chapter05/05-StackLinkedList.html rename to examples/chapter06/05-StackLinkedList.html diff --git a/examples/chapter05/05-StackLinkedList.js b/examples/chapter06/05-StackLinkedList.js similarity index 100% rename from examples/chapter05/05-StackLinkedList.js rename to examples/chapter06/05-StackLinkedList.js diff --git a/examples/chapter06/01-Set.html b/examples/chapter07/01-Set.html similarity index 100% rename from examples/chapter06/01-Set.html rename to examples/chapter07/01-Set.html diff --git a/examples/chapter06/01-Set.js b/examples/chapter07/01-Set.js similarity index 100% rename from examples/chapter06/01-Set.js rename to examples/chapter07/01-Set.js diff --git a/examples/chapter06/02-SetOperations.html b/examples/chapter07/02-SetOperations.html similarity index 100% rename from examples/chapter06/02-SetOperations.html rename to examples/chapter07/02-SetOperations.html diff --git a/examples/chapter06/02-SetOperations.js b/examples/chapter07/02-SetOperations.js similarity index 100% rename from examples/chapter06/02-SetOperations.js rename to examples/chapter07/02-SetOperations.js diff --git a/examples/chapter06/03-ES2015Set.html b/examples/chapter07/03-ES2015Set.html similarity index 100% rename from examples/chapter06/03-ES2015Set.html rename to examples/chapter07/03-ES2015Set.html diff --git a/examples/chapter06/03-ES2015Set.js b/examples/chapter07/03-ES2015Set.js similarity index 100% rename from examples/chapter06/03-ES2015Set.js rename to examples/chapter07/03-ES2015Set.js diff --git a/examples/chapter07/01-Dictionaries.html b/examples/chapter08/01-Dictionaries.html similarity index 100% rename from examples/chapter07/01-Dictionaries.html rename to examples/chapter08/01-Dictionaries.html diff --git a/examples/chapter07/01-Dictionaries.js b/examples/chapter08/01-Dictionaries.js similarity index 100% rename from examples/chapter07/01-Dictionaries.js rename to examples/chapter08/01-Dictionaries.js diff --git a/examples/chapter07/02-HashTable.html b/examples/chapter08/02-HashTable.html similarity index 100% rename from examples/chapter07/02-HashTable.html rename to examples/chapter08/02-HashTable.html diff --git a/examples/chapter07/02-HashTable.js b/examples/chapter08/02-HashTable.js similarity index 100% rename from examples/chapter07/02-HashTable.js rename to examples/chapter08/02-HashTable.js diff --git a/examples/chapter07/03-HashCollisionSeparateChaining.html b/examples/chapter08/03-HashCollisionSeparateChaining.html similarity index 100% rename from examples/chapter07/03-HashCollisionSeparateChaining.html rename to examples/chapter08/03-HashCollisionSeparateChaining.html diff --git a/examples/chapter07/03-HashCollisionSeparateChaining.js b/examples/chapter08/03-HashCollisionSeparateChaining.js similarity index 100% rename from examples/chapter07/03-HashCollisionSeparateChaining.js rename to examples/chapter08/03-HashCollisionSeparateChaining.js diff --git a/examples/chapter07/04-HashCollisionLinearProbing.html b/examples/chapter08/04-HashCollisionLinearProbing.html similarity index 100% rename from examples/chapter07/04-HashCollisionLinearProbing.html rename to examples/chapter08/04-HashCollisionLinearProbing.html diff --git a/examples/chapter07/04-HashCollisionLinearProbing.js b/examples/chapter08/04-HashCollisionLinearProbing.js similarity index 100% rename from examples/chapter07/04-HashCollisionLinearProbing.js rename to examples/chapter08/04-HashCollisionLinearProbing.js diff --git a/examples/chapter07/05-ES2015Map.html b/examples/chapter08/05-ES2015Map.html similarity index 100% rename from examples/chapter07/05-ES2015Map.html rename to examples/chapter08/05-ES2015Map.html diff --git a/examples/chapter07/05-ES2015Map.js b/examples/chapter08/05-ES2015Map.js similarity index 100% rename from examples/chapter07/05-ES2015Map.js rename to examples/chapter08/05-ES2015Map.js diff --git a/examples/chapter07/06-ES2015WeakMap.html b/examples/chapter08/06-ES2015WeakMap.html similarity index 100% rename from examples/chapter07/06-ES2015WeakMap.html rename to examples/chapter08/06-ES2015WeakMap.html diff --git a/examples/chapter07/06-ES2015WeakMap.js b/examples/chapter08/06-ES2015WeakMap.js similarity index 100% rename from examples/chapter07/06-ES2015WeakMap.js rename to examples/chapter08/06-ES2015WeakMap.js diff --git a/examples/chapter07/07-ES2015WeakSet.html b/examples/chapter08/07-ES2015WeakSet.html similarity index 100% rename from examples/chapter07/07-ES2015WeakSet.html rename to examples/chapter08/07-ES2015WeakSet.html diff --git a/examples/chapter07/07-ES2015WeakSet.js b/examples/chapter08/07-ES2015WeakSet.js similarity index 100% rename from examples/chapter07/07-ES2015WeakSet.js rename to examples/chapter08/07-ES2015WeakSet.js diff --git a/examples/chapter08/01-IntroRecursion.html b/examples/chapter09/01-IntroRecursion.html similarity index 100% rename from examples/chapter08/01-IntroRecursion.html rename to examples/chapter09/01-IntroRecursion.html diff --git a/examples/chapter08/01-IntroRecursion.js b/examples/chapter09/01-IntroRecursion.js similarity index 100% rename from examples/chapter08/01-IntroRecursion.js rename to examples/chapter09/01-IntroRecursion.js diff --git a/examples/chapter08/02-Factorial.html b/examples/chapter09/02-Factorial.html similarity index 100% rename from examples/chapter08/02-Factorial.html rename to examples/chapter09/02-Factorial.html diff --git a/examples/chapter08/02-Factorial.js b/examples/chapter09/02-Factorial.js similarity index 100% rename from examples/chapter08/02-Factorial.js rename to examples/chapter09/02-Factorial.js diff --git a/examples/chapter08/03-JSCallStack.html b/examples/chapter09/03-JSCallStack.html similarity index 100% rename from examples/chapter08/03-JSCallStack.html rename to examples/chapter09/03-JSCallStack.html diff --git a/examples/chapter08/03-JSCallStack.js b/examples/chapter09/03-JSCallStack.js similarity index 100% rename from examples/chapter08/03-JSCallStack.js rename to examples/chapter09/03-JSCallStack.js diff --git a/examples/chapter08/04-Fibonacci.html b/examples/chapter09/04-Fibonacci.html similarity index 100% rename from examples/chapter08/04-Fibonacci.html rename to examples/chapter09/04-Fibonacci.html diff --git a/examples/chapter08/04-Fibonacci.js b/examples/chapter09/04-Fibonacci.js similarity index 100% rename from examples/chapter08/04-Fibonacci.js rename to examples/chapter09/04-Fibonacci.js diff --git a/examples/chapter10/01-UsingMinHeap.html b/examples/chapter11/01-UsingMinHeap.html similarity index 100% rename from examples/chapter10/01-UsingMinHeap.html rename to examples/chapter11/01-UsingMinHeap.html diff --git a/examples/chapter10/01-UsingMinHeap.js b/examples/chapter11/01-UsingMinHeap.js similarity index 100% rename from examples/chapter10/01-UsingMinHeap.js rename to examples/chapter11/01-UsingMinHeap.js diff --git a/examples/chapter10/02-UsingMaxHeap.html b/examples/chapter11/02-UsingMaxHeap.html similarity index 100% rename from examples/chapter10/02-UsingMaxHeap.html rename to examples/chapter11/02-UsingMaxHeap.html diff --git a/examples/chapter10/02-UsingMaxHeap.js b/examples/chapter11/02-UsingMaxHeap.js similarity index 100% rename from examples/chapter10/02-UsingMaxHeap.js rename to examples/chapter11/02-UsingMaxHeap.js diff --git a/examples/chapter10/03-HeapSort.html b/examples/chapter11/03-HeapSort.html similarity index 100% rename from examples/chapter10/03-HeapSort.html rename to examples/chapter11/03-HeapSort.html diff --git a/examples/chapter10/03-HeapSort.js b/examples/chapter11/03-HeapSort.js similarity index 100% rename from examples/chapter10/03-HeapSort.js rename to examples/chapter11/03-HeapSort.js diff --git a/examples/chapter11/01-UsingGraphs.html b/examples/chapter12/01-UsingGraphs.html similarity index 100% rename from examples/chapter11/01-UsingGraphs.html rename to examples/chapter12/01-UsingGraphs.html diff --git a/examples/chapter11/01-UsingGraphs.js b/examples/chapter12/01-UsingGraphs.js similarity index 100% rename from examples/chapter11/01-UsingGraphs.js rename to examples/chapter12/01-UsingGraphs.js diff --git a/examples/chapter11/02-BFS.html b/examples/chapter12/02-BFS.html similarity index 100% rename from examples/chapter11/02-BFS.html rename to examples/chapter12/02-BFS.html diff --git a/examples/chapter11/02-BFS.js b/examples/chapter12/02-BFS.js similarity index 100% rename from examples/chapter11/02-BFS.js rename to examples/chapter12/02-BFS.js diff --git a/examples/chapter11/03-DFS.html b/examples/chapter12/03-DFS.html similarity index 100% rename from examples/chapter11/03-DFS.html rename to examples/chapter12/03-DFS.html diff --git a/examples/chapter11/03-DFS.js b/examples/chapter12/03-DFS.js similarity index 100% rename from examples/chapter11/03-DFS.js rename to examples/chapter12/03-DFS.js diff --git a/examples/chapter11/04-Dijkstra.html b/examples/chapter12/04-Dijkstra.html similarity index 100% rename from examples/chapter11/04-Dijkstra.html rename to examples/chapter12/04-Dijkstra.html diff --git a/examples/chapter11/04-Dijkstra.js b/examples/chapter12/04-Dijkstra.js similarity index 100% rename from examples/chapter11/04-Dijkstra.js rename to examples/chapter12/04-Dijkstra.js diff --git a/examples/chapter11/05-Floyd-Warshall.html b/examples/chapter12/05-Floyd-Warshall.html similarity index 100% rename from examples/chapter11/05-Floyd-Warshall.html rename to examples/chapter12/05-Floyd-Warshall.html diff --git a/examples/chapter11/05-Floyd-Warshall.js b/examples/chapter12/05-Floyd-Warshall.js similarity index 100% rename from examples/chapter11/05-Floyd-Warshall.js rename to examples/chapter12/05-Floyd-Warshall.js diff --git a/examples/chapter11/06-Prim.html b/examples/chapter12/06-Prim.html similarity index 100% rename from examples/chapter11/06-Prim.html rename to examples/chapter12/06-Prim.html diff --git a/examples/chapter11/06-Prim.js b/examples/chapter12/06-Prim.js similarity index 100% rename from examples/chapter11/06-Prim.js rename to examples/chapter12/06-Prim.js diff --git a/examples/chapter11/07-Kruskal.html b/examples/chapter12/07-Kruskal.html similarity index 100% rename from examples/chapter11/07-Kruskal.html rename to examples/chapter12/07-Kruskal.html diff --git a/examples/chapter11/07-Kruskal.js b/examples/chapter12/07-Kruskal.js similarity index 100% rename from examples/chapter11/07-Kruskal.js rename to examples/chapter12/07-Kruskal.js diff --git a/examples/chapter12/01-BubbleSort.html b/examples/chapter13/01-BubbleSort.html similarity index 100% rename from examples/chapter12/01-BubbleSort.html rename to examples/chapter13/01-BubbleSort.html diff --git a/examples/chapter12/01-BubbleSort.js b/examples/chapter13/01-BubbleSort.js similarity index 100% rename from examples/chapter12/01-BubbleSort.js rename to examples/chapter13/01-BubbleSort.js diff --git a/examples/chapter12/01-BucketSort.html b/examples/chapter13/01-BucketSort.html similarity index 100% rename from examples/chapter12/01-BucketSort.html rename to examples/chapter13/01-BucketSort.html diff --git a/examples/chapter12/01-BucketSort.js b/examples/chapter13/01-BucketSort.js similarity index 100% rename from examples/chapter12/01-BucketSort.js rename to examples/chapter13/01-BucketSort.js diff --git a/examples/chapter12/01-CountingSort.html b/examples/chapter13/01-CountingSort.html similarity index 100% rename from examples/chapter12/01-CountingSort.html rename to examples/chapter13/01-CountingSort.html diff --git a/examples/chapter12/01-CountingSort.js b/examples/chapter13/01-CountingSort.js similarity index 100% rename from examples/chapter12/01-CountingSort.js rename to examples/chapter13/01-CountingSort.js diff --git a/examples/chapter12/01-InsertionSort.html b/examples/chapter13/01-InsertionSort.html similarity index 100% rename from examples/chapter12/01-InsertionSort.html rename to examples/chapter13/01-InsertionSort.html diff --git a/examples/chapter12/01-InsertionSort.js b/examples/chapter13/01-InsertionSort.js similarity index 100% rename from examples/chapter12/01-InsertionSort.js rename to examples/chapter13/01-InsertionSort.js diff --git a/examples/chapter12/01-MergeSort.html b/examples/chapter13/01-MergeSort.html similarity index 100% rename from examples/chapter12/01-MergeSort.html rename to examples/chapter13/01-MergeSort.html diff --git a/examples/chapter12/01-MergeSort.js b/examples/chapter13/01-MergeSort.js similarity index 100% rename from examples/chapter12/01-MergeSort.js rename to examples/chapter13/01-MergeSort.js diff --git a/examples/chapter12/01-QuickSort.html b/examples/chapter13/01-QuickSort.html similarity index 100% rename from examples/chapter12/01-QuickSort.html rename to examples/chapter13/01-QuickSort.html diff --git a/examples/chapter12/01-QuickSort.js b/examples/chapter13/01-QuickSort.js similarity index 100% rename from examples/chapter12/01-QuickSort.js rename to examples/chapter13/01-QuickSort.js diff --git a/examples/chapter12/01-RadixSort.html b/examples/chapter13/01-RadixSort.html similarity index 100% rename from examples/chapter12/01-RadixSort.html rename to examples/chapter13/01-RadixSort.html diff --git a/examples/chapter12/01-RadixSort.js b/examples/chapter13/01-RadixSort.js similarity index 100% rename from examples/chapter12/01-RadixSort.js rename to examples/chapter13/01-RadixSort.js diff --git a/examples/chapter12/01-SelectionSort.html b/examples/chapter13/01-SelectionSort.html similarity index 100% rename from examples/chapter12/01-SelectionSort.html rename to examples/chapter13/01-SelectionSort.html diff --git a/examples/chapter12/01-SelectionSort.js b/examples/chapter13/01-SelectionSort.js similarity index 100% rename from examples/chapter12/01-SelectionSort.js rename to examples/chapter13/01-SelectionSort.js diff --git a/examples/index.html b/examples/index.html index 51d70f57..b412d3ec 100644 --- a/examples/index.html +++ b/examples/index.html @@ -66,24 +66,24 @@ @@ -93,15 +93,15 @@ @@ -112,10 +112,10 @@ @@ -126,10 +126,10 @@ @@ -140,11 +140,11 @@ @@ -155,9 +155,9 @@ @@ -168,13 +168,13 @@ @@ -185,10 +185,10 @@ @@ -199,9 +199,9 @@ @@ -212,11 +212,11 @@ From 5c2634f6baa3f6251ec22c9cd873852f259254e7 Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 24 Apr 2018 20:46:48 -0400 Subject: [PATCH 109/188] organized chapters --- examples/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/index.html b/examples/index.html index 9b8424d8..0ed3a4fb 100644 --- a/examples/index.html +++ b/examples/index.html @@ -66,7 +66,7 @@
+
+
+
+ +
+
+
From 5ecf15a42a9e47b98136d36657a1f2b6a50dbe66 Mon Sep 17 00:00:00 2001 From: loiane Date: Wed, 25 Apr 2018 09:07:04 -0400 Subject: [PATCH 118/188] updated readme --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index b0a4a805..aa17055a 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,6 @@ Learning JavaScript Data Structures and Algorithms Source code of **Learning JavaScript Data Structures and Algorithms** book, third edition. -Work in Progress. - ## List of available chapters: * 01: [JavaScript: a quick overview](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter01) From 6a2a8e1e587dfecf260ef2b9e432c52936914a59 Mon Sep 17 00:00:00 2001 From: loiane Date: Wed, 25 Apr 2018 09:28:54 -0400 Subject: [PATCH 119/188] [Sorting and Searching Algorithms] --- examples/index.html | 47 ++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/examples/index.html b/examples/index.html index cf002f2d..f0fb0263 100644 --- a/examples/index.html +++ b/examples/index.html @@ -38,8 +38,7 @@
- 01 - 02 + 01_02 03 04 05 @@ -88,7 +87,7 @@
-
+
@@ -107,7 +106,7 @@
-
+
@@ -121,7 +120,7 @@
-
+
@@ -135,7 +134,7 @@
-
+
@@ -150,7 +149,7 @@
-
+
@@ -163,7 +162,7 @@
-
+
@@ -180,7 +179,7 @@
-
+
@@ -195,6 +194,16 @@
+
+
+
+ +
+
+
+
+
@@ -207,7 +216,7 @@
-
+
@@ -222,21 +231,19 @@
-
-
-
-
- -
-
-
-
From 3ad109910c6439ca15ed563a6b9dcbe807c9ac4b Mon Sep 17 00:00:00 2001 From: loiane Date: Wed, 25 Apr 2018 10:05:04 -0400 Subject: [PATCH 120/188] chore(package): update nyc to version 11.7.1 --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index effb80dd..858292cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7003,9 +7003,9 @@ "dev": true }, "nyc": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.7.0.tgz", - "integrity": "sha512-uby+bP7cpYik/xN66rQshaGVadTd8KWm5aDUHvhLcZ6ZvxYUljcxcEOGxzIHhcnqNuTdpzPHtc3quKF/As+WAg==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.7.1.tgz", + "integrity": "sha512-EGePURSKUEpS1jWnEKAMhY+GWZzi7JC+f8iBDOATaOsLZW5hM/9eYx2dHGaEXa1ITvMm44CJugMksvP3NwMQMw==", "dev": true, "requires": { "archy": "1.0.0", @@ -7023,7 +7023,7 @@ "istanbul-lib-instrument": "1.10.1", "istanbul-lib-report": "1.1.3", "istanbul-lib-source-maps": "1.2.3", - "istanbul-reports": "1.3.0", + "istanbul-reports": "1.4.0", "md5-hex": "1.3.0", "merge-source-map": "1.1.0", "micromatch": "2.3.11", @@ -8122,7 +8122,7 @@ } }, "istanbul-reports": { - "version": "1.3.0", + "version": "1.4.0", "bundled": true, "dev": true, "requires": { diff --git a/package.json b/package.json index 1585e95d..55f51ad5 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "istanbul": "^v1.1.0-alpha.1", "mocha": "^5.0.4", "mochawesome": "^3.0.2", - "nyc": "11.7.0", + "nyc": "11.7.1", "ts-node": "^5.0.1", "tslint": "^5.9.1", "typescript": "^2.7.2", From 1da992a692458de4025ecf39e597cfbe4706731d Mon Sep 17 00:00:00 2001 From: loiane Date: Wed, 25 Apr 2018 10:06:34 -0400 Subject: [PATCH 121/188] chore(package): update webpack-cli to version 2.0.15 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 858292cb..e9e6248b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12932,9 +12932,9 @@ } }, "webpack-cli": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.14.tgz", - "integrity": "sha512-gRoWaxSi2JWiYsn1QgOTb6ENwIeSvN1YExZ+kJ0STsTZK7bWPElW+BBBv1UnTbvcPC3v7E17mK8hlFX8DOYSGw==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.15.tgz", + "integrity": "sha512-bjNeIUO51D4OsmZ5ufzcpzVoacjxfWNfeBZKYL3jc+EMfCME3TyfdCPSUoKiOnebQChfupQuIRpAnx7L4l3Hew==", "dev": true, "requires": { "chalk": "2.4.0", diff --git a/package.json b/package.json index 55f51ad5..5ce012f7 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "tslint": "^5.9.1", "typescript": "^2.7.2", "webpack": "^4.1.1", - "webpack-cli": "2.0.14", + "webpack-cli": "2.0.15", "yargs": "^11.0.0" }, "dependencies": { From 7d95a8b6c70ebd9cc374f7f26c6af8c7d3ba0133 Mon Sep 17 00:00:00 2001 From: loiane Date: Wed, 25 Apr 2018 11:01:27 -0400 Subject: [PATCH 122/188] chore --- package-lock.json | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index e9e6248b..761f8495 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11594,12 +11594,12 @@ "dev": true, "requires": { "arrify": "1.0.1", - "chalk": "2.3.2", + "chalk": "2.4.0", "diff": "3.5.0", "make-error": "1.3.4", "minimist": "1.2.0", "mkdirp": "0.5.1", - "source-map-support": "0.5.4", + "source-map-support": "0.5.5", "yn": "2.0.0" }, "dependencies": { @@ -11613,14 +11613,14 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "minimist": { @@ -11636,18 +11636,19 @@ "dev": true }, "source-map-support": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz", - "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", + "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", "dev": true, "requires": { + "buffer-from": "1.0.0", "source-map": "0.6.1" } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { "has-flag": "3.0.0" From 33fccd415e0487692263b5c1889d5ff463645963 Mon Sep 17 00:00:00 2001 From: loiane Date: Wed, 25 Apr 2018 11:01:35 -0400 Subject: [PATCH 123/188] added tests --- test/js/algorithms/search/binary-search-recursive.spec.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 test/js/algorithms/search/binary-search-recursive.spec.js diff --git a/test/js/algorithms/search/binary-search-recursive.spec.js b/test/js/algorithms/search/binary-search-recursive.spec.js new file mode 100644 index 00000000..a93081e2 --- /dev/null +++ b/test/js/algorithms/search/binary-search-recursive.spec.js @@ -0,0 +1,5 @@ +import { binarySearchRecursive } from '../../../../src/js/index'; +import { testSearchAlgorithm } from './search-algorithms-tests'; + +testSearchAlgorithm(binarySearchRecursive, 'Binary Search Recursive'); + From 901388c8dcdfd07775e78f06f31baa5e218ef8f9 Mon Sep 17 00:00:00 2001 From: loiane Date: Wed, 25 Apr 2018 12:27:07 -0400 Subject: [PATCH 124/188] added tests --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- .../PacktDataStructuresAlgorithms.min.js.map | 2 +- src/js/data-structures/binary-search-tree.js | 6 +- src/js/data-structures/models/node.js | 4 +- test/js/data-structures/avl-tree.spec.js | 32 ++++++ .../binary-search-tree.spec.js | 108 ++++++++++++++++++ test/js/data-structures/heap.spec.js | 75 ++++++++++++ test/ts/data-structures/heap.spec.ts | 6 +- 8 files changed, 224 insertions(+), 11 deletions(-) create mode 100644 test/js/data-structures/avl-tree.spec.js create mode 100644 test/js/data-structures/binary-search-tree.spec.js create mode 100644 test/js/data-structures/heap.spec.js diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index a21569a8..f3775d20 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=64)}([function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lesserEquals=function(e,n,r){var i=r(e,n);return i===t.LESS_THAN||i===t.EQUALS},e.biggerEquals=function(e,n,r){var i=r(e,n);return i===t.BIGGER_THAN||i===t.EQUALS},e.defaultCompare=function(e,n){return e===n?t.EQUALS:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.findMaxValue=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=null}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null==e)return null;if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=null;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t=0&&n>=0&&t2&&void 0!==arguments[2]?arguments[2]:t.length,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n.length;if(0===r||0===i)return 0;if(t[r-1]===n[i-1])return 1+e(t,n,r-1,i-1);var o=e(t,n,r,i-1),u=e(t,n,r-1,i);return o>u?o:u}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lcs=function(e,t){for(var n=e.length,r=t.length,i=[],o=[],u=0;u<=n;u++){i[u]=[],o[u]=[];for(var a=0;a<=r;a++)i[u][a]=0,o[u][a]="0"}for(var l=0;l<=n;l++)for(var f=0;f<=r;f++)if(0===l||0===f)i[l][f]=0;else if(e[l-1]===t[f-1])i[l][f]=i[l-1][f-1]+1,o[l][f]="diagonal";else{var s=i[l-1][f],c=i[l][f-1];i[l][f]=s>c?s:c,o[l][f]=i[l][f]===i[l-1][f]?"top":"left"}return function(e,t,n,r){for(var i=n,o=r,u=e[i][o],a="";"0"!==u;)"diagonal"===e[i][o]?(a=t[i-1]+a,i--,o--):"left"===e[i][o]?o--:"top"===e[i][o]&&i--,u=e[i][o]}(o,e,n,r),i[n][r]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lcs=function(e,t){for(var n=e.length,r=t.length,i=[],o=0;o<=n;o++){i[o]=[];for(var u=0;u<=r;u++)i[o][u]=0}for(var a=0;a<=n;a++)for(var l=0;l<=r;l++)if(0===a||0===l)i[a][l]=0;else if(e[a-1]===t[l-1])i[a][l]=i[a-1][l-1]+1;else{var f=i[a-1][l],s=i[a][l-1];i[a][l]=f>s?f:s}return i[n][r]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.knapSack=function(e,t,n){for(var r=n.length,i=0,o=0,u=0;ut)return e(t,n,r,i-1);var o=r[i-1]+e(t-n[i-1],n,r,i-1),u=e(t,n,r,i-1);return o>u?o:u}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.knapSack=function(e,t,n,r){for(var i=[],o=0;o<=r;o++)i[o]=[];for(var u=0;u<=r;u++)for(var a=0;a<=e;a++)if(0===u||0===a)i[u][a]=0;else if(t[u-1]<=a){var l=n[u-1]+i[u-1][a-t[u-1]],f=i[u-1][a];i[u][a]=l>f?l:f}else i[u][a]=i[u-1][a];return function(e,t,n){for(var r=e,i=t;r>0&&i>0;)n[r][i]!==n[r-1][i]?i-=n[--r][i]:r--}(r,e,i),i[r][e]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){for(var n=[],r=0,i=e.length;i>=0;i--)for(var o=e[i];r+o<=t;)n.push(o),r+=o;return n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){var n=[];return function t(r){if(!r)return[];if(n[r])return n[r];for(var i=[],o=void 0,u=void 0,a=0;a=0&&(o=t(u)),u>=0&&(o.length2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e).length-1;return function e(n,r,i,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultCompare;if(i<=o){var a=Math.floor((i+o)/2),l=n[a];return u(l,r)===t.Compare.LESS_THAN?e(n,r,a+1,o,u):u(l,r)===t.Compare.BIGGER_THAN?e(n,r,i,a-1,u):a}return t.DOES_NOT_EXIST}(e,r,0,o,i)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(4)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(10),n(9)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:t[n]=e(n-1)+e(n-2)}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(49)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1;)if(i=t.removeFront(),o=t.removeBack(),i!==o)return!1;return!0};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(7)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return n&&t.isEmpty()};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.findMaxValue=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=void 0}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null!=e){if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=void 0;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t=0&&n>=0&&t2&&void 0!==arguments[2]?arguments[2]:t.length,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n.length;if(0===r||0===i)return 0;if(t[r-1]===n[i-1])return 1+e(t,n,r-1,i-1);var o=e(t,n,r,i-1),u=e(t,n,r-1,i);return o>u?o:u}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lcs=function(e,t){for(var n=e.length,r=t.length,i=[],o=[],u=0;u<=n;u++){i[u]=[],o[u]=[];for(var a=0;a<=r;a++)i[u][a]=0,o[u][a]="0"}for(var l=0;l<=n;l++)for(var f=0;f<=r;f++)if(0===l||0===f)i[l][f]=0;else if(e[l-1]===t[f-1])i[l][f]=i[l-1][f-1]+1,o[l][f]="diagonal";else{var s=i[l-1][f],c=i[l][f-1];i[l][f]=s>c?s:c,o[l][f]=i[l][f]===i[l-1][f]?"top":"left"}return function(e,t,n,r){for(var i=n,o=r,u=e[i][o],a="";"0"!==u;)"diagonal"===e[i][o]?(a=t[i-1]+a,i--,o--):"left"===e[i][o]?o--:"top"===e[i][o]&&i--,u=e[i][o]}(o,e,n,r),i[n][r]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lcs=function(e,t){for(var n=e.length,r=t.length,i=[],o=0;o<=n;o++){i[o]=[];for(var u=0;u<=r;u++)i[o][u]=0}for(var a=0;a<=n;a++)for(var l=0;l<=r;l++)if(0===a||0===l)i[a][l]=0;else if(e[a-1]===t[l-1])i[a][l]=i[a-1][l-1]+1;else{var f=i[a-1][l],s=i[a][l-1];i[a][l]=f>s?f:s}return i[n][r]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.knapSack=function(e,t,n){for(var r=n.length,i=0,o=0,u=0;ut)return e(t,n,r,i-1);var o=r[i-1]+e(t-n[i-1],n,r,i-1),u=e(t,n,r,i-1);return o>u?o:u}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.knapSack=function(e,t,n,r){for(var i=[],o=0;o<=r;o++)i[o]=[];for(var u=0;u<=r;u++)for(var a=0;a<=e;a++)if(0===u||0===a)i[u][a]=0;else if(t[u-1]<=a){var l=n[u-1]+i[u-1][a-t[u-1]],f=i[u-1][a];i[u][a]=l>f?l:f}else i[u][a]=i[u-1][a];return function(e,t,n){for(var r=e,i=t;r>0&&i>0;)n[r][i]!==n[r-1][i]?i-=n[--r][i]:r--}(r,e,i),i[r][e]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){for(var n=[],r=0,i=e.length;i>=0;i--)for(var o=e[i];r+o<=t;)n.push(o),r+=o;return n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){var n=[];return function t(r){if(!r)return[];if(n[r])return n[r];for(var i=[],o=void 0,u=void 0,a=0;a=0&&(o=t(u)),u>=0&&(o.length2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e).length-1;return function e(n,r,i,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultCompare;if(i<=o){var a=Math.floor((i+o)/2),l=n[a];return u(l,r)===t.Compare.LESS_THAN?e(n,r,a+1,o,u):u(l,r)===t.Compare.BIGGER_THAN?e(n,r,i,a-1,u):a}return t.DOES_NOT_EXIST}(e,r,0,o,i)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(4)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(10),n(9)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:t[n]=e(n-1)+e(n-2)}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(49)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1;)if(i=t.removeFront(),o=t.removeBack(),i!==o)return!1;return!0};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(7)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return n&&t.isEmpty()};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n }\n if (i <= j) {\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","const UNASSIGNED = 0;\n\nfunction usedInRow(matrix, row, num) {\n for (let col = 0; col < matrix.length; col++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInCol(matrix, col, num) {\n for (let row = 0; row < matrix.length; row++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInBox(matrix, boxStartRow, boxStartCol, num) {\n for (let row = 0; row < 3; row++) {\n for (let col = 0; col < 3; col++) {\n if (matrix[row + boxStartRow][col + boxStartCol] === num) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isSafe(matrix, row, col, num) {\n return (\n !usedInRow(matrix, row, num) &&\n !usedInCol(matrix, col, num) &&\n !usedInBox(matrix, row - (row % 3), col - (col % 3), num)\n );\n}\nfunction solveSudoku(matrix) {\n let row = 0;\n let col = 0;\n let checkBlankSpaces = false;\n\n for (row = 0; row < matrix.length; row++) {\n for (col = 0; col < matrix[row].length; col++) {\n if (matrix[row][col] === UNASSIGNED) {\n checkBlankSpaces = true;\n break;\n }\n }\n if (checkBlankSpaces === true) {\n break;\n }\n }\n if (checkBlankSpaces === false) {\n return true;\n }\n\n for (let num = 1; num <= 9; num++) {\n if (isSafe(matrix, row, col, num)) {\n matrix[row][col] = num;\n if (solveSudoku(matrix)) {\n return true;\n }\n matrix[row][col] = UNASSIGNED;\n }\n }\n return false;\n}\n\nexport function sudokuSolver(matrix) {\n if (solveSudoku(matrix) === true) {\n return matrix;\n }\n return 'NO SOLUTION EXISTS!';\n}\n","function isSafe(maze, x, y) {\n const n = maze.length;\n if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {\n return true;\n }\n return false;\n}\n\nfunction findPath(maze, x, y, solution) {\n const n = maze.length;\n if (x === n - 1 && y === n - 1) {\n solution[x][y] = 1;\n return true;\n }\n if (isSafe(maze, x, y) === true) {\n solution[x][y] = 1;\n if (findPath(maze, x + 1, y, solution)) {\n return true;\n }\n if (findPath(maze, x, y + 1, solution)) {\n return true;\n }\n solution[x][y] = 0;\n return false;\n }\n return false;\n}\n\nexport function ratInAMaze(maze) {\n const solution = [];\n for (let i = 0; i < maze.length; i++) {\n solution[i] = [];\n for (let j = 0; j < maze[i].length; j++) {\n solution[i][j] = 0;\n }\n }\n if (findPath(maze, 0, 0, solution) === true) {\n return solution;\n }\n return 'NO PATH FOUND';\n}\n","export function lcs(wordX, wordY, m = wordX.length, n = wordY.length) {\n if (m === 0 || n === 0) {\n return 0;\n }\n if (wordX[m - 1] === wordY[n - 1]) {\n return 1 + lcs(wordX, wordY, m - 1, n - 1);\n }\n const a = lcs(wordX, wordY, m, n - 1);\n const b = lcs(wordX, wordY, m - 1, n);\n return a > b ? a : b;\n}\n","function printSolution(solution, wordX, m, n) {\n let a = m;\n let b = n;\n let x = solution[a][b];\n let answer = '';\n while (x !== '0') {\n if (solution[a][b] === 'diagonal') {\n answer = wordX[a - 1] + answer;\n a--;\n b--;\n } else if (solution[a][b] === 'left') {\n b--;\n } else if (solution[a][b] === 'top') {\n a--;\n }\n x = solution[a][b];\n }\n // console.log('lcs: ' + answer);\n}\nexport function lcs(wordX, wordY) {\n const m = wordX.length;\n const n = wordY.length;\n const l = [];\n const solution = [];\n for (let i = 0; i <= m; i++) {\n l[i] = [];\n solution[i] = [];\n for (let j = 0; j <= n; j++) {\n l[i][j] = 0;\n solution[i][j] = '0';\n }\n }\n for (let i = 0; i <= m; i++) {\n for (let j = 0; j <= n; j++) {\n if (i === 0 || j === 0) {\n l[i][j] = 0;\n } else if (wordX[i - 1] === wordY[j - 1]) {\n l[i][j] = l[i - 1][j - 1] + 1;\n solution[i][j] = 'diagonal';\n } else {\n const a = l[i - 1][j];\n const b = l[i][j - 1];\n l[i][j] = a > b ? a : b; // max(a,b)\n solution[i][j] = l[i][j] === l[i - 1][j] ? 'top' : 'left';\n }\n }\n // console.log(l[i].join());\n // console.log(solution[i].join());\n }\n printSolution(solution, wordX, m, n);\n return l[m][n];\n}\n","export function lcs(wordX, wordY) {\n const m = wordX.length;\n const n = wordY.length;\n const l = [];\n for (let i = 0; i <= m; i++) {\n l[i] = [];\n for (let j = 0; j <= n; j++) {\n l[i][j] = 0;\n }\n }\n for (let i = 0; i <= m; i++) {\n for (let j = 0; j <= n; j++) {\n if (i === 0 || j === 0) {\n l[i][j] = 0;\n } else if (wordX[i - 1] === wordY[j - 1]) {\n l[i][j] = l[i - 1][j - 1] + 1;\n } else {\n const a = l[i - 1][j];\n const b = l[i][j - 1];\n l[i][j] = a > b ? a : b; // max(a,b)\n }\n }\n // console.log(l[i].join());\n }\n return l[m][n];\n}\n","export function knapSack(capacity, weights, values) {\n const n = values.length;\n let load = 0;\n let val = 0;\n for (let i = 0; i < n && load < capacity; i++) {\n if (weights[i] <= capacity - load) {\n val += values[i];\n load += weights[i];\n // console.log('using item ' + (i + 1) + ' for the solution');\n } else {\n const r = (capacity - load) / weights[i];\n val += r * values[i];\n load += weights[i];\n // console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution');\n }\n }\n return val;\n}\n","export function knapSack(capacity, weights, values, n) {\n if (n === 0 || capacity === 0) {\n return 0;\n }\n if (weights[n - 1] > capacity) {\n return knapSack(capacity, weights, values, n - 1);\n }\n const a = values[n - 1] + knapSack(capacity - weights[n - 1], weights, values, n - 1);\n const b = knapSack(capacity, weights, values, n - 1);\n return a > b ? a : b;\n}\n","function findValues(n, capacity, kS) {\n let i = n;\n let k = capacity;\n // console.log('Items that are part of the solution:');\n while (i > 0 && k > 0) {\n if (kS[i][k] !== kS[i - 1][k]) {\n // console.log(\n // item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1]\n // );\n i--;\n k -= kS[i][k];\n } else {\n i--;\n }\n }\n}\n\nexport function knapSack(capacity, weights, values, n) {\n const kS = [];\n for (let i = 0; i <= n; i++) {\n kS[i] = [];\n }\n for (let i = 0; i <= n; i++) {\n for (let w = 0; w <= capacity; w++) {\n if (i === 0 || w === 0) {\n kS[i][w] = 0;\n } else if (weights[i - 1] <= w) {\n const a = values[i - 1] + kS[i - 1][w - weights[i - 1]];\n const b = kS[i - 1][w];\n kS[i][w] = a > b ? a : b; // max(a,b)\n // console.log(a + ' can be part of the solution');\n } else {\n kS[i][w] = kS[i - 1][w];\n }\n }\n // console.log(kS[i].join());\n }\n // extra algorithm to find the items that are part of the solution\n findValues(n, capacity, kS);\n return kS[n][capacity];\n}\n","export function minCoinChange(coins, amount) {\n const change = [];\n let total = 0;\n for (let i = coins.length; i >= 0; i--) {\n const coin = coins[i];\n while (total + coin <= amount) {\n change.push(coin);\n total += coin;\n }\n }\n return change;\n}\n","export function minCoinChange(coins, amount) {\n const cache = [];\n\n const makeChange = (value) => {\n if (!value) {\n return [];\n }\n if (cache[value]) {\n return cache[value];\n }\n let min = [];\n let newMin;\n let newAmount;\n for (let i = 0; i < coins.length; i++) {\n const coin = coins[i];\n newAmount = value - coin;\n if (newAmount >= 0) {\n newMin = makeChange(newAmount);\n }\n if (\n newAmount >= 0 &&\n (newMin.length < min.length - 1 || !min.length) &&\n (newMin.length || !newAmount)\n ) {\n min = [coin].concat(newMin);\n // console.log('new Min ' + min + ' for ' + amount);\n }\n }\n return (cache[value] = min);\n };\n return makeChange(amount);\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nfunction binarySearchRecursive(array, value, low, high, compareFn = defaultCompare) {\n if (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = array[mid];\n if (compareFn(element, value) === Compare.LESS_THAN) {\n return binarySearchRecursive(array, value, mid + 1, high, compareFn);\n }\n if (compareFn(element, value) === Compare.BIGGER_THAN) {\n return binarySearchRecursive(array, value, low, mid - 1, compareFn);\n }\n return mid;\n }\n return DOES_NOT_EXIST;\n}\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n const low = 0;\n const high = sortedArray.length - 1;\n return binarySearchRecursive(array, value, low, high, compareFn);\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n return false;\n }\n }\n\n return true;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols[index];\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n return balanced && stack.isEmpty();\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { hotPotato } from './others/hot-potato';\nexport { palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n\n// chapter 14\nexport { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive';\nexport { minCoinChange } from './algorithms/dynamic-programing/min-coin-change';\nexport { minCoinChange as minCoinChangeGreedy } from './algorithms/greedy/min-coin-change';\nexport { knapSack } from './algorithms/dynamic-programing/knapsack';\nexport { knapSack as knapSackRecursive } from './algorithms/dynamic-programing/knapsack-recursive';\nexport { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack';\nexport { lcs } from './algorithms/dynamic-programing/longest-common-subsequence';\nexport { lcs as lcsPrint } from './algorithms/dynamic-programing/longest-common-subsequence-print';\nexport { lcs as lcsRecursive } from './algorithms/greedy/longest-common-subsequence';\nexport { ratInAMaze } from './algorithms/backtracking/rat-in-maze';\nexport { sudokuSolver } from './algorithms/backtracking/sudoku-solver';\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://PacktDataStructuresAlgorithms/webpack/universalModuleDefinition","webpack://PacktDataStructuresAlgorithms/webpack/bootstrap","webpack://PacktDataStructuresAlgorithms/./src/js/util.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/quicksort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/min-max-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/linked-list-models.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/queue.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/insertion-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/node.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/binary-search-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/dictionary.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/doubly-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/deque.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/dijkstra.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/sudoku-solver.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/rat-in-maze.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/longest-common-subsequence.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/longest-common-subsequence-print.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/longest-common-subsequence.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/knapsack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/knapsack-recursive.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/knapsack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search-recursive.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/sequential-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/interpolation-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/shell-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/selection-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/radix-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/merge-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/counting-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bucket-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort-improved.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/shuffle/fisher–yates.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/kruskal.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/prim.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/floyd-warshall.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/depth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/breadth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/graph.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/heap-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/heap.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/avl-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/fibonacci.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/factorial.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-separate-chaining.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/set.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/sorted-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/circular-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/palindrome-checker.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hot-potato.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/balanced-symbols.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/base-converter.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hanoi.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-array.js","webpack://PacktDataStructuresAlgorithms/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","lesserEquals","a","b","compareFn","comp","Compare","LESS_THAN","EQUALS","biggerEquals","BIGGER_THAN","defaultCompare","defaultEquals","defaultToString","item","undefined","String","toString","swap","array","_ref","reverseCompare","defaultDiff","Number","DOES_NOT_EXIST","ValuePair","key","_classCallCheck","this","LinkedList","equalsFn","arguments","length","_util","count","head","element","node","_linkedListModels","Node","current","next","index","previous","getElementAt","indexOf","removeAt","size","objString","Stack","items","isEmpty","result","quick","left","right","pivot","Math","floor","j","partition","quickSort","findMaxValue","max","findMinValue","min","DoublyNode","prev","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","Queue","lowestCount","insertionSort","temp","BinarySearchTree","_node","insertNode","searchNode","callback","inOrderTraverseNode","preOrderTraverseNode","postOrderTraverseNode","minNode","maxNode","removeNode","aux","Dictionary","toStrFn","table","tableKey","_valuePair","valuePair","hasKey","keyValues","map","values","callbackFn","valuePairs","keys","DoublyLinkedList","tail","_get","Deque","addBack","INF","MAX_SAFE_INTEGER","minDistance","dist","visited","minIndex","v","dijkstra","graph","src","u","sudokuSolver","matrix","solveSudoku","row","col","checkBlankSpaces","UNASSIGNED","num","isSafe","usedInRow","usedInCol","boxStartRow","boxStartCol","usedInBox","ratInAMaze","maze","solution","findPath","x","y","lcs","wordX","wordY","answer","printSolution","knapSack","capacity","weights","load","val","kS","w","k","findValues","minCoinChange","coins","amount","change","total","coin","push","cache","makeChange","newMin","newAmount","concat","binarySearch","high","_quicksort","binarySearchRecursive","low","mid","sequentialSearch","interpolationSearch","diffFn","position","delta","sortedArray","shellSort","increment","selectionSort","indexMin","radixSort","radixBase","minValue","_minMaxSearch","maxValue","significantDigit","countingSortForRadix","getBucketIndex","bucketsIndex","buckets","mergeSort","_array","middle","slice","merge","countingSort","sortedIndex","counts","Array","forEach","bucketSort","bucketSize","_insertionSort","apply","_toConsumableArray","sortBuckets","bucketCount","createBuckets","modifiedBubbleSort","bubbleSort","shuffle","currentIndex","randomIndex","random","find","parent","union","kruskal","ne","cost","initializeCost","minKey","prim","floydWarshall","isFinite","Infinity","Colors","WHITE","GREY","BLACK","initializeColor","vertices","color","depthFirstSearchVisit","adjList","neighbors","DFSVisit","depthFirstSearch","getVertices","getAdjList","f","time","DFS","discovery","finished","predecessors","breadthFirstSearch","startVertex","queue","_queue2","default","enqueue","dequeue","BFS","distances","Graph","isDirected","_dictionary2","includes","set","addVertex","heapify","heapSize","largest","buildMaxHeap","MinHeap","heap","siftUp","getLeftIndex","getRightIndex","siftDown","getParentIndex","shift","removedValue","pop","maxIndex","MaxHeap","BalanceFactor","UNBALANCED_RIGHT","SLIGHTLY_UNBALANCED_RIGHT","BALANCED","SLIGHTLY_UNBALANCED_LEFT","UNBALANCED_LEFT","AVLTree","getNodeHeight","tmp","rotationRR","rotationLL","heightDifference","balanceFactor","getBalanceFactor","rotationLR","rotationRL","fibonacci","fibonacciIterative","fibNMinus2","fibNMinus1","fibN","fibonacciMemoization","memo","fibonacciMem","factorialIterative","number","factorial","ValuePairLazy","isDeleted","HashTableLinearProbingLazy","hash","charCodeAt","loseloseHashCode","hashCode","_valuePairLazy","HashTableLinearProbing","verifyRemoveSideEffect","removedPosition","posHash","HashTableSeparateChaining","_linkedList2","linkedList","getHead","remove","HashTable","Set","has","otherSet","unionSet","add","intersectionSet","otherValues","biggerSet","smallerSet","differenceSet","isSubset","every","StackLinkedList","_doublyLinkedList2","clear","SortedLinkedList","getIndexNextSortedElement","pos","CircularLinkedList","removed","palindromeChecker","aString","deque","_deque2","lowerString","toLocaleLowerCase","split","join","firstChar","lastChar","charAt","removeFront","removeBack","hotPotato","elementsList","elimitatedList","eliminated","winner","parenthesesChecker","symbols","stack","_stack2","balanced","symbol","top","decimalToBinary","decNumber","remStack","rem","binaryString","baseConverter","base","baseString","hanoiStack","plates","source","dest","helper","towerOfHanoi","sourceName","helperName","destName","moves","move","hanoi","StackArray","util"],"mappings":"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","file":"PacktDataStructuresAlgorithms.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"PacktDataStructuresAlgorithms\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PacktDataStructuresAlgorithms\"] = factory();\n\telse\n\t\troot[\"PacktDataStructuresAlgorithms\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 64);\n","export const Compare = {\n LESS_THAN: -1,\n BIGGER_THAN: 1,\n EQUALS: 0\n};\n\nexport const DOES_NOT_EXIST = -1;\n\nexport function lesserEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.LESS_THAN || comp === Compare.EQUALS;\n}\n\nexport function biggerEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS;\n}\n\nexport function defaultCompare(a, b) {\n if (a === b) {\n return Compare.EQUALS;\n }\n return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN;\n}\n\nexport function defaultEquals(a, b) {\n return a === b;\n}\n\nexport function defaultToString(item) {\n if (item === null) {\n return 'NULL';\n } else if (item === undefined) {\n return 'UNDEFINED';\n } else if (typeof item === 'string' || item instanceof String) {\n return `${item}`;\n }\n return item.toString();\n}\n\nexport function swap(array, a, b) {\n /* const temp = array[a];\n array[a] = array[b];\n array[b] = temp; */\n [array[a], array[b]] = [array[b], array[a]];\n}\nexport function reverseCompare(compareFn) {\n return (a, b) => compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n }\n if (i <= j) {\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = undefined;\n this.right = undefined;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = undefined;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return undefined;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = undefined;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","const UNASSIGNED = 0;\n\nfunction usedInRow(matrix, row, num) {\n for (let col = 0; col < matrix.length; col++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInCol(matrix, col, num) {\n for (let row = 0; row < matrix.length; row++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInBox(matrix, boxStartRow, boxStartCol, num) {\n for (let row = 0; row < 3; row++) {\n for (let col = 0; col < 3; col++) {\n if (matrix[row + boxStartRow][col + boxStartCol] === num) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isSafe(matrix, row, col, num) {\n return (\n !usedInRow(matrix, row, num) &&\n !usedInCol(matrix, col, num) &&\n !usedInBox(matrix, row - (row % 3), col - (col % 3), num)\n );\n}\nfunction solveSudoku(matrix) {\n let row = 0;\n let col = 0;\n let checkBlankSpaces = false;\n\n for (row = 0; row < matrix.length; row++) {\n for (col = 0; col < matrix[row].length; col++) {\n if (matrix[row][col] === UNASSIGNED) {\n checkBlankSpaces = true;\n break;\n }\n }\n if (checkBlankSpaces === true) {\n break;\n }\n }\n if (checkBlankSpaces === false) {\n return true;\n }\n\n for (let num = 1; num <= 9; num++) {\n if (isSafe(matrix, row, col, num)) {\n matrix[row][col] = num;\n if (solveSudoku(matrix)) {\n return true;\n }\n matrix[row][col] = UNASSIGNED;\n }\n }\n return false;\n}\n\nexport function sudokuSolver(matrix) {\n if (solveSudoku(matrix) === true) {\n return matrix;\n }\n return 'NO SOLUTION EXISTS!';\n}\n","function isSafe(maze, x, y) {\n const n = maze.length;\n if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {\n return true;\n }\n return false;\n}\n\nfunction findPath(maze, x, y, solution) {\n const n = maze.length;\n if (x === n - 1 && y === n - 1) {\n solution[x][y] = 1;\n return true;\n }\n if (isSafe(maze, x, y) === true) {\n solution[x][y] = 1;\n if (findPath(maze, x + 1, y, solution)) {\n return true;\n }\n if (findPath(maze, x, y + 1, solution)) {\n return true;\n }\n solution[x][y] = 0;\n return false;\n }\n return false;\n}\n\nexport function ratInAMaze(maze) {\n const solution = [];\n for (let i = 0; i < maze.length; i++) {\n solution[i] = [];\n for (let j = 0; j < maze[i].length; j++) {\n solution[i][j] = 0;\n }\n }\n if (findPath(maze, 0, 0, solution) === true) {\n return solution;\n }\n return 'NO PATH FOUND';\n}\n","export function lcs(wordX, wordY, m = wordX.length, n = wordY.length) {\n if (m === 0 || n === 0) {\n return 0;\n }\n if (wordX[m - 1] === wordY[n - 1]) {\n return 1 + lcs(wordX, wordY, m - 1, n - 1);\n }\n const a = lcs(wordX, wordY, m, n - 1);\n const b = lcs(wordX, wordY, m - 1, n);\n return a > b ? a : b;\n}\n","function printSolution(solution, wordX, m, n) {\n let a = m;\n let b = n;\n let x = solution[a][b];\n let answer = '';\n while (x !== '0') {\n if (solution[a][b] === 'diagonal') {\n answer = wordX[a - 1] + answer;\n a--;\n b--;\n } else if (solution[a][b] === 'left') {\n b--;\n } else if (solution[a][b] === 'top') {\n a--;\n }\n x = solution[a][b];\n }\n // console.log('lcs: ' + answer);\n}\nexport function lcs(wordX, wordY) {\n const m = wordX.length;\n const n = wordY.length;\n const l = [];\n const solution = [];\n for (let i = 0; i <= m; i++) {\n l[i] = [];\n solution[i] = [];\n for (let j = 0; j <= n; j++) {\n l[i][j] = 0;\n solution[i][j] = '0';\n }\n }\n for (let i = 0; i <= m; i++) {\n for (let j = 0; j <= n; j++) {\n if (i === 0 || j === 0) {\n l[i][j] = 0;\n } else if (wordX[i - 1] === wordY[j - 1]) {\n l[i][j] = l[i - 1][j - 1] + 1;\n solution[i][j] = 'diagonal';\n } else {\n const a = l[i - 1][j];\n const b = l[i][j - 1];\n l[i][j] = a > b ? a : b; // max(a,b)\n solution[i][j] = l[i][j] === l[i - 1][j] ? 'top' : 'left';\n }\n }\n // console.log(l[i].join());\n // console.log(solution[i].join());\n }\n printSolution(solution, wordX, m, n);\n return l[m][n];\n}\n","export function lcs(wordX, wordY) {\n const m = wordX.length;\n const n = wordY.length;\n const l = [];\n for (let i = 0; i <= m; i++) {\n l[i] = [];\n for (let j = 0; j <= n; j++) {\n l[i][j] = 0;\n }\n }\n for (let i = 0; i <= m; i++) {\n for (let j = 0; j <= n; j++) {\n if (i === 0 || j === 0) {\n l[i][j] = 0;\n } else if (wordX[i - 1] === wordY[j - 1]) {\n l[i][j] = l[i - 1][j - 1] + 1;\n } else {\n const a = l[i - 1][j];\n const b = l[i][j - 1];\n l[i][j] = a > b ? a : b; // max(a,b)\n }\n }\n // console.log(l[i].join());\n }\n return l[m][n];\n}\n","export function knapSack(capacity, weights, values) {\n const n = values.length;\n let load = 0;\n let val = 0;\n for (let i = 0; i < n && load < capacity; i++) {\n if (weights[i] <= capacity - load) {\n val += values[i];\n load += weights[i];\n // console.log('using item ' + (i + 1) + ' for the solution');\n } else {\n const r = (capacity - load) / weights[i];\n val += r * values[i];\n load += weights[i];\n // console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution');\n }\n }\n return val;\n}\n","export function knapSack(capacity, weights, values, n) {\n if (n === 0 || capacity === 0) {\n return 0;\n }\n if (weights[n - 1] > capacity) {\n return knapSack(capacity, weights, values, n - 1);\n }\n const a = values[n - 1] + knapSack(capacity - weights[n - 1], weights, values, n - 1);\n const b = knapSack(capacity, weights, values, n - 1);\n return a > b ? a : b;\n}\n","function findValues(n, capacity, kS) {\n let i = n;\n let k = capacity;\n // console.log('Items that are part of the solution:');\n while (i > 0 && k > 0) {\n if (kS[i][k] !== kS[i - 1][k]) {\n // console.log(\n // item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1]\n // );\n i--;\n k -= kS[i][k];\n } else {\n i--;\n }\n }\n}\n\nexport function knapSack(capacity, weights, values, n) {\n const kS = [];\n for (let i = 0; i <= n; i++) {\n kS[i] = [];\n }\n for (let i = 0; i <= n; i++) {\n for (let w = 0; w <= capacity; w++) {\n if (i === 0 || w === 0) {\n kS[i][w] = 0;\n } else if (weights[i - 1] <= w) {\n const a = values[i - 1] + kS[i - 1][w - weights[i - 1]];\n const b = kS[i - 1][w];\n kS[i][w] = a > b ? a : b; // max(a,b)\n // console.log(a + ' can be part of the solution');\n } else {\n kS[i][w] = kS[i - 1][w];\n }\n }\n // console.log(kS[i].join());\n }\n // extra algorithm to find the items that are part of the solution\n findValues(n, capacity, kS);\n return kS[n][capacity];\n}\n","export function minCoinChange(coins, amount) {\n const change = [];\n let total = 0;\n for (let i = coins.length; i >= 0; i--) {\n const coin = coins[i];\n while (total + coin <= amount) {\n change.push(coin);\n total += coin;\n }\n }\n return change;\n}\n","export function minCoinChange(coins, amount) {\n const cache = [];\n\n const makeChange = (value) => {\n if (!value) {\n return [];\n }\n if (cache[value]) {\n return cache[value];\n }\n let min = [];\n let newMin;\n let newAmount;\n for (let i = 0; i < coins.length; i++) {\n const coin = coins[i];\n newAmount = value - coin;\n if (newAmount >= 0) {\n newMin = makeChange(newAmount);\n }\n if (\n newAmount >= 0 &&\n (newMin.length < min.length - 1 || !min.length) &&\n (newMin.length || !newAmount)\n ) {\n min = [coin].concat(newMin);\n // console.log('new Min ' + min + ' for ' + amount);\n }\n }\n return (cache[value] = min);\n };\n return makeChange(amount);\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nfunction binarySearchRecursive(array, value, low, high, compareFn = defaultCompare) {\n if (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = array[mid];\n if (compareFn(element, value) === Compare.LESS_THAN) {\n return binarySearchRecursive(array, value, mid + 1, high, compareFn);\n }\n if (compareFn(element, value) === Compare.BIGGER_THAN) {\n return binarySearchRecursive(array, value, low, mid - 1, compareFn);\n }\n return mid;\n }\n return DOES_NOT_EXIST;\n}\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n const low = 0;\n const high = sortedArray.length - 1;\n return binarySearchRecursive(array, value, low, high, compareFn);\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n return false;\n }\n }\n\n return true;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols[index];\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n return balanced && stack.isEmpty();\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { hotPotato } from './others/hot-potato';\nexport { palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n\n// chapter 14\nexport { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive';\nexport { minCoinChange } from './algorithms/dynamic-programing/min-coin-change';\nexport { minCoinChange as minCoinChangeGreedy } from './algorithms/greedy/min-coin-change';\nexport { knapSack } from './algorithms/dynamic-programing/knapsack';\nexport { knapSack as knapSackRecursive } from './algorithms/dynamic-programing/knapsack-recursive';\nexport { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack';\nexport { lcs } from './algorithms/dynamic-programing/longest-common-subsequence';\nexport { lcs as lcsPrint } from './algorithms/dynamic-programing/longest-common-subsequence-print';\nexport { lcs as lcsRecursive } from './algorithms/greedy/longest-common-subsequence';\nexport { ratInAMaze } from './algorithms/backtracking/rat-in-maze';\nexport { sudokuSolver } from './algorithms/backtracking/sudoku-solver';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/js/data-structures/binary-search-tree.js b/src/js/data-structures/binary-search-tree.js index b05de8b2..0dbe9519 100644 --- a/src/js/data-structures/binary-search-tree.js +++ b/src/js/data-structures/binary-search-tree.js @@ -4,7 +4,7 @@ import { Node } from './models/node'; export default class BinarySearchTree { constructor(compareFn = defaultCompare) { this.compareFn = compareFn; - this.root = null; + this.root = undefined; } insert(key) { // special case: first key @@ -99,7 +99,7 @@ export default class BinarySearchTree { } removeNode(node, key) { if (node == null) { - return null; + return undefined; } if (this.compareFn(key, node.key) === Compare.LESS_THAN) { node.left = this.removeNode(node.left, key); @@ -115,7 +115,7 @@ export default class BinarySearchTree { // 3 - a node with 2 children // case 1 if (node.left == null && node.right == null) { - node = null; + node = undefined; return node; } // case 2 diff --git a/src/js/data-structures/models/node.js b/src/js/data-structures/models/node.js index 6d3b54a7..70339215 100644 --- a/src/js/data-structures/models/node.js +++ b/src/js/data-structures/models/node.js @@ -1,8 +1,8 @@ export class Node { constructor(key) { this.key = key; - this.left = null; - this.right = null; + this.left = undefined; + this.right = undefined; } toString() { return `${this.key}`; diff --git a/test/js/data-structures/avl-tree.spec.js b/test/js/data-structures/avl-tree.spec.js new file mode 100644 index 00000000..f113e561 --- /dev/null +++ b/test/js/data-structures/avl-tree.spec.js @@ -0,0 +1,32 @@ +import 'mocha'; +import { expect } from 'chai'; +import { AVLTree } from '../../../src/js/index'; + +describe('AVLTree', () => { + let tree; + + beforeEach(() => { + tree = new AVLTree(); + }); + + it('starts empty', () => { + expect(tree.getRoot()).to.equal(null); + }); + + it('inserts elements in the AVLTree', () => { + expect(tree.getRoot()).to.equal(null); + + tree.insert(1); + tree.insert(2); + tree.insert(3); + tree.insert(4); + tree.insert(5); + tree.insert(6); + tree.insert(7); + tree.insert(14); + tree.insert(15); + tree.insert(13); + tree.insert(12); + tree.insert(11); + }); +}); diff --git a/test/js/data-structures/binary-search-tree.spec.js b/test/js/data-structures/binary-search-tree.spec.js new file mode 100644 index 00000000..8b940818 --- /dev/null +++ b/test/js/data-structures/binary-search-tree.spec.js @@ -0,0 +1,108 @@ +import 'mocha'; +import { expect } from 'chai'; +import { BinarySearchTree } from '../../../src/js/index'; + +describe('BinarySearchTree', () => { + let tree; + + beforeEach(() => { + tree = new BinarySearchTree(); + }); + + it('starts empty', () => { + expect(tree.getRoot()).to.equal(undefined); + }); + + function assertNode(node, key, left, right) { + if (key != null) { + expect(node.key).to.equal(key); + } else { + expect(node).to.equal(key); + return; + } + + if (left != null) { + expect(node.left.key).to.equal(left); + } else { + expect(node.left).to.equal(left); + } + + if (right != null) { + expect(node.right.key).to.equal(right); + } else { + expect(node.right).to.equal(right); + } + } + + it('inserts elements in the BST', () => { + expect(tree.getRoot()).to.equal(undefined); + + tree.insert(11); + tree.insert(7); + tree.insert(15); + tree.insert(5); + tree.insert(3); + tree.insert(9); + tree.insert(8); + tree.insert(10); + tree.insert(13); + tree.insert(12); + tree.insert(14); + tree.insert(20); + tree.insert(18); + tree.insert(25); + + let node = tree.getRoot(); + assertNode(node, 11, 7, 15); + + node = node.left; + assertNode(node, 7, 5, 9); + + node = node.left; + assertNode(node, 5, 3, undefined); + + node = node.left; + assertNode(node, 3, undefined, undefined); + + node = tree.getRoot().left.left.right; + assertNode(node, undefined, undefined, undefined); + + node = tree.getRoot().left.right; + assertNode(node, 9, 8, 10); + + node = node.left; + assertNode(node, 8, undefined, undefined); + + node = tree.getRoot().left.right.right; + assertNode(node, 10, undefined, undefined); + + node = tree.getRoot().right; + assertNode(node, 15, 13, 20); + + node = node.left; + assertNode(node, 13, 12, 14); + + node = node.left; + assertNode(node, 12, undefined, undefined); + + node = tree.getRoot().right.left.right; + assertNode(node, 14, undefined, undefined); + + node = tree.getRoot().right.right; + assertNode(node, 20, 18, 25); + + node = node.left; + assertNode(node, 18, undefined, undefined); + + node = tree.getRoot().right.right.right; + assertNode(node, 25, undefined, undefined); + }); + + it('verifies if element exists', () => { + expect(tree.getRoot()).to.equal(undefined); + }); + + it('removes a leaf', () => { + expect(tree.getRoot()).to.equal(undefined); + }); +}); diff --git a/test/js/data-structures/heap.spec.js b/test/js/data-structures/heap.spec.js new file mode 100644 index 00000000..15ce1bce --- /dev/null +++ b/test/js/data-structures/heap.spec.js @@ -0,0 +1,75 @@ +import 'mocha'; +import { expect } from 'chai'; +import { MinHeap, heapSort } from '../../../src/js/index'; + +describe('Heap', () => { + let heap; + + beforeEach(() => { + heap = new MinHeap(); + }); + + it('starts empty MinHeap', () => { + expect(heap.size()).to.equal(0); + expect(heap.isEmpty()).to.equal(true); + }); + + it('inserts values in the MinHeap', () => { + const resultArray = []; + for (let i = 1; i < 10; i++) { + resultArray.push(i); + heap.insert(i); + expect(heap.getAsArray()).to.deep.equal(resultArray); + } + }); + + it('finds the min value from the MinHeap', () => { + const resultArray = []; + for (let i = 10; i >= 1; i--) { + resultArray.push(i); + heap.insert(i); + expect(heap.findMinimum()).to.equal(i); + } + }); + + it('performs heapify in the MinHeap', () => { + const resultArray = []; + for (let i = 10; i >= 1; i--) { + resultArray.push(i); + } + expect(heap.heapify(resultArray)).to.deep.equal(resultArray); + }); + + it('extracts the min value from the MinHeap', () => { + let resultArray = []; + for (let i = 1; i < 10; i++) { + resultArray.push(i); + heap.insert(i); + expect(heap.getAsArray()).to.deep.equal(resultArray); + } + + resultArray = [ + [], + [2, 4, 3, 8, 5, 6, 7, 9], + [3, 4, 6, 8, 5, 9, 7], + [4, 5, 6, 8, 7, 9], + [5, 7, 6, 8, 9], + [6, 7, 9, 8], + [7, 8, 9], + [8, 9], + [9], + [] + ]; + + for (let i = 1; i < 10; i++) { + expect(heap.extract()).to.equal(i); + expect(heap.getAsArray()).to.deep.equal(resultArray[i]); + } + }); + + it('Heap Sort', () => { + const array = [3, 2, 5, 6, 1, 7, 8, 9]; + + expect(heapSort(array)).to.deep.equal([1, 2, 3, 5, 6, 7, 8, 9]); + }); +}); diff --git a/test/ts/data-structures/heap.spec.ts b/test/ts/data-structures/heap.spec.ts index bdfc2eca..6a543fcd 100644 --- a/test/ts/data-structures/heap.spec.ts +++ b/test/ts/data-structures/heap.spec.ts @@ -1,8 +1,6 @@ import 'mocha'; import { expect } from 'chai'; -import { MinHeap } from '../../../src/ts/index'; -import { MaxHeap } from '../../../src/ts/data-structures/heap'; -import heapSort from '../../../src/ts/algorithms/sorting/heap-sort'; +import { MinHeap, heapSort } from '../../../src/ts/index'; describe('Heap', () => { let heap: MinHeap; @@ -55,7 +53,7 @@ describe('Heap', () => { [2, 4, 3, 8, 5, 6, 7, 9], [3, 4, 6, 8, 5, 9, 7], [4, 5, 6, 8, 7, 9], - [5, 7 , 6, 8, 9], + [5, 7, 6, 8, 9], [6, 7, 9, 8], [7, 8, 9], [8, 9], From 08e897039ec48c615b26036b8a856088759568a8 Mon Sep 17 00:00:00 2001 From: loiane Date: Wed, 25 Apr 2018 12:43:16 -0400 Subject: [PATCH 125/188] added tests --- .../backtracking/rat-in-maze.spec.js | 21 +++++++ .../backtracking/sudoku-solver.spec.js | 57 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 test/js/algorithms/backtracking/rat-in-maze.spec.js create mode 100644 test/js/algorithms/backtracking/sudoku-solver.spec.js diff --git a/test/js/algorithms/backtracking/rat-in-maze.spec.js b/test/js/algorithms/backtracking/rat-in-maze.spec.js new file mode 100644 index 00000000..b88e1d60 --- /dev/null +++ b/test/js/algorithms/backtracking/rat-in-maze.spec.js @@ -0,0 +1,21 @@ +import 'mocha'; +import { expect } from 'chai'; +import { ratInAMaze } from '../../../../src/js/index'; + +describe('Rat in a maze', () => { + it('rat in a maze solver', () => { + const maze = [ + [1, 0, 0, 0], + [1, 1, 1, 1], + [0, 0, 1, 0], + [0, 1, 1, 1] + ]; + const solution = [ + [1, 0, 0, 0], + [1, 1, 1, 0], + [0, 0, 1, 0], + [0, 0, 1, 1] + ]; + expect(ratInAMaze(maze)).to.deep.equal(solution); + }); +}); diff --git a/test/js/algorithms/backtracking/sudoku-solver.spec.js b/test/js/algorithms/backtracking/sudoku-solver.spec.js new file mode 100644 index 00000000..f4d8c216 --- /dev/null +++ b/test/js/algorithms/backtracking/sudoku-solver.spec.js @@ -0,0 +1,57 @@ +import 'mocha'; +import { expect } from 'chai'; +import { sudokuSolver } from '../../../../src/js/index'; + +describe('Sudoku Solver', () => { + it('sudoku solver', () => { + const grid = [ + [3, 0, 6, 5, 0, 8, 4, 0, 0], + [5, 2, 0, 0, 0, 0, 0, 0, 0], + [0, 8, 7, 0, 0, 0, 0, 3, 1], + [0, 0, 3, 0, 1, 0, 0, 8, 0], + [9, 0, 0, 8, 6, 3, 0, 0, 5], + [0, 5, 0, 0, 9, 0, 6, 0, 0], + [1, 3, 0, 0, 0, 0, 2, 5, 0], + [0, 0, 0, 0, 0, 0, 0, 7, 4], + [0, 0, 5, 2, 0, 6, 3, 0, 0] + ]; + const solution = [ + [3, 1, 6, 5, 7, 8, 4, 9, 2], + [5, 2, 9, 1, 3, 4, 7, 6, 8], + [4, 8, 7, 6, 2, 9, 5, 3, 1], + [2, 6, 3, 4, 1, 5, 9, 8, 7], + [9, 7, 4, 8, 6, 3, 1, 2, 5], + [8, 5, 1, 7, 9, 2, 6, 4, 3], + [1, 3, 8, 9, 4, 7, 2, 5, 6], + [6, 9, 2, 3, 5, 1, 8, 7, 4], + [7, 4, 5, 2, 8, 6, 3, 1, 9] + ]; + expect(sudokuSolver(grid)).to.deep.equal(solution); + }); + + it('sudoku solver 2', () => { + const grid = [ + [5, 3, 0, 0, 7, 0, 0, 0, 0], + [6, 0, 0, 1, 9, 5, 0, 0, 0], + [0, 9, 8, 0, 0, 0, 0, 6, 0], + [8, 0, 0, 0, 6, 0, 0, 0, 3], + [4, 0, 0, 8, 0, 3, 0, 0, 1], + [7, 0, 0, 0, 2, 0, 0, 0, 6], + [0, 6, 0, 0, 0, 0, 2, 8, 0], + [0, 0, 0, 4, 1, 9, 0, 0, 5], + [0, 0, 0, 0, 8, 0, 0, 7, 9] + ]; + const solution = [ + [5, 3, 4, 6, 7, 8, 9, 1, 2], + [6, 7, 2, 1, 9, 5, 3, 4, 8], + [1, 9, 8, 3, 4, 2, 5, 6, 7], + [8, 5, 9, 7, 6, 1, 4, 2, 3], + [4, 2, 6, 8, 5, 3, 7, 9, 1], + [7, 1, 3, 9, 2, 4, 8, 5, 6], + [9, 6, 1, 5, 3, 7, 2, 8, 4], + [2, 8, 7, 4, 1, 9, 6, 3, 5], + [3, 4, 5, 2, 8, 6, 1, 7, 9] + ]; + expect(sudokuSolver(grid)).to.deep.equal(solution); + }); +}); From 15f2925bad0dbdb65f79b29bffa1c535024b999d Mon Sep 17 00:00:00 2001 From: loiane Date: Wed, 25 Apr 2018 15:36:37 -0400 Subject: [PATCH 126/188] added tests --- src/ts/algorithms/greedy/knapsack.ts | 2 +- .../greedy/longest-common-subsequence.ts | 2 +- src/ts/algorithms/greedy/min-coin-change.ts | 2 +- src/ts/index.ts | 14 +++++++++++--- test/ts/algorithms/greedy/knapsack.spec.ts | 15 +++++++++++++++ .../greedy/longest-common-subsequence.spec.ts | 0 .../greedy/matrix-chain-multiplication.spec.ts | 0 test/ts/algorithms/greedy/min-coin-change.spec.ts | 14 ++++++++++++++ 8 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 test/ts/algorithms/greedy/knapsack.spec.ts create mode 100644 test/ts/algorithms/greedy/longest-common-subsequence.spec.ts create mode 100644 test/ts/algorithms/greedy/matrix-chain-multiplication.spec.ts create mode 100644 test/ts/algorithms/greedy/min-coin-change.spec.ts diff --git a/src/ts/algorithms/greedy/knapsack.ts b/src/ts/algorithms/greedy/knapsack.ts index 68b235ec..101ebae5 100644 --- a/src/ts/algorithms/greedy/knapsack.ts +++ b/src/ts/algorithms/greedy/knapsack.ts @@ -1,4 +1,4 @@ -function knapSack(capacity: number, weights: number[], values: number[]) { +export function knapSack(capacity: number, weights: number[], values: number[]) { const n = values.length; let load = 0; let val = 0; diff --git a/src/ts/algorithms/greedy/longest-common-subsequence.ts b/src/ts/algorithms/greedy/longest-common-subsequence.ts index 45ce0ac9..a7239f66 100644 --- a/src/ts/algorithms/greedy/longest-common-subsequence.ts +++ b/src/ts/algorithms/greedy/longest-common-subsequence.ts @@ -1,4 +1,4 @@ -function lcs(wordX: string, wordY: string, m = wordX.length, n = wordY.length): number { +export function lcs(wordX: string, wordY: string, m = wordX.length, n = wordY.length): number { if (m === 0 || n === 0) { return 0; } diff --git a/src/ts/algorithms/greedy/min-coin-change.ts b/src/ts/algorithms/greedy/min-coin-change.ts index 7e8f7f72..14f3fbf6 100644 --- a/src/ts/algorithms/greedy/min-coin-change.ts +++ b/src/ts/algorithms/greedy/min-coin-change.ts @@ -1,4 +1,4 @@ -function minCoinChange(coins: number[], amount: number) { +export function minCoinChange(coins: number[], amount: number) { const change: number[] = []; let total = 0; for (let i = coins.length; i >= 0; i--) { diff --git a/src/ts/index.ts b/src/ts/index.ts index b1e507e1..6a3ed6cb 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -63,9 +63,17 @@ export { findMinValue as findMinValue } from './algorithms/search/min-max-search // chapter 14 export { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive'; -export { minCoinChange as minCoinChange } from './algorithms/dynamic-programing/min-coin-change'; -export { ratInAMaze as ratInAMaze } from './algorithms/backtracking/rat-in-maze'; -export { sudokuSolver as sudokuSolver } from './algorithms/backtracking/sudoku-solver'; +export { minCoinChange } from './algorithms/dynamic-programing/min-coin-change'; +export { minCoinChange as minCoinChangeGreedy } from './algorithms/greedy/min-coin-change'; +export { knapSack } from './algorithms/dynamic-programing/knapsack'; +export { knapSack as knapSackRecursive } from './algorithms/dynamic-programing/knapsack-recursive'; +export { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack'; +export { lcs } from './algorithms/dynamic-programing/longest-common-subsequence'; +export { lcs as lcsPrint } from './algorithms/dynamic-programing/longest-common-subsequence-print'; +export { lcs as lcsRecursive } from './algorithms/greedy/longest-common-subsequence'; +export { ratInAMaze } from './algorithms/backtracking/rat-in-maze'; +export { sudokuSolver } from './algorithms/backtracking/sudoku-solver'; + /* import { hotPotato } from './others/hot-potato'; diff --git a/test/ts/algorithms/greedy/knapsack.spec.ts b/test/ts/algorithms/greedy/knapsack.spec.ts new file mode 100644 index 00000000..0997bafd --- /dev/null +++ b/test/ts/algorithms/greedy/knapsack.spec.ts @@ -0,0 +1,15 @@ +import 'mocha'; +import { expect } from 'chai'; +import { knapSackGreedy } from '../../../../src/ts/index'; + +describe('Min Coin Change Greedy', () => { + const SIZE = 100; + + it('works with greedy approach', () => { + const values = [3, 4, 5]; + const weights = [2, 3, 4]; + const capacity = 5; + + expect(knapSackGreedy(capacity, weights, values)).to.equal(7); + }); +}); diff --git a/test/ts/algorithms/greedy/longest-common-subsequence.spec.ts b/test/ts/algorithms/greedy/longest-common-subsequence.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/test/ts/algorithms/greedy/matrix-chain-multiplication.spec.ts b/test/ts/algorithms/greedy/matrix-chain-multiplication.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/test/ts/algorithms/greedy/min-coin-change.spec.ts b/test/ts/algorithms/greedy/min-coin-change.spec.ts new file mode 100644 index 00000000..c16e4de0 --- /dev/null +++ b/test/ts/algorithms/greedy/min-coin-change.spec.ts @@ -0,0 +1,14 @@ +import 'mocha'; +import { expect } from 'chai'; +import { minCoinChangeGreedy } from '../../../../src/ts/index'; + +describe('Min Coin Change Greedy', () => { + + const SIZE = 100; + + it('works with greedy approach', () => { + expect(minCoinChangeGreedy([1, 5, 10], 15)).to.deep.equal([10, 5]); + expect(minCoinChangeGreedy([1, 3, 4], 6)).to.deep.equal([4, 1, 1]); + }); + +}); From 675a986db497bf63d8b72dda87c22c6e2dd884b5 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Mon, 30 Apr 2018 11:22:47 +0000 Subject: [PATCH 127/188] chore(package): update webpack-cli to version 2.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5ce012f7..754e062d 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "tslint": "^5.9.1", "typescript": "^2.7.2", "webpack": "^4.1.1", - "webpack-cli": "2.0.15", + "webpack-cli": "2.1.1", "yargs": "^11.0.0" }, "dependencies": { From 7df2a07a98fee899b55d8c2d8656fe1f7bdf086e Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 1 May 2018 10:17:29 -0400 Subject: [PATCH 128/188] [Algorithm Design and Techniques] --- examples/PacktDataStructuresAlgorithms.min.js | 2 +- .../PacktDataStructuresAlgorithms.min.js.map | 2 +- .../07-LongestCommonSubsequenceDP.js | 8 + .../08-LongestCommonSubsequenceRecursive.js | 6 + .../09-MatrixChainMultiplicationDP.js | 5 + .../10-MatrixChainMultiplicationRecursive.js | 5 + .../13-IntroFunctionalProgramming.js | 147 + package-lock.json | 4916 ++++++++--------- .../longest-common-subsequence-print.js | 5 +- src/js/index.js | 2 + .../longest-common-subsequence-print.ts | 5 +- .../knapsack-recursive.spec.ts | 16 + .../dynamic-programming/knapsack.spec.ts | 16 + test/ts/algorithms/greedy/knapsack.spec.ts | 2 +- .../greedy/longest-common-subsequence.spec.ts | 0 .../matrix-chain-multiplication.spec.ts | 0 16 files changed, 2671 insertions(+), 2466 deletions(-) create mode 100644 test/ts/algorithms/dynamic-programming/knapsack-recursive.spec.ts create mode 100644 test/ts/algorithms/dynamic-programming/knapsack.spec.ts delete mode 100644 test/ts/algorithms/greedy/longest-common-subsequence.spec.ts delete mode 100644 test/ts/algorithms/greedy/matrix-chain-multiplication.spec.ts diff --git a/examples/PacktDataStructuresAlgorithms.min.js b/examples/PacktDataStructuresAlgorithms.min.js index f3775d20..b7d4c0c6 100644 --- a/examples/PacktDataStructuresAlgorithms.min.js +++ b/examples/PacktDataStructuresAlgorithms.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("PacktDataStructuresAlgorithms",[],t):"object"==typeof exports?exports.PacktDataStructuresAlgorithms=t():e.PacktDataStructuresAlgorithms=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=64)}([function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lesserEquals=function(e,n,r){var i=r(e,n);return i===t.LESS_THAN||i===t.EQUALS},e.biggerEquals=function(e,n,r){var i=r(e,n);return i===t.BIGGER_THAN||i===t.EQUALS},e.defaultCompare=function(e,n){return e===n?t.EQUALS:e0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.findMaxValue=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=void 0}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null!=e){if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=void 0;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t=0&&n>=0&&t2&&void 0!==arguments[2]?arguments[2]:t.length,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n.length;if(0===r||0===i)return 0;if(t[r-1]===n[i-1])return 1+e(t,n,r-1,i-1);var o=e(t,n,r,i-1),u=e(t,n,r-1,i);return o>u?o:u}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lcs=function(e,t){for(var n=e.length,r=t.length,i=[],o=[],u=0;u<=n;u++){i[u]=[],o[u]=[];for(var a=0;a<=r;a++)i[u][a]=0,o[u][a]="0"}for(var l=0;l<=n;l++)for(var f=0;f<=r;f++)if(0===l||0===f)i[l][f]=0;else if(e[l-1]===t[f-1])i[l][f]=i[l-1][f-1]+1,o[l][f]="diagonal";else{var s=i[l-1][f],c=i[l][f-1];i[l][f]=s>c?s:c,o[l][f]=i[l][f]===i[l-1][f]?"top":"left"}return function(e,t,n,r){for(var i=n,o=r,u=e[i][o],a="";"0"!==u;)"diagonal"===e[i][o]?(a=t[i-1]+a,i--,o--):"left"===e[i][o]?o--:"top"===e[i][o]&&i--,u=e[i][o]}(o,e,n,r),i[n][r]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lcs=function(e,t){for(var n=e.length,r=t.length,i=[],o=0;o<=n;o++){i[o]=[];for(var u=0;u<=r;u++)i[o][u]=0}for(var a=0;a<=n;a++)for(var l=0;l<=r;l++)if(0===a||0===l)i[a][l]=0;else if(e[a-1]===t[l-1])i[a][l]=i[a-1][l-1]+1;else{var f=i[a-1][l],s=i[a][l-1];i[a][l]=f>s?f:s}return i[n][r]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.knapSack=function(e,t,n){for(var r=n.length,i=0,o=0,u=0;ut)return e(t,n,r,i-1);var o=r[i-1]+e(t-n[i-1],n,r,i-1),u=e(t,n,r,i-1);return o>u?o:u}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.knapSack=function(e,t,n,r){for(var i=[],o=0;o<=r;o++)i[o]=[];for(var u=0;u<=r;u++)for(var a=0;a<=e;a++)if(0===u||0===a)i[u][a]=0;else if(t[u-1]<=a){var l=n[u-1]+i[u-1][a-t[u-1]],f=i[u-1][a];i[u][a]=l>f?l:f}else i[u][a]=i[u-1][a];return function(e,t,n){for(var r=e,i=t;r>0&&i>0;)n[r][i]!==n[r-1][i]?i-=n[--r][i]:r--}(r,e,i),i[r][e]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){for(var n=[],r=0,i=e.length;i>=0;i--)for(var o=e[i];r+o<=t;)n.push(o),r+=o;return n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){var n=[];return function t(r){if(!r)return[];if(n[r])return n[r];for(var i=[],o=void 0,u=void 0,a=0;a=0&&(o=t(u)),u>=0&&(o.length2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e).length-1;return function e(n,r,i,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultCompare;if(i<=o){var a=Math.floor((i+o)/2),l=n[a];return u(l,r)===t.Compare.LESS_THAN?e(n,r,a+1,o,u):u(l,r)===t.Compare.BIGGER_THAN?e(n,r,i,a-1,u):a}return t.DOES_NOT_EXIST}(e,r,0,o,i)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,l=-1,f=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(f=o(n,e[u])/o(e[a],e[u]),l=u+Math.floor((a-u)*f),i(e[l],n))return l;r(e[l],n)===t.Compare.LESS_THAN?u=l+1:a=l-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(4)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var l=Math.floor((u+a)/2),f=o[l];if(i(f,r)===t.Compare.LESS_THAN)u=l+1;else{if(i(f,r)!==t.Compare.BIGGER_THAN)return l;a=l-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],l=0;l=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),l=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),l0&&(u=l),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(10),n(9)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return l.UNBALANCED_RIGHT;case-1:return l.SLIGHTLY_UNBALANCED_RIGHT;case 1:return l.SLIGHTLY_UNBALANCED_LEFT;case 2:return l.UNBALANCED_LEFT;default:return l.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===l.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===l.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===l.BALANCED||this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===l.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===l.BALANCED||this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===l.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:t[n]=e(n-1)+e(n-2)}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(49)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1;)if(i=t.removeFront(),o=t.removeBack(),i!==o)return!1;return!0};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(7)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return n&&t.isEmpty()};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return l;if(1===t){i.push(n.pop());var f={};f[o]=n.toString(),f[u]=r.toString(),f[a]=i.toString(),l.push(f)}else{e(t-1,n,i,r,o,a,u,l),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),l.push(s),e(t-1,r,n,i,u,o,a,l)}return l}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.equalsFn=t,this.count=0,this.head=void 0}return i(e,[{key:"push",value:function(e){var t=new r.Node(e),n=void 0;if(null==this.head)this.head=t;else{for(n=this.head;null!=n.next;)n=n.next;n.next=t}this.count++}},{key:"getElementAt",value:function(e){if(e>=0&&e<=this.count){for(var t=this.head,n=0;n=0&&t<=this.count){var n=new r.Node(e);if(0===t){var i=this.head;n.next=i,this.head=n}else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1&&(u=function(e,n,r,i){for(var o=e[Math.floor((r+n)/2)],u=n,a=r;u<=a;){for(;i(e[u],o)===t.Compare.LESS_THAN;)u++;for(;i(e[a],o)===t.Compare.BIGGER_THAN;)a--;u<=a&&((0,t.swap)(e,u,a),u++,a--)}return u}(e,r,i,o),r1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;return n(e,0,e.length-1,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.findMaxValue=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(e&&e.length>0){for(var r=e[0],i=1;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=1;o0&&n(e[u-1],i)===t.Compare.BIGGER_THAN;)e[u]=e[u-1],u--;e[u]=i}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.compareFn=t,this.root=void 0}return i(e,[{key:"insert",value:function(e){null==this.root?this.root=new r.Node(e):this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){this.compareFn(t,e.key)===n.Compare.LESS_THAN?null==e.left?e.left=new r.Node(t):this.insertNode(e.left,t):null==e.right?e.right=new r.Node(t):this.insertNode(e.right,t)}},{key:"getRoot",value:function(){return this.root}},{key:"search",value:function(e){return this.searchNode(this.root,e)}},{key:"searchNode",value:function(e,t){return null!=e&&(this.compareFn(t,e.key)===n.Compare.LESS_THAN?this.searchNode(e.left,t):this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN||this.searchNode(e.right,t))}},{key:"inOrderTraverse",value:function(e){this.inOrderTraverseNode(this.root,e)}},{key:"inOrderTraverseNode",value:function(e,t){null!=e&&(this.inOrderTraverseNode(e.left,t),t(e.key),this.inOrderTraverseNode(e.right,t))}},{key:"preOrderTraverse",value:function(e){this.preOrderTraverseNode(this.root,e)}},{key:"preOrderTraverseNode",value:function(e,t){null!=e&&(t(e.key),this.preOrderTraverseNode(e.left,t),this.preOrderTraverseNode(e.right,t))}},{key:"postOrderTraverse",value:function(e){this.postOrderTraverseNode(this.root,e)}},{key:"postOrderTraverseNode",value:function(e,t){null!=e&&(this.postOrderTraverseNode(e.left,t),this.postOrderTraverseNode(e.right,t),t(e.key))}},{key:"min",value:function(){return this.minNode(this.root)}},{key:"minNode",value:function(e){for(var t=e;null!=t&&null!=t.left;)t=t.left;return t}},{key:"max",value:function(){return this.maxNode(this.root)}},{key:"maxNode",value:function(e){for(var t=e;null!=t&&null!=t.right;)t=t.right;return t}},{key:"remove",value:function(e){this.root=this.removeNode(this.root,e)}},{key:"removeNode",value:function(e,t){if(null!=e){if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)return e.left=this.removeNode(e.left,t),e;if(this.compareFn(t,e.key)===n.Compare.BIGGER_THAN)return e.right=this.removeNode(e.right,t),e;if(null==e.left&&null==e.right)return e=void 0;if(null==e.left)return e=e.right;if(null==e.right)return e=e.left;var r=this.minNode(e.right);return e.key=r.key,e.right=this.removeNode(e.right,r.key),e}}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"set",value:function(e,t){if(null!=e&&null!=t){var n=this.toStrFn(e);return this.table[n]=new r.ValuePair(e,t),!0}return!1}},{key:"get",value:function(e){var t=this.table[this.toStrFn(e)];return null==t?void 0:t.value}},{key:"hasKey",value:function(e){return null!=this.table[this.toStrFn(e)]}},{key:"remove",value:function(e){return!!this.hasKey(e)&&(delete this.table[this.toStrFn(e)],!0)}},{key:"values",value:function(){return this.keyValues().map(function(e){return e.value})}},{key:"keys",value:function(){return this.keyValues().map(function(e){return e.key})}},{key:"keyValues",value:function(){return Object.values(this.table)}},{key:"forEach",value:function(e){for(var t=this.keyValues(),n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.tail=void 0,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.DoublyNode(e);null==this.head?(this.head=t,this.tail=t):(this.tail.next=t,t.prev=this.tail,this.tail=t),this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.DoublyNode(e),r=this.head;if(0===t)null==this.head?(this.head=n,this.tail=n):(n.next=this.head,this.head.prev=n,this.head=n);else if(t===this.count)(r=this.tail).next=n,n.prev=r,this.tail=n;else{var o=this.getElementAt(t-1);r=o.next,n.next=r,o.next=n,r.prev=n,n.prev=o}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e0)this.lowestCount--,this.items[this.lowestCount]=e;else{for(var t=this.count;t>0;t--)this.items[t]=this.items[t-1];this.count++,this.items[0]=e}}},{key:"addBack",value:function(e){this.items[this.count]=e,this.count++}},{key:"removeFront",value:function(){if(!this.isEmpty()){var e=this.items[this.lowestCount];return delete this.items[this.lowestCount],this.lowestCount++,e}}},{key:"removeBack",value:function(){if(!this.isEmpty()){this.count--;var e=this.items[this.count];return delete this.items[this.count],e}}},{key:"peekFront",value:function(){if(!this.isEmpty())return this.items[this.lowestCount]}},{key:"peekBack",value:function(){if(!this.isEmpty())return this.items[this.count-1]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"clear",value:function(){this.items={},this.count=0,this.lowestCount=0}},{key:"size",value:function(){return this.count-this.lowestCount}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=""+this.items[this.lowestCount],t=this.lowestCount+1;t=0&&n>=0&&t1&&void 0!==arguments[1]?arguments[1]:1,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.length-1;if(n===r)return 0;for(var i=Number.MAX_SAFE_INTEGER,o=n;o2&&void 0!==arguments[2]?arguments[2]:t.length,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n.length;if(0===r||0===i)return 0;if(t[r-1]===n[i-1])return 1+e(t,n,r-1,i-1);var o=e(t,n,r,i-1),u=e(t,n,r-1,i);return o>u?o:u}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lcs=function(e,t){for(var n=e.length,r=t.length,i=[],o=[],u=0;u<=n;u++){i[u]=[],o[u]=[];for(var a=0;a<=r;a++)i[u][a]=0,o[u][a]="0"}for(var f=0;f<=n;f++)for(var l=0;l<=r;l++)if(0===f||0===l)i[f][l]=0;else if(e[f-1]===t[l-1])i[f][l]=i[f-1][l-1]+1,o[f][l]="diagonal";else{var s=i[f-1][l],c=i[f][l-1];i[f][l]=s>c?s:c,o[f][l]=i[f][l]===i[f-1][l]?"top":"left"}return function(e,t,n,r){for(var i=n,o=r,u=e[i][o],a="";"0"!==u;)"diagonal"===e[i][o]?(a=t[i-1]+a,i--,o--):"left"===e[i][o]?o--:"top"===e[i][o]&&i--,u=e[i][o];return a}(o,e,n,r)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.lcs=function(e,t){for(var n=e.length,r=t.length,i=[],o=0;o<=n;o++){i[o]=[];for(var u=0;u<=r;u++)i[o][u]=0}for(var a=0;a<=n;a++)for(var f=0;f<=r;f++)if(0===a||0===f)i[a][f]=0;else if(e[a-1]===t[f-1])i[a][f]=i[a-1][f-1]+1;else{var l=i[a-1][f],s=i[a][f-1];i[a][f]=l>s?l:s}return i[n][r]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.knapSack=function(e,t,n){for(var r=n.length,i=0,o=0,u=0;ut)return e(t,n,r,i-1);var o=r[i-1]+e(t-n[i-1],n,r,i-1),u=e(t,n,r,i-1);return o>u?o:u}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.knapSack=function(e,t,n,r){for(var i=[],o=0;o<=r;o++)i[o]=[];for(var u=0;u<=r;u++)for(var a=0;a<=e;a++)if(0===u||0===a)i[u][a]=0;else if(t[u-1]<=a){var f=n[u-1]+i[u-1][a-t[u-1]],l=i[u-1][a];i[u][a]=f>l?f:l}else i[u][a]=i[u-1][a];return function(e,t,n){for(var r=e,i=t;r>0&&i>0;)n[r][i]!==n[r-1][i]?i-=n[--r][i]:r--}(r,e,i),i[r][e]}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){for(var n=[],r=0,i=e.length;i>=0;i--)for(var o=e[i];r+o<=t;)n.push(o),r+=o;return n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.minCoinChange=function(e,t){var n=[];return function t(r){if(!r)return[];if(n[r])return n[r];for(var i=[],o=void 0,u=void 0,a=0;a=0&&(o=t(u)),u>=0&&(o.length2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e).length-1;return function e(n,r,i,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultCompare;if(i<=o){var a=Math.floor((i+o)/2),f=n[a];return u(f,r)===t.Compare.LESS_THAN?e(n,r,a+1,o,u):u(f,r)===t.Compare.BIGGER_THAN?e(n,r,i,a-1,u):a}return t.DOES_NOT_EXIST}(e,r,0,o,i)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sequentialSearch=function(e,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultEquals,i=0;i2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.defaultEquals,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.defaultDiff,u=0,a=e.length-1,f=-1,l=-1;u<=a&&(0,t.biggerEquals)(n,e[u],r)&&(0,t.lesserEquals)(n,e[a],r);){if(l=o(n,e[u])/o(e[a],e[u]),f=u+Math.floor((a-u)*l),i(e[f],n))return f;r(e[f],n)===t.Compare.LESS_THAN?u=f+1:a=f-1}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0),n(4)],void 0===(o="function"==typeof(r=function(e,t,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.binarySearch=function(e,r){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.defaultCompare,o=(0,n.quickSort)(e),u=0,a=o.length-1;u<=a;){var f=Math.floor((u+a)/2),l=o[f];if(i(l,r)===t.Compare.LESS_THAN)u=f+1;else{if(i(l,r)!==t.Compare.BIGGER_THAN)return f;a=f-1}}return t.DOES_NOT_EXIST}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shellSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length/2;r>0;){for(var i=r;i=r&&n(e[o-r],u)===t.Compare.BIGGER_THAN;)e[o]=e[o-r],o-=r;e[o]=u}r=2===r?1:Math.floor(5*r/11)}return e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.selectionSort=void 0,e.selectionSort=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=void 0,o=0;o1&&void 0!==arguments[1]?arguments[1]:10;if(e.length<2)return e;for(var i=(0,t.findMinValue)(e),o=(0,t.findMaxValue)(e),u=1;(o-i)/u>=1;)e=r(e,n,u,i),u*=n;return e};var n=function(e,t,n,r){return Math.floor((e-t)/n%r)},r=function(e,t,r,i){for(var o=void 0,u=[],a=[],f=0;f=0;c--)o=n(e[c],i,r,t),a[--u[o]]=e[c];for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare;if(n.length>1){var i=n,o=i.length,u=Math.floor(o/2),a=e(n.slice(0,u),r),f=e(n.slice(u,o),r);n=function(e,n,r){for(var i=0,o=0,u=[];i0;)e[r++]=n,t--}),e}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(8)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:5;return e.length<2?e:function(e){for(var r=[],i=0;ir&&(r=e[i]);for(var o=Math.floor((r-n)/t)+1,u=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:t.defaultCompare,r=e.length,i=0;i0&&void 0!==arguments[0]&&arguments[0];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.isDirected=t,this.vertices=[],this.adjList=new i.default}return o(e,[{key:"addVertex",value:function(e){this.vertices.includes(e)||(this.vertices.push(e),this.adjList.set(e,[]))}},{key:"addEdge",value:function(e,t){this.adjList.get(e)||this.addVertex(e),this.adjList.get(t)||this.addVertex(t),this.adjList.get(e).push(t),!0!==this.isDirected&&this.adjList.get(t).push(e)}},{key:"getVertices",value:function(){return this.vertices}},{key:"getAdjList",value:function(){return this.adjList}},{key:"toString",value:function(){for(var e="",t=0;t ";for(var n=this.adjList.get(this.vertices[t]),r=0;r0&&(u=a),f0&&(u=f),u!==t&&((0,n.swap)(e,t,u),r(e,u,i,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare,i=e.length;for(!function(e,t){for(var n=Math.floor(e.length/2);n>=0;n-=1)r(e,n,e.length,t)}(e,t);i>1;)(0,n.swap)(e,0,--i),r(e,0,i,t);return e},e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(0)],void 0===(o="function"==typeof(r=function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.MaxHeap=e.MinHeap=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,e),this.compareFn=r,this.heap=[]}return r(e,[{key:"getLeftIndex",value:function(e){return 2*e+1}},{key:"getRightIndex",value:function(e){return 2*e+2}},{key:"getParentIndex",value:function(e){if(0!==e)return Math.floor((e-1)/2)}},{key:"size",value:function(){return this.heap.length}},{key:"isEmpty",value:function(){return this.size()<=0}},{key:"clear",value:function(){this.heap=[]}},{key:"findMinimum",value:function(){return this.isEmpty()?void 0:this.heap[0]}},{key:"insert",value:function(e){if(null!=e){var t=this.heap.length;return this.heap.push(e),this.siftUp(t),!0}return!1}},{key:"siftDown",value:function(e){var n=e,r=this.getLeftIndex(e),i=this.getRightIndex(e),o=this.size();r0&&this.compareFn(this.heap[n],this.heap[e])===t.Compare.BIGGER_THAN;)(0,t.swap)(this.heap,n,e),e=n,n=this.getParentIndex(e)}},{key:"extract",value:function(){if(!this.isEmpty()){if(1===this.size())return this.heap.shift();var e=this.heap[0];return this.heap[0]=this.heap.pop(),this.siftDown(0),e}}},{key:"heapify",value:function(e){e&&(this.heap=e);for(var t=Math.floor(this.size()/2)-1,n=0;n<=t;n++)this.siftDown(n);return this.heap}},{key:"getAsArray",value:function(){return this.heap}}]),e}();e.MaxHeap=function(e){function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCompare;n(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return i.compareFn=e,i.compareFn=(0,t.reverseCompare)(e),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),r}(i)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(10),n(9)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.compareFn=e,r.root=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"getNodeHeight",value:function(e){return null==e?-1:Math.max(this.getNodeHeight(e.left),this.getNodeHeight(e.right))+1}},{key:"rotationLL",value:function(e){var t=e.left;return e.left=t.right,t.right=e,t}},{key:"rotationRR",value:function(e){var t=e.right;return e.right=t.left,t.left=e,t}},{key:"rotationLR",value:function(e){return e.left=this.rotationRR(e.left),this.rotationLL(e)}},{key:"rotationRL",value:function(e){return e.right=this.rotationLL(e.right),this.rotationRR(e)}},{key:"getBalanceFactor",value:function(e){var t=this.getNodeHeight(e.left)-this.getNodeHeight(e.right);switch(t){case-2:return f.UNBALANCED_RIGHT;case-1:return f.SLIGHTLY_UNBALANCED_RIGHT;case 1:return f.SLIGHTLY_UNBALANCED_LEFT;case 2:return f.UNBALANCED_LEFT;default:return f.BALANCED}}},{key:"insert",value:function(e){this.root=this.insertNode(this.root,e)}},{key:"insertNode",value:function(e,t){if(null==e)return new i.Node(t);if(this.compareFn(t,e.key)===n.Compare.LESS_THAN)e.left=this.insertNode(e.left,t);else{if(this.compareFn(t,e.key)!==n.Compare.BIGGER_THAN)return e;e.right=this.insertNode(e.right,t)}var r=this.getBalanceFactor(e);if(r===f.UNBALANCED_LEFT){if(this.compareFn(t,e.left.key)!==n.Compare.LESS_THAN)return this.rotationLR(e);e=this.rotationLL(e)}if(r===f.UNBALANCED_RIGHT){if(this.compareFn(t,e.right.key)!==n.Compare.BIGGER_THAN)return this.rotationRL(e);e=this.rotationRR(e)}return e}},{key:"removeNode",value:function(e,n){if(null==(e=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var u=i.get;return void 0!==u?u.call(r):void 0}(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"removeNode",this).call(this,e,n)))return e;var r=this.getBalanceFactor(e);if(r===f.UNBALANCED_LEFT){if(this.getBalanceFactor(e.left)===f.BALANCED||this.getBalanceFactor(e.left)===f.SLIGHTLY_UNBALANCED_LEFT)return this.rotationLL(e);if(this.getBalanceFactor(e.left)===f.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationLR(e.left)}if(r===f.UNBALANCED_RIGHT){if(this.getBalanceFactor(e.right)===f.BALANCED||this.getBalanceFactor(e.right)===f.SLIGHTLY_UNBALANCED_RIGHT)return this.rotationRR(e);if(this.getBalanceFactor(e.right)===f.SLIGHTLY_UNBALANCED_LEFT)return this.rotationRL(e.right)}return e}}]),t}(u.default);t.default=l,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fibonacci=function e(t){return t<1?0:t<=2?1:e(t-1)+e(t-2)},e.fibonacciIterative=function(e){if(e<1)return 0;for(var t=0,n=1,r=e,i=2;i<=e;i++)r=n+t,t=n,n=r;return r},e.fibonacciMemoization=function(e){if(e<1)return 0;var t=[0,1];return function e(n){return null!=t[n]?t[n]:t[n]=e(n-1)+e(n-2)}(e)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t],void 0===(o="function"==typeof(r=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.factorialIterative=function(e){if(!(e<0)){for(var t=1,n=e;n>1;n--)t*=n;return t}},e.factorial=function e(t){if(!(t<0))return 1===t||0===t?1:t*e(t-1)}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(1)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ValuePairLazy=void 0,e.ValuePairLazy=function(e){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return i.key=e,i.value=n,i.isDeleted=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(t.ValuePair)})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(51)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(2),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,u=(o=r)&&o.__esModule?o:{default:o},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return a(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=f,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t,n(0),n(1)],void 0===(o="function"==typeof(r=function(e,t,n,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.defaultToString;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.toStrFn=t,this.table={}}return i(e,[{key:"loseloseHashCode",value:function(e){if("number"==typeof e)return e;for(var t=this.toStrFn(e),n=0,r=0;r "+this.table[e[0]].toString()+"}",n=1;n "+this.table[e[n]].toString()+"}";return t}}]),e}();t.default=o,e.exports=t.default})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n0&&(o=i,u=r),u.forEach(function(e){o.includes(e)&&n.add(e)}),n}},{key:"difference",value:function(t){var n=new e;return this.values().forEach(function(e){t.has(e)||n.add(e)}),n}},{key:"isSubsetOf",value:function(e){if(this.size()>e.size())return!1;var t=!0;return this.values().every(function(n){return!!e.has(n)||(t=!1,!1)}),t}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"size",value:function(){return Object.keys(this.items).length}},{key:"clear",value:function(){this.items={}}},{key:"toString",value:function(){if(this.isEmpty())return"";for(var e=this.values(),t=""+e[0],n=1;n0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.defaultCompare;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return i.equalsFn=e,i.compareFn=r,i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),u(t,[{key:"push",value:function(e){if(this.isEmpty())a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"push",this).call(this,e);else{var n=this.getIndexNextSortedElement(e);a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,n)}}},{key:"insert",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.isEmpty())return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,0===n?n:0);var r=this.getIndexNextSortedElement(e);return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"insert",this).call(this,e,r)}},{key:"getIndexNextSortedElement",value:function(e){for(var t=this.head,r=0;r0&&void 0!==arguments[0]?arguments[0]:n.defaultEquals;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"push",value:function(e){var t=new i.Node(e);null==this.head?this.head=t:this.getElementAt(this.size()-1).next=t,t.next=this.head,this.count++}},{key:"insert",value:function(e,t){if(t>=0&&t<=this.count){var n=new i.Node(e),r=this.head;if(0===t)null==this.head?(this.head=n,n.next=this.head):(n.next=r,r=this.getElementAt(this.size()),this.head=n,r.next=this.head);else{var o=this.getElementAt(t-1);n.next=o.next,o.next=n}return this.count++,!0}return!1}},{key:"removeAt",value:function(e){if(e>=0&&e1;)if(i=t.removeFront(),o=t.removeBack(),i!==o)return!1;return!0};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(7)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hotPotato=function(e,t){for(var n=new r.default,i=[],o=0;o1;){for(var u=0;u=0?t.push(o):t.isEmpty()?n=!1:(u=t.pop(),"([{".indexOf(u)!==")]}".indexOf(o)&&(n=!1)),i++;return n&&t.isEmpty()};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decimalToBinary=function(e){for(var t=new r.default,n=e,i=void 0,o="";n>0;)i=Math.floor(n%2),t.push(i),n=Math.floor(n/2);for(;!t.isEmpty();)o+=t.pop().toString();return o},e.baseConverter=function(e,t){var n=new r.default,i=e,o=void 0,u="";if(!(t>=2&&t<=36))return"";for(;i>0;)o=Math.floor(i%t),n.push(o),i=Math.floor(i/t);for(;!n.isEmpty();)u+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n.pop()];return u};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[t,n(3)],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hanoiStack=function(e){for(var t=new r.default,n=new r.default,i=new r.default,o=e;o>0;o--)t.push(o);return function e(t,n,r,i,o,u,a){var f=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[];if(t<=0)return f;if(1===t){i.push(n.pop());var l={};l[o]=n.toString(),l[u]=r.toString(),l[a]=i.toString(),f.push(l)}else{e(t-1,n,i,r,o,a,u,f),i.push(n.pop());var s={};s[o]=n.toString(),s[u]=r.toString(),s[a]=i.toString(),f.push(s),e(t-1,r,n,i,u,o,a,f)}return f}(e,t,i,n,"source","helper","dest")},e.hanoi=function e(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];return t<=0?o:(1===t?o.push([n,i]):(e(t-1,n,i,r,o),o.push([n,i]),e(t-1,r,n,i,o)),o)};var n,r=(n=t)&&n.__esModule?n:{default:n}})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){var r,i,o;i=[e,t],void 0===(o="function"==typeof(r=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n }\n if (i <= j) {\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = undefined;\n this.right = undefined;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = undefined;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return undefined;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = undefined;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","const UNASSIGNED = 0;\n\nfunction usedInRow(matrix, row, num) {\n for (let col = 0; col < matrix.length; col++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInCol(matrix, col, num) {\n for (let row = 0; row < matrix.length; row++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInBox(matrix, boxStartRow, boxStartCol, num) {\n for (let row = 0; row < 3; row++) {\n for (let col = 0; col < 3; col++) {\n if (matrix[row + boxStartRow][col + boxStartCol] === num) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isSafe(matrix, row, col, num) {\n return (\n !usedInRow(matrix, row, num) &&\n !usedInCol(matrix, col, num) &&\n !usedInBox(matrix, row - (row % 3), col - (col % 3), num)\n );\n}\nfunction solveSudoku(matrix) {\n let row = 0;\n let col = 0;\n let checkBlankSpaces = false;\n\n for (row = 0; row < matrix.length; row++) {\n for (col = 0; col < matrix[row].length; col++) {\n if (matrix[row][col] === UNASSIGNED) {\n checkBlankSpaces = true;\n break;\n }\n }\n if (checkBlankSpaces === true) {\n break;\n }\n }\n if (checkBlankSpaces === false) {\n return true;\n }\n\n for (let num = 1; num <= 9; num++) {\n if (isSafe(matrix, row, col, num)) {\n matrix[row][col] = num;\n if (solveSudoku(matrix)) {\n return true;\n }\n matrix[row][col] = UNASSIGNED;\n }\n }\n return false;\n}\n\nexport function sudokuSolver(matrix) {\n if (solveSudoku(matrix) === true) {\n return matrix;\n }\n return 'NO SOLUTION EXISTS!';\n}\n","function isSafe(maze, x, y) {\n const n = maze.length;\n if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {\n return true;\n }\n return false;\n}\n\nfunction findPath(maze, x, y, solution) {\n const n = maze.length;\n if (x === n - 1 && y === n - 1) {\n solution[x][y] = 1;\n return true;\n }\n if (isSafe(maze, x, y) === true) {\n solution[x][y] = 1;\n if (findPath(maze, x + 1, y, solution)) {\n return true;\n }\n if (findPath(maze, x, y + 1, solution)) {\n return true;\n }\n solution[x][y] = 0;\n return false;\n }\n return false;\n}\n\nexport function ratInAMaze(maze) {\n const solution = [];\n for (let i = 0; i < maze.length; i++) {\n solution[i] = [];\n for (let j = 0; j < maze[i].length; j++) {\n solution[i][j] = 0;\n }\n }\n if (findPath(maze, 0, 0, solution) === true) {\n return solution;\n }\n return 'NO PATH FOUND';\n}\n","export function lcs(wordX, wordY, m = wordX.length, n = wordY.length) {\n if (m === 0 || n === 0) {\n return 0;\n }\n if (wordX[m - 1] === wordY[n - 1]) {\n return 1 + lcs(wordX, wordY, m - 1, n - 1);\n }\n const a = lcs(wordX, wordY, m, n - 1);\n const b = lcs(wordX, wordY, m - 1, n);\n return a > b ? a : b;\n}\n","function printSolution(solution, wordX, m, n) {\n let a = m;\n let b = n;\n let x = solution[a][b];\n let answer = '';\n while (x !== '0') {\n if (solution[a][b] === 'diagonal') {\n answer = wordX[a - 1] + answer;\n a--;\n b--;\n } else if (solution[a][b] === 'left') {\n b--;\n } else if (solution[a][b] === 'top') {\n a--;\n }\n x = solution[a][b];\n }\n // console.log('lcs: ' + answer);\n}\nexport function lcs(wordX, wordY) {\n const m = wordX.length;\n const n = wordY.length;\n const l = [];\n const solution = [];\n for (let i = 0; i <= m; i++) {\n l[i] = [];\n solution[i] = [];\n for (let j = 0; j <= n; j++) {\n l[i][j] = 0;\n solution[i][j] = '0';\n }\n }\n for (let i = 0; i <= m; i++) {\n for (let j = 0; j <= n; j++) {\n if (i === 0 || j === 0) {\n l[i][j] = 0;\n } else if (wordX[i - 1] === wordY[j - 1]) {\n l[i][j] = l[i - 1][j - 1] + 1;\n solution[i][j] = 'diagonal';\n } else {\n const a = l[i - 1][j];\n const b = l[i][j - 1];\n l[i][j] = a > b ? a : b; // max(a,b)\n solution[i][j] = l[i][j] === l[i - 1][j] ? 'top' : 'left';\n }\n }\n // console.log(l[i].join());\n // console.log(solution[i].join());\n }\n printSolution(solution, wordX, m, n);\n return l[m][n];\n}\n","export function lcs(wordX, wordY) {\n const m = wordX.length;\n const n = wordY.length;\n const l = [];\n for (let i = 0; i <= m; i++) {\n l[i] = [];\n for (let j = 0; j <= n; j++) {\n l[i][j] = 0;\n }\n }\n for (let i = 0; i <= m; i++) {\n for (let j = 0; j <= n; j++) {\n if (i === 0 || j === 0) {\n l[i][j] = 0;\n } else if (wordX[i - 1] === wordY[j - 1]) {\n l[i][j] = l[i - 1][j - 1] + 1;\n } else {\n const a = l[i - 1][j];\n const b = l[i][j - 1];\n l[i][j] = a > b ? a : b; // max(a,b)\n }\n }\n // console.log(l[i].join());\n }\n return l[m][n];\n}\n","export function knapSack(capacity, weights, values) {\n const n = values.length;\n let load = 0;\n let val = 0;\n for (let i = 0; i < n && load < capacity; i++) {\n if (weights[i] <= capacity - load) {\n val += values[i];\n load += weights[i];\n // console.log('using item ' + (i + 1) + ' for the solution');\n } else {\n const r = (capacity - load) / weights[i];\n val += r * values[i];\n load += weights[i];\n // console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution');\n }\n }\n return val;\n}\n","export function knapSack(capacity, weights, values, n) {\n if (n === 0 || capacity === 0) {\n return 0;\n }\n if (weights[n - 1] > capacity) {\n return knapSack(capacity, weights, values, n - 1);\n }\n const a = values[n - 1] + knapSack(capacity - weights[n - 1], weights, values, n - 1);\n const b = knapSack(capacity, weights, values, n - 1);\n return a > b ? a : b;\n}\n","function findValues(n, capacity, kS) {\n let i = n;\n let k = capacity;\n // console.log('Items that are part of the solution:');\n while (i > 0 && k > 0) {\n if (kS[i][k] !== kS[i - 1][k]) {\n // console.log(\n // item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1]\n // );\n i--;\n k -= kS[i][k];\n } else {\n i--;\n }\n }\n}\n\nexport function knapSack(capacity, weights, values, n) {\n const kS = [];\n for (let i = 0; i <= n; i++) {\n kS[i] = [];\n }\n for (let i = 0; i <= n; i++) {\n for (let w = 0; w <= capacity; w++) {\n if (i === 0 || w === 0) {\n kS[i][w] = 0;\n } else if (weights[i - 1] <= w) {\n const a = values[i - 1] + kS[i - 1][w - weights[i - 1]];\n const b = kS[i - 1][w];\n kS[i][w] = a > b ? a : b; // max(a,b)\n // console.log(a + ' can be part of the solution');\n } else {\n kS[i][w] = kS[i - 1][w];\n }\n }\n // console.log(kS[i].join());\n }\n // extra algorithm to find the items that are part of the solution\n findValues(n, capacity, kS);\n return kS[n][capacity];\n}\n","export function minCoinChange(coins, amount) {\n const change = [];\n let total = 0;\n for (let i = coins.length; i >= 0; i--) {\n const coin = coins[i];\n while (total + coin <= amount) {\n change.push(coin);\n total += coin;\n }\n }\n return change;\n}\n","export function minCoinChange(coins, amount) {\n const cache = [];\n\n const makeChange = (value) => {\n if (!value) {\n return [];\n }\n if (cache[value]) {\n return cache[value];\n }\n let min = [];\n let newMin;\n let newAmount;\n for (let i = 0; i < coins.length; i++) {\n const coin = coins[i];\n newAmount = value - coin;\n if (newAmount >= 0) {\n newMin = makeChange(newAmount);\n }\n if (\n newAmount >= 0 &&\n (newMin.length < min.length - 1 || !min.length) &&\n (newMin.length || !newAmount)\n ) {\n min = [coin].concat(newMin);\n // console.log('new Min ' + min + ' for ' + amount);\n }\n }\n return (cache[value] = min);\n };\n return makeChange(amount);\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nfunction binarySearchRecursive(array, value, low, high, compareFn = defaultCompare) {\n if (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = array[mid];\n if (compareFn(element, value) === Compare.LESS_THAN) {\n return binarySearchRecursive(array, value, mid + 1, high, compareFn);\n }\n if (compareFn(element, value) === Compare.BIGGER_THAN) {\n return binarySearchRecursive(array, value, low, mid - 1, compareFn);\n }\n return mid;\n }\n return DOES_NOT_EXIST;\n}\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n const low = 0;\n const high = sortedArray.length - 1;\n return binarySearchRecursive(array, value, low, high, compareFn);\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n return false;\n }\n }\n\n return true;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols[index];\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n return balanced && stack.isEmpty();\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { hotPotato } from './others/hot-potato';\nexport { palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n\n// chapter 14\nexport { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive';\nexport { minCoinChange } from './algorithms/dynamic-programing/min-coin-change';\nexport { minCoinChange as minCoinChangeGreedy } from './algorithms/greedy/min-coin-change';\nexport { knapSack } from './algorithms/dynamic-programing/knapsack';\nexport { knapSack as knapSackRecursive } from './algorithms/dynamic-programing/knapsack-recursive';\nexport { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack';\nexport { lcs } from './algorithms/dynamic-programing/longest-common-subsequence';\nexport { lcs as lcsPrint } from './algorithms/dynamic-programing/longest-common-subsequence-print';\nexport { lcs as lcsRecursive } from './algorithms/greedy/longest-common-subsequence';\nexport { ratInAMaze } from './algorithms/backtracking/rat-in-maze';\nexport { sudokuSolver } from './algorithms/backtracking/sudoku-solver';\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://PacktDataStructuresAlgorithms/webpack/universalModuleDefinition","webpack://PacktDataStructuresAlgorithms/webpack/bootstrap","webpack://PacktDataStructuresAlgorithms/./src/js/util.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/quicksort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/min-max-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/linked-list-models.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/queue.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/insertion-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/node.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/binary-search-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/dictionary.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/doubly-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/deque.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/floyd-warshall.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/sudoku-solver.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/rat-in-maze.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/matrix-chain-multiplication.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/matrix-chain-multiplication.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/longest-common-subsequence.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/longest-common-subsequence-print.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/longest-common-subsequence.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/knapsack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/knapsack-recursive.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/knapsack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search-recursive.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/sequential-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/interpolation-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/shell-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/selection-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/radix-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/merge-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/counting-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bucket-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort-improved.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/shuffle/fisher–yates.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/kruskal.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/prim.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/dijkstra.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/depth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/breadth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/graph.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/heap-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/heap.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/avl-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/fibonacci.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/factorial.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-separate-chaining.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/set.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/sorted-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/circular-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/palindrome-checker.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hot-potato.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/balanced-symbols.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/base-converter.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hanoi.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-array.js","webpack://PacktDataStructuresAlgorithms/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","lesserEquals","a","b","compareFn","comp","Compare","LESS_THAN","EQUALS","biggerEquals","BIGGER_THAN","defaultCompare","defaultEquals","defaultToString","item","undefined","String","toString","swap","array","_ref","reverseCompare","defaultDiff","Number","DOES_NOT_EXIST","ValuePair","key","_classCallCheck","this","LinkedList","equalsFn","arguments","length","_util","count","head","element","node","_linkedListModels","Node","current","next","index","previous","getElementAt","indexOf","removeAt","size","objString","Stack","items","isEmpty","result","quick","left","right","pivot","Math","floor","j","partition","quickSort","findMaxValue","max","findMinValue","min","DoublyNode","prev","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","Queue","lowestCount","insertionSort","temp","BinarySearchTree","_node","insertNode","searchNode","callback","inOrderTraverseNode","preOrderTraverseNode","postOrderTraverseNode","minNode","maxNode","removeNode","aux","Dictionary","toStrFn","table","tableKey","_valuePair","valuePair","hasKey","keyValues","map","values","callbackFn","valuePairs","keys","DoublyLinkedList","tail","_get","Deque","addBack","floydWarshall","graph","dist","isFinite","Infinity","k","sudokuSolver","matrix","solveSudoku","row","col","checkBlankSpaces","UNASSIGNED","num","isSafe","usedInRow","usedInCol","boxStartRow","boxStartCol","usedInBox","ratInAMaze","maze","solution","findPath","x","y","matrixChainOrder","MAX_SAFE_INTEGER","q","printOptimalParenthesis","lcs","wordX","wordY","answer","printSolution","knapSack","capacity","weights","load","val","kS","w","findValues","minCoinChange","coins","amount","change","total","coin","push","cache","makeChange","newMin","newAmount","concat","binarySearch","high","_quicksort","binarySearchRecursive","low","mid","sequentialSearch","interpolationSearch","diffFn","position","delta","sortedArray","shellSort","increment","selectionSort","indexMin","radixSort","radixBase","minValue","_minMaxSearch","maxValue","significantDigit","countingSortForRadix","getBucketIndex","bucketsIndex","buckets","mergeSort","_array","middle","slice","merge","countingSort","sortedIndex","counts","Array","forEach","bucketSort","bucketSize","_insertionSort","apply","_toConsumableArray","sortBuckets","bucketCount","createBuckets","modifiedBubbleSort","bubbleSort","shuffle","currentIndex","randomIndex","random","INF","find","parent","union","kruskal","ne","u","v","cost","initializeCost","minKey","visited","minIndex","prim","minDistance","dijkstra","src","Colors","WHITE","GREY","BLACK","initializeColor","vertices","color","depthFirstSearchVisit","adjList","neighbors","DFSVisit","depthFirstSearch","getVertices","getAdjList","f","time","DFS","discovery","finished","predecessors","breadthFirstSearch","startVertex","queue","_queue2","default","enqueue","dequeue","BFS","distances","Graph","isDirected","_dictionary2","includes","set","addVertex","heapify","heapSize","largest","buildMaxHeap","MinHeap","heap","siftUp","getLeftIndex","getRightIndex","siftDown","getParentIndex","shift","removedValue","pop","maxIndex","MaxHeap","BalanceFactor","UNBALANCED_RIGHT","SLIGHTLY_UNBALANCED_RIGHT","BALANCED","SLIGHTLY_UNBALANCED_LEFT","UNBALANCED_LEFT","AVLTree","getNodeHeight","tmp","rotationRR","rotationLL","heightDifference","balanceFactor","getBalanceFactor","rotationLR","rotationRL","fibonacci","fibonacciIterative","fibNMinus2","fibNMinus1","fibN","fibonacciMemoization","memo","fibonacciMem","factorialIterative","number","factorial","ValuePairLazy","isDeleted","HashTableLinearProbingLazy","hash","charCodeAt","loseloseHashCode","hashCode","_valuePairLazy","HashTableLinearProbing","verifyRemoveSideEffect","removedPosition","posHash","HashTableSeparateChaining","_linkedList2","linkedList","getHead","remove","HashTable","Set","has","otherSet","unionSet","add","intersectionSet","otherValues","biggerSet","smallerSet","differenceSet","isSubset","every","StackLinkedList","_doublyLinkedList2","clear","SortedLinkedList","getIndexNextSortedElement","pos","CircularLinkedList","removed","palindromeChecker","aString","deque","_deque2","lowerString","toLocaleLowerCase","split","join","firstChar","lastChar","charAt","removeFront","removeBack","hotPotato","elementsList","elimitatedList","eliminated","winner","parenthesesChecker","symbols","stack","_stack2","balanced","symbol","top","decimalToBinary","decNumber","remStack","rem","binaryString","baseConverter","base","baseString","hanoiStack","plates","source","dest","helper","towerOfHanoi","sourceName","helperName","destName","moves","move","hanoi","StackArray","util"],"mappings":"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","file":"PacktDataStructuresAlgorithms.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"PacktDataStructuresAlgorithms\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PacktDataStructuresAlgorithms\"] = factory();\n\telse\n\t\troot[\"PacktDataStructuresAlgorithms\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 66);\n","export const Compare = {\n LESS_THAN: -1,\n BIGGER_THAN: 1,\n EQUALS: 0\n};\n\nexport const DOES_NOT_EXIST = -1;\n\nexport function lesserEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.LESS_THAN || comp === Compare.EQUALS;\n}\n\nexport function biggerEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS;\n}\n\nexport function defaultCompare(a, b) {\n if (a === b) {\n return Compare.EQUALS;\n }\n return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN;\n}\n\nexport function defaultEquals(a, b) {\n return a === b;\n}\n\nexport function defaultToString(item) {\n if (item === null) {\n return 'NULL';\n } else if (item === undefined) {\n return 'UNDEFINED';\n } else if (typeof item === 'string' || item instanceof String) {\n return `${item}`;\n }\n return item.toString();\n}\n\nexport function swap(array, a, b) {\n /* const temp = array[a];\n array[a] = array[b];\n array[b] = temp; */\n [array[a], array[b]] = [array[b], array[a]];\n}\nexport function reverseCompare(compareFn) {\n return (a, b) => compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n }\n if (i <= j) {\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = undefined;\n this.right = undefined;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = undefined;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return undefined;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = undefined;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const UNASSIGNED = 0;\n\nfunction usedInRow(matrix, row, num) {\n for (let col = 0; col < matrix.length; col++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInCol(matrix, col, num) {\n for (let row = 0; row < matrix.length; row++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInBox(matrix, boxStartRow, boxStartCol, num) {\n for (let row = 0; row < 3; row++) {\n for (let col = 0; col < 3; col++) {\n if (matrix[row + boxStartRow][col + boxStartCol] === num) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isSafe(matrix, row, col, num) {\n return (\n !usedInRow(matrix, row, num) &&\n !usedInCol(matrix, col, num) &&\n !usedInBox(matrix, row - (row % 3), col - (col % 3), num)\n );\n}\nfunction solveSudoku(matrix) {\n let row = 0;\n let col = 0;\n let checkBlankSpaces = false;\n\n for (row = 0; row < matrix.length; row++) {\n for (col = 0; col < matrix[row].length; col++) {\n if (matrix[row][col] === UNASSIGNED) {\n checkBlankSpaces = true;\n break;\n }\n }\n if (checkBlankSpaces === true) {\n break;\n }\n }\n if (checkBlankSpaces === false) {\n return true;\n }\n\n for (let num = 1; num <= 9; num++) {\n if (isSafe(matrix, row, col, num)) {\n matrix[row][col] = num;\n if (solveSudoku(matrix)) {\n return true;\n }\n matrix[row][col] = UNASSIGNED;\n }\n }\n return false;\n}\n\nexport function sudokuSolver(matrix) {\n if (solveSudoku(matrix) === true) {\n return matrix;\n }\n return 'NO SOLUTION EXISTS!';\n}\n","function isSafe(maze, x, y) {\n const n = maze.length;\n if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {\n return true;\n }\n return false;\n}\n\nfunction findPath(maze, x, y, solution) {\n const n = maze.length;\n if (x === n - 1 && y === n - 1) {\n solution[x][y] = 1;\n return true;\n }\n if (isSafe(maze, x, y) === true) {\n solution[x][y] = 1;\n if (findPath(maze, x + 1, y, solution)) {\n return true;\n }\n if (findPath(maze, x, y + 1, solution)) {\n return true;\n }\n solution[x][y] = 0;\n return false;\n }\n return false;\n}\n\nexport function ratInAMaze(maze) {\n const solution = [];\n for (let i = 0; i < maze.length; i++) {\n solution[i] = [];\n for (let j = 0; j < maze[i].length; j++) {\n solution[i][j] = 0;\n }\n }\n if (findPath(maze, 0, 0, solution) === true) {\n return solution;\n }\n return 'NO PATH FOUND';\n}\n","export function matrixChainOrder(p, i = 1, j = p.length - 1) {\n if (i === j) {\n return 0;\n }\n let min = Number.MAX_SAFE_INTEGER;\n for (let k = i; k < j; k++) {\n const count =\n matrixChainOrder(p, i, k) + matrixChainOrder(p, k + 1, j) + ((p[i - 1] * p[k]) * p[j]);\n if (count < min) {\n min = count;\n }\n }\n return min;\n}\n","function printOptimalParenthesis(s, i, j) {\n if (i === j) {\n // console.log('A[' + i + ']');\n } else {\n // console.log('(');\n printOptimalParenthesis(s, i, s[i][j]);\n printOptimalParenthesis(s, s[i][j] + 1, j);\n // console.log(')');\n }\n}\n\nexport function matrixChainOrder(p) {\n const n = p.length;\n const m = [];\n const s = [];\n for (let i = 1; i <= n; i++) {\n m[i] = [];\n m[i][i] = 0;\n }\n for (let i = 0; i <= n; i++) {\n // to help printing the optimal solution\n s[i] = []; // auxiliary\n for (let j = 0; j <= n; j++) {\n s[i][j] = 0;\n }\n }\n for (let l = 2; l < n; l++) {\n for (let i = 1; i <= (n - l) + 1; i++) {\n const j = (i + l) - 1;\n m[i][j] = Number.MAX_SAFE_INTEGER;\n for (let k = i; k <= j - 1; k++) {\n // q = cost/scalar multiplications\n const q = m[i][k] + m[k + 1][j] + ((p[i - 1] * p[k]) * p[j]);\n if (q < m[i][j]) {\n m[i][j] = q;\n s[i][j] = k; // s[i,j] = Second auxiliary table that stores k\n }\n }\n }\n }\n // console.log(m);\n // console.log(s);\n printOptimalParenthesis(s, 1, n - 1);\n return m[1][n - 1];\n}\n\n","export function lcs(wordX, wordY, m = wordX.length, n = wordY.length) {\n if (m === 0 || n === 0) {\n return 0;\n }\n if (wordX[m - 1] === wordY[n - 1]) {\n return 1 + lcs(wordX, wordY, m - 1, n - 1);\n }\n const a = lcs(wordX, wordY, m, n - 1);\n const b = lcs(wordX, wordY, m - 1, n);\n return a > b ? a : b;\n}\n","function printSolution(solution, wordX, m, n) {\n let a = m;\n let b = n;\n let x = solution[a][b];\n let answer = '';\n while (x !== '0') {\n if (solution[a][b] === 'diagonal') {\n answer = wordX[a - 1] + answer;\n a--;\n b--;\n } else if (solution[a][b] === 'left') {\n b--;\n } else if (solution[a][b] === 'top') {\n a--;\n }\n x = solution[a][b];\n }\n return answer;\n}\nexport function lcs(wordX, wordY) {\n const m = wordX.length;\n const n = wordY.length;\n const l = [];\n const solution = [];\n for (let i = 0; i <= m; i++) {\n l[i] = [];\n solution[i] = [];\n for (let j = 0; j <= n; j++) {\n l[i][j] = 0;\n solution[i][j] = '0';\n }\n }\n for (let i = 0; i <= m; i++) {\n for (let j = 0; j <= n; j++) {\n if (i === 0 || j === 0) {\n l[i][j] = 0;\n } else if (wordX[i - 1] === wordY[j - 1]) {\n l[i][j] = l[i - 1][j - 1] + 1;\n solution[i][j] = 'diagonal';\n } else {\n const a = l[i - 1][j];\n const b = l[i][j - 1];\n l[i][j] = a > b ? a : b; // max(a,b)\n solution[i][j] = l[i][j] === l[i - 1][j] ? 'top' : 'left';\n }\n }\n // console.log(l[i].join());\n // console.log(solution[i].join());\n }\n return printSolution(solution, wordX, m, n);\n}\n","export function lcs(wordX, wordY) {\n const m = wordX.length;\n const n = wordY.length;\n const l = [];\n for (let i = 0; i <= m; i++) {\n l[i] = [];\n for (let j = 0; j <= n; j++) {\n l[i][j] = 0;\n }\n }\n for (let i = 0; i <= m; i++) {\n for (let j = 0; j <= n; j++) {\n if (i === 0 || j === 0) {\n l[i][j] = 0;\n } else if (wordX[i - 1] === wordY[j - 1]) {\n l[i][j] = l[i - 1][j - 1] + 1;\n } else {\n const a = l[i - 1][j];\n const b = l[i][j - 1];\n l[i][j] = a > b ? a : b; // max(a,b)\n }\n }\n // console.log(l[i].join());\n }\n return l[m][n];\n}\n","export function knapSack(capacity, weights, values) {\n const n = values.length;\n let load = 0;\n let val = 0;\n for (let i = 0; i < n && load < capacity; i++) {\n if (weights[i] <= capacity - load) {\n val += values[i];\n load += weights[i];\n // console.log('using item ' + (i + 1) + ' for the solution');\n } else {\n const r = (capacity - load) / weights[i];\n val += r * values[i];\n load += weights[i];\n // console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution');\n }\n }\n return val;\n}\n","export function knapSack(capacity, weights, values, n) {\n if (n === 0 || capacity === 0) {\n return 0;\n }\n if (weights[n - 1] > capacity) {\n return knapSack(capacity, weights, values, n - 1);\n }\n const a = values[n - 1] + knapSack(capacity - weights[n - 1], weights, values, n - 1);\n const b = knapSack(capacity, weights, values, n - 1);\n return a > b ? a : b;\n}\n","function findValues(n, capacity, kS) {\n let i = n;\n let k = capacity;\n // console.log('Items that are part of the solution:');\n while (i > 0 && k > 0) {\n if (kS[i][k] !== kS[i - 1][k]) {\n // console.log(\n // item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1]\n // );\n i--;\n k -= kS[i][k];\n } else {\n i--;\n }\n }\n}\n\nexport function knapSack(capacity, weights, values, n) {\n const kS = [];\n for (let i = 0; i <= n; i++) {\n kS[i] = [];\n }\n for (let i = 0; i <= n; i++) {\n for (let w = 0; w <= capacity; w++) {\n if (i === 0 || w === 0) {\n kS[i][w] = 0;\n } else if (weights[i - 1] <= w) {\n const a = values[i - 1] + kS[i - 1][w - weights[i - 1]];\n const b = kS[i - 1][w];\n kS[i][w] = a > b ? a : b; // max(a,b)\n // console.log(a + ' can be part of the solution');\n } else {\n kS[i][w] = kS[i - 1][w];\n }\n }\n // console.log(kS[i].join());\n }\n // extra algorithm to find the items that are part of the solution\n findValues(n, capacity, kS);\n return kS[n][capacity];\n}\n","export function minCoinChange(coins, amount) {\n const change = [];\n let total = 0;\n for (let i = coins.length; i >= 0; i--) {\n const coin = coins[i];\n while (total + coin <= amount) {\n change.push(coin);\n total += coin;\n }\n }\n return change;\n}\n","export function minCoinChange(coins, amount) {\n const cache = [];\n\n const makeChange = (value) => {\n if (!value) {\n return [];\n }\n if (cache[value]) {\n return cache[value];\n }\n let min = [];\n let newMin;\n let newAmount;\n for (let i = 0; i < coins.length; i++) {\n const coin = coins[i];\n newAmount = value - coin;\n if (newAmount >= 0) {\n newMin = makeChange(newAmount);\n }\n if (\n newAmount >= 0 &&\n (newMin.length < min.length - 1 || !min.length) &&\n (newMin.length || !newAmount)\n ) {\n min = [coin].concat(newMin);\n // console.log('new Min ' + min + ' for ' + amount);\n }\n }\n return (cache[value] = min);\n };\n return makeChange(amount);\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nfunction binarySearchRecursive(array, value, low, high, compareFn = defaultCompare) {\n if (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = array[mid];\n if (compareFn(element, value) === Compare.LESS_THAN) {\n return binarySearchRecursive(array, value, mid + 1, high, compareFn);\n }\n if (compareFn(element, value) === Compare.BIGGER_THAN) {\n return binarySearchRecursive(array, value, low, mid - 1, compareFn);\n }\n return mid;\n }\n return DOES_NOT_EXIST;\n}\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n const low = 0;\n const high = sortedArray.length - 1;\n return binarySearchRecursive(array, value, low, high, compareFn);\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n return false;\n }\n }\n\n return true;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols[index];\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n return balanced && stack.isEmpty();\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { hotPotato } from './others/hot-potato';\nexport { palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n\n// chapter 14\nexport { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive';\nexport { minCoinChange } from './algorithms/dynamic-programing/min-coin-change';\nexport { minCoinChange as minCoinChangeGreedy } from './algorithms/greedy/min-coin-change';\nexport { knapSack } from './algorithms/dynamic-programing/knapsack';\nexport { knapSack as knapSackRecursive } from './algorithms/dynamic-programing/knapsack-recursive';\nexport { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack';\nexport { lcs } from './algorithms/dynamic-programing/longest-common-subsequence';\nexport { lcs as lcsPrint } from './algorithms/dynamic-programing/longest-common-subsequence-print';\nexport { lcs as lcsRecursive } from './algorithms/greedy/longest-common-subsequence';\nexport { matrixChainOrder } from './algorithms/dynamic-programing/matrix-chain-multiplication';\nexport { matrixChainOrder as matrixChainOrderGreedy } from './algorithms/greedy/matrix-chain-multiplication';\nexport { ratInAMaze } from './algorithms/backtracking/rat-in-maze';\nexport { sudokuSolver } from './algorithms/backtracking/sudoku-solver';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/chapter14/07-LongestCommonSubsequenceDP.js b/examples/chapter14/07-LongestCommonSubsequenceDP.js index e69de29b..75e86015 100644 --- a/examples/chapter14/07-LongestCommonSubsequenceDP.js +++ b/examples/chapter14/07-LongestCommonSubsequenceDP.js @@ -0,0 +1,8 @@ +const { lcs } = PacktDataStructuresAlgorithms; +const { lcsPrint } = PacktDataStructuresAlgorithms; + +const wordX = 'acbaed'; +const wordY = 'abcadf'; + +console.log('lcs', lcs(wordX, wordY)); +console.log('lcsPrint', lcsPrint(wordX, wordY)); diff --git a/examples/chapter14/08-LongestCommonSubsequenceRecursive.js b/examples/chapter14/08-LongestCommonSubsequenceRecursive.js index e69de29b..63c2daf7 100644 --- a/examples/chapter14/08-LongestCommonSubsequenceRecursive.js +++ b/examples/chapter14/08-LongestCommonSubsequenceRecursive.js @@ -0,0 +1,6 @@ +const { lcsRecursive } = PacktDataStructuresAlgorithms; + +const wordX = 'acbaed'; +const wordY = 'abcadf'; + +console.log('lcsRecursive', lcsRecursive(wordX, wordY)); diff --git a/examples/chapter14/09-MatrixChainMultiplicationDP.js b/examples/chapter14/09-MatrixChainMultiplicationDP.js index e69de29b..8eb154a3 100644 --- a/examples/chapter14/09-MatrixChainMultiplicationDP.js +++ b/examples/chapter14/09-MatrixChainMultiplicationDP.js @@ -0,0 +1,5 @@ +const { matrixChainOrder } = PacktDataStructuresAlgorithms; + +const p = [10, 100, 5, 50, 1]; +const n = p.length; +console.log(matrixChainOrder(p, n)); diff --git a/examples/chapter14/10-MatrixChainMultiplicationRecursive.js b/examples/chapter14/10-MatrixChainMultiplicationRecursive.js index e69de29b..aecd31e2 100644 --- a/examples/chapter14/10-MatrixChainMultiplicationRecursive.js +++ b/examples/chapter14/10-MatrixChainMultiplicationRecursive.js @@ -0,0 +1,5 @@ +const { matrixChainOrderGreedy } = PacktDataStructuresAlgorithms; + +const p = [10, 100, 5, 50, 1]; +const n = p.length; +console.log(matrixChainOrderGreedy(p, n)); diff --git a/examples/chapter14/13-IntroFunctionalProgramming.js b/examples/chapter14/13-IntroFunctionalProgramming.js index e69de29b..692bebd6 100644 --- a/examples/chapter14/13-IntroFunctionalProgramming.js +++ b/examples/chapter14/13-IntroFunctionalProgramming.js @@ -0,0 +1,147 @@ +console.log('Using imperative JS'); + +var printArray = function(array){ + for (var i=0; i array[i]){ + minValue = array[i]; + } + } + + return minValue; +}; + +console.log(findMinArray([8,6,4,5,9])); + +console.log('Finding the min value in an array - functional ES2015'); +const min_ = function(array){ + return Math.min(...array) +}; + +//simplifying using arrow functions +const min = arr => Math.min(...arr); + +console.log(min_([8,6,4,5,9])); +console.log(min([8,6,4,5,9])); + +//concat + reduce +console.log('merge arrays - imperative'); + +var mergeArrays_ = function(arrays){ + var count = arrays.length, + newArray = [], + k =0; + for (var i=0; i [].concat(...arrays); +console.log(mergeArrays([1, 2, 3], [4, 5], [6])); + +console.log('sum values of arrays - imperative'); +var sumValues = function(array){ + var total = array[0]; + for (var i=1; i arr.reduce((a, b) => a + b); + +console.log(sum([1, 2, 3, 4, 5])); + +//map +var daysOfWeek = [ + {name: 'Monday', value: 1}, + {name: 'Tuesday', value: 2}, + {name: 'Wednesday', value: 7} +]; + +var daysOfWeekValues_ = []; +for (var i = 0; i < daysOfWeek.length; i++) { + daysOfWeekValues_.push(daysOfWeek[i].value); +} + +//to +var daysOfWeekValues = daysOfWeek.map(function(day) { + return day.value; +}); +console.log(daysOfWeekValues); + + +//filter +var positiveNumbers_ = function(array){ + var positive = []; + for (var i = 0; i < array.length; i++) { + if (array[i] >= 0){ + positive.push(array[i]); + } + } + return positive; +} +console.log(positiveNumbers_([-1,1,2,-2])); + +var positiveNumbers = function(array){ + return array.filter(function(num){ + return num >= 0; + }) +}; +console.log(positiveNumbers([-1,1,2,-2])); diff --git a/package-lock.json b/package-lock.json index 761f8495..38e97403 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,10 +20,10 @@ "dev": true, "requires": { "@babel/types": "7.0.0-beta.44", - "jsesc": "2.5.1", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" }, "dependencies": { "jsesc": { @@ -69,9 +69,9 @@ "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", "dev": true, "requires": { - "chalk": "2.4.0", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" }, "dependencies": { "ansi-styles": { @@ -80,7 +80,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -89,9 +89,9 @@ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "supports-color": { @@ -100,7 +100,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -114,7 +114,7 @@ "@babel/code-frame": "7.0.0-beta.44", "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", - "lodash": "4.17.4" + "lodash": "^4.2.0" }, "dependencies": { "babylon": { @@ -137,10 +137,10 @@ "@babel/helper-split-export-declaration": "7.0.0-beta.44", "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", - "debug": "3.1.0", - "globals": "11.4.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "debug": "^3.1.0", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" }, "dependencies": { "babylon": { @@ -172,9 +172,9 @@ "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", "dev": true, "requires": { - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "2.0.0" + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" }, "dependencies": { "to-fast-properties": { @@ -221,7 +221,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.5.3" + "acorn": "^5.0.0" } }, "acorn-jsx": { @@ -230,7 +230,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -247,10 +247,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -265,9 +265,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "amdefine": { @@ -307,8 +307,8 @@ "dev": true, "optional": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "append-transform": { @@ -317,7 +317,7 @@ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", "dev": true, "requires": { - "default-require-extensions": "1.0.0" + "default-require-extensions": "^1.0.0" } }, "aproba": { @@ -332,7 +332,7 @@ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "argv": { @@ -347,7 +347,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -374,7 +374,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -413,9 +413,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -492,21 +492,21 @@ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", "dev": true, "requires": { - "babel-core": "6.26.0", - "babel-polyfill": "6.26.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "commander": "2.11.0", - "convert-source-map": "1.5.0", - "fs-readdir-recursive": "1.0.0", - "glob": "7.1.2", - "lodash": "4.17.4", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.7", - "v8flags": "2.1.1" + "babel-core": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "chokidar": "^1.6.1", + "commander": "^2.11.0", + "convert-source-map": "^1.5.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "output-file-sync": "^1.1.2", + "path-is-absolute": "^1.0.1", + "slash": "^1.0.0", + "source-map": "^0.5.6", + "v8flags": "^2.1.1" } }, "babel-code-frame": { @@ -515,9 +515,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-core": { @@ -526,25 +526,25 @@ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.0", - "debug": "2.6.8", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.0", + "debug": "^2.6.8", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.7", + "slash": "^1.0.0", + "source-map": "^0.5.6" } }, "babel-eslint": { @@ -557,8 +557,8 @@ "@babel/traverse": "7.0.0-beta.44", "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0" + "eslint-scope": "~3.7.1", + "eslint-visitor-keys": "^1.0.0" }, "dependencies": { "babylon": { @@ -575,14 +575,14 @@ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.6", + "trim-right": "^1.0.1" } }, "babel-helper-bindify-decorators": { @@ -591,9 +591,9 @@ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -602,9 +602,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-call-delegate": { @@ -613,10 +613,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -625,10 +625,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" }, "dependencies": { "babel-helper-function-name": { @@ -637,11 +637,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -650,8 +650,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } } } @@ -662,9 +662,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-explode-class": { @@ -673,10 +673,10 @@ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-bindify-decorators": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -685,11 +685,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -698,8 +698,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -708,8 +708,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -718,8 +718,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -728,9 +728,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { @@ -739,11 +739,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" }, "dependencies": { "babel-helper-function-name": { @@ -752,11 +752,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -765,8 +765,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } } } @@ -777,12 +777,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -791,8 +791,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-loader": { @@ -801,9 +801,9 @@ "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", "dev": true, "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.1.0", - "mkdirp": "0.5.1" + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1" } }, "babel-messages": { @@ -812,7 +812,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-add-module-exports": { @@ -827,7 +827,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-async-functions": { @@ -902,9 +902,9 @@ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-generators": "^6.5.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-async-to-generator": { @@ -913,9 +913,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-class-constructor-call": { @@ -924,9 +924,9 @@ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-class-properties": { @@ -935,10 +935,10 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-decorators": { @@ -947,11 +947,11 @@ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-class": "^6.24.1", + "babel-plugin-syntax-decorators": "^6.13.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -960,7 +960,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -969,7 +969,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -978,11 +978,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -991,15 +991,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" }, "dependencies": { "babel-helper-function-name": { @@ -1008,11 +1008,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -1021,8 +1021,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } } } @@ -1033,8 +1033,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -1043,7 +1043,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -1052,8 +1052,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -1062,7 +1062,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -1071,9 +1071,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" }, "dependencies": { "babel-helper-function-name": { @@ -1082,11 +1082,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -1095,8 +1095,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } } } @@ -1107,7 +1107,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -1116,9 +1116,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -1127,10 +1127,10 @@ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -1139,9 +1139,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -1150,9 +1150,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -1161,8 +1161,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -1171,12 +1171,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" }, "dependencies": { "babel-helper-get-function-arity": { @@ -1185,8 +1185,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } } } @@ -1197,8 +1197,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -1207,7 +1207,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1216,9 +1216,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1227,7 +1227,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1236,7 +1236,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1245,9 +1245,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -1256,9 +1256,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-export-extensions": { @@ -1267,8 +1267,8 @@ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "dev": true, "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-export-extensions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-flow-strip-types": { @@ -1277,8 +1277,8 @@ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-object-rest-spread": { @@ -1287,8 +1287,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" } }, "babel-plugin-transform-regenerator": { @@ -1297,7 +1297,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { @@ -1306,8 +1306,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-polyfill": { @@ -1316,9 +1316,9 @@ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "regenerator-runtime": "0.10.5" + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" }, "dependencies": { "regenerator-runtime": { @@ -1335,36 +1335,36 @@ "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "2.5.1", - "invariant": "2.2.2", - "semver": "5.4.1" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^2.1.2", + "invariant": "^2.2.2", + "semver": "^5.3.0" } }, "babel-preset-es2015": { @@ -1373,30 +1373,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "babel-preset-stage-1": { @@ -1405,9 +1405,9 @@ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", "dev": true, "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-preset-stage-2": "^6.24.1" } }, "babel-preset-stage-2": { @@ -1416,10 +1416,10 @@ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators": "^6.24.1", + "babel-preset-stage-3": "^6.24.1" } }, "babel-preset-stage-3": { @@ -1428,11 +1428,11 @@ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-generator-functions": "^6.24.1", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.22.0" } }, "babel-register": { @@ -1441,13 +1441,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" } }, "babel-runtime": { @@ -1456,8 +1456,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { @@ -1466,11 +1466,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1479,15 +1479,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.8", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -1496,10 +1496,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -1520,13 +1520,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -1535,7 +1535,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -1544,7 +1544,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1553,7 +1553,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1562,9 +1562,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -1594,7 +1594,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "big.js": { @@ -1633,7 +1633,7 @@ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { @@ -1642,7 +1642,7 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1652,9 +1652,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "brorand": { @@ -1675,12 +1675,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -1689,9 +1689,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.1", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -1700,9 +1700,9 @@ "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" } }, "browserify-rsa": { @@ -1711,8 +1711,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -1721,13 +1721,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -1736,7 +1736,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "browserslist": { @@ -1745,8 +1745,8 @@ "integrity": "sha512-jAvM2ku7YDJ+leAq3bFH1DE0Ylw+F+EQDq4GkqZfgPEqpWYw9ofQH85uKSB9r3Tv7XDbfqVtE+sdvKJW7IlPJA==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000748", - "electron-to-chromium": "1.3.27" + "caniuse-lite": "^1.0.30000744", + "electron-to-chromium": "^1.3.24" } }, "buffer": { @@ -1755,9 +1755,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.11", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -1790,19 +1790,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.2", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.0", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" }, "dependencies": { "y18n": { @@ -1819,15 +1819,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" }, "dependencies": { "isobject": { @@ -1867,7 +1867,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsites": { @@ -1896,8 +1896,8 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chai": { @@ -1906,12 +1906,12 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.0.2", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.3" + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" } }, "chalk": { @@ -1920,11 +1920,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "chardet": { @@ -1946,15 +1946,15 @@ "dev": true, "optional": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "chownr": { @@ -1975,8 +1975,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "circular-json": { @@ -1991,10 +1991,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -2003,7 +2003,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "isobject": { @@ -2020,7 +2020,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-spinners": { @@ -2053,7 +2053,7 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "1.0.2" + "string-width": "^1.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -2062,7 +2062,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "slice-ansi": { @@ -2077,9 +2077,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -2097,8 +2097,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -2129,7 +2129,7 @@ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dev": true, "requires": { - "mimic-response": "1.0.0" + "mimic-response": "^1.0.0" } }, "clone-stats": { @@ -2144,9 +2144,9 @@ "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "dev": true, "requires": { - "inherits": "2.0.3", - "process-nextick-args": "2.0.0", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" }, "dependencies": { "process-nextick-args": { @@ -2161,13 +2161,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -2176,7 +2176,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } } } @@ -2210,8 +2210,8 @@ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "caseless": { @@ -2226,8 +2226,8 @@ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "dev": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "qs": { @@ -2242,28 +2242,28 @@ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "dev": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "tunnel-agent": { @@ -2272,7 +2272,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } } } @@ -2283,8 +2283,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -2293,7 +2293,7 @@ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -2314,7 +2314,7 @@ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -2347,10 +2347,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "console-browserify": { @@ -2359,7 +2359,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -2386,12 +2386,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -2423,8 +2423,8 @@ "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -2433,11 +2433,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.4", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -2446,12 +2446,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.1", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -2460,9 +2460,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.2", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cryptiles": { @@ -2471,7 +2471,7 @@ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "crypto-browserify": { @@ -2480,17 +2480,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.16", - "public-encrypt": "4.0.2", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "cyclist": { @@ -2511,7 +2511,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -2566,7 +2566,7 @@ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "requires": { - "mimic-response": "1.0.0" + "mimic-response": "^1.0.0" } }, "deep-eql": { @@ -2575,7 +2575,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "4.0.3" + "type-detect": "^4.0.0" } }, "deep-extend": { @@ -2596,7 +2596,7 @@ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { - "strip-bom": "2.0.0" + "strip-bom": "^2.0.0" }, "dependencies": { "strip-bom": { @@ -2605,7 +2605,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -2616,8 +2616,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2626,7 +2626,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2635,7 +2635,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2644,9 +2644,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -2669,13 +2669,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" }, "dependencies": { "pify": { @@ -2698,8 +2698,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "detect-conflict": { @@ -2714,7 +2714,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "diff": { @@ -2729,9 +2729,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "doctrine": { @@ -2740,7 +2740,7 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "domain-browser": { @@ -2761,10 +2761,10 @@ "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ecc-jsbn": { @@ -2774,7 +2774,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ecstatic": { @@ -2782,10 +2782,10 @@ "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.2.0.tgz", "integrity": "sha512-Goilx/2cfU9vvfQjgtNgc2VmJAD8CasQ6rZDqCd2u4Hsyd/qFET6nBf60jiHodevR3nl3IGzNKtrzPXWP88utQ==", "requires": { - "he": "1.1.1", - "mime": "1.6.0", - "minimist": "1.2.0", - "url-join": "2.0.5" + "he": "^1.1.1", + "mime": "^1.4.1", + "minimist": "^1.1.0", + "url-join": "^2.0.2" }, "dependencies": { "minimist": { @@ -2825,13 +2825,13 @@ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -2846,7 +2846,7 @@ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "dev": true, "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "~0.4.13" } }, "end-of-stream": { @@ -2855,7 +2855,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -2864,9 +2864,9 @@ "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.0.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "envinfo": { @@ -2881,7 +2881,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error": { @@ -2890,8 +2890,8 @@ "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", "dev": true, "requires": { - "string-template": "0.2.1", - "xtend": "4.0.1" + "string-template": "~0.2.1", + "xtend": "~4.0.0" } }, "error-ex": { @@ -2900,7 +2900,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "escape-string-regexp": { @@ -2915,44 +2915,44 @@ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.4.0", - "concat-stream": "1.6.2", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.4.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.10.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "regexpp": "1.1.0", - "require-uncached": "1.0.3", - "semver": "5.4.1", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", "table": "4.0.2", - "text-table": "0.2.0" + "text-table": "~0.2.0" }, "dependencies": { "ansi-regex": { @@ -2967,7 +2967,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -2976,9 +2976,9 @@ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "debug": { @@ -3002,7 +3002,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -3011,7 +3011,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -3022,7 +3022,7 @@ "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", "dev": true, "requires": { - "eslint-restricted-globals": "0.1.1" + "eslint-restricted-globals": "^0.1.1" } }, "eslint-import-resolver-node": { @@ -3031,8 +3031,8 @@ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "2.6.9", - "resolve": "1.5.0" + "debug": "^2.6.9", + "resolve": "^1.5.0" }, "dependencies": { "debug": { @@ -3052,8 +3052,8 @@ "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", "dev": true, "requires": { - "debug": "2.6.8", - "pkg-dir": "1.0.0" + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" }, "dependencies": { "find-up": { @@ -3062,8 +3062,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "path-exists": { @@ -3072,7 +3072,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "pkg-dir": { @@ -3081,7 +3081,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } } } @@ -3092,16 +3092,16 @@ "integrity": "sha1-Fa7qN6Z0mdhI6OmBgG1GJ7VQOBY=", "dev": true, "requires": { - "contains-path": "0.1.0", - "debug": "2.6.8", + "contains-path": "^0.1.0", + "debug": "^2.6.8", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.2.0", - "has": "1.0.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0", - "resolve": "1.7.1" + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" }, "dependencies": { "doctrine": { @@ -3110,8 +3110,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "resolve": { @@ -3120,7 +3120,7 @@ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } } } @@ -3137,8 +3137,8 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-visitor-keys": { @@ -3153,8 +3153,8 @@ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" } }, "esprima": { @@ -3169,7 +3169,7 @@ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -3178,7 +3178,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -3210,8 +3210,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -3220,13 +3220,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "exit-hook": { @@ -3241,7 +3241,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -3250,7 +3250,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "expand-tilde": { @@ -3259,7 +3259,7 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1" + "homedir-polyfill": "^1.0.1" } }, "extend": { @@ -3274,8 +3274,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3284,7 +3284,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3295,9 +3295,9 @@ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "extglob": { @@ -3306,7 +3306,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "extsprintf": { @@ -3339,13 +3339,13 @@ "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", "dev": true, "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.17" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.9" }, "dependencies": { "core-js": { @@ -3362,7 +3362,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { @@ -3371,8 +3371,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "filename-regex": { @@ -3387,8 +3387,8 @@ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, "requires": { - "glob": "7.1.2", - "minimatch": "3.0.4" + "glob": "^7.0.3", + "minimatch": "^3.0.3" } }, "fill-range": { @@ -3397,11 +3397,11 @@ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "find-cache-dir": { @@ -3410,9 +3410,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.2.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -3421,7 +3421,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "first-chunk-stream": { @@ -3430,7 +3430,7 @@ "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.2" } }, "flat-cache": { @@ -3439,10 +3439,10 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, "flow-parser": { @@ -3457,8 +3457,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "follow-redirects": { @@ -3466,7 +3466,7 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", "requires": { - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -3491,7 +3491,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "forever-agent": { @@ -3506,9 +3506,9 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fragment-cache": { @@ -3517,7 +3517,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "from2": { @@ -3526,8 +3526,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-extra": { @@ -3536,9 +3536,9 @@ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-readdir-recursive": { @@ -3553,10 +3553,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.3" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -3572,8 +3572,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.36" + "nan": "^2.3.0", + "node-pre-gyp": "^0.6.36" }, "dependencies": { "abbrev": { @@ -3590,8 +3590,8 @@ "dev": true, "optional": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ansi-regex": { @@ -3614,8 +3614,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "asn1": { @@ -3666,7 +3666,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "block-stream": { @@ -3675,7 +3675,7 @@ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "boom": { @@ -3684,7 +3684,7 @@ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { @@ -3693,7 +3693,7 @@ "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", "dev": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "^0.4.1", "concat-map": "0.0.1" } }, @@ -3729,7 +3729,7 @@ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "concat-map": { @@ -3757,7 +3757,7 @@ "dev": true, "optional": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "dashdash": { @@ -3767,7 +3767,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -3816,7 +3816,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "extend": { @@ -3846,9 +3846,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fs.realpath": { @@ -3863,10 +3863,10 @@ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "fstream-ignore": { @@ -3876,9 +3876,9 @@ "dev": true, "optional": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" } }, "gauge": { @@ -3888,14 +3888,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "getpass": { @@ -3905,7 +3905,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -3923,12 +3923,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -3951,8 +3951,8 @@ "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has-unicode": { @@ -3969,10 +3969,10 @@ "dev": true, "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -3988,9 +3988,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "inflight": { @@ -3999,8 +3999,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4022,7 +4022,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-typedarray": { @@ -4052,7 +4052,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "jsbn": { @@ -4076,7 +4076,7 @@ "dev": true, "optional": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -4127,7 +4127,7 @@ "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", "dev": true, "requires": { - "mime-db": "1.27.0" + "mime-db": "~1.27.0" } }, "minimatch": { @@ -4136,7 +4136,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -4168,15 +4168,15 @@ "dev": true, "optional": true, "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "request": "^2.81.0", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" } }, "nopt": { @@ -4186,8 +4186,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npmlog": { @@ -4197,10 +4197,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -4229,7 +4229,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -4253,8 +4253,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -4297,10 +4297,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -4318,13 +4318,13 @@ "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", "dev": true, "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" } }, "request": { @@ -4334,28 +4334,28 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "rimraf": { @@ -4364,7 +4364,7 @@ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -4401,7 +4401,7 @@ "dev": true, "optional": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sshpk": { @@ -4411,15 +4411,15 @@ "dev": true, "optional": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "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", + "jodid25519": "^1.0.0", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -4437,9 +4437,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -4448,7 +4448,7 @@ "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", "dev": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "stringstream": { @@ -4464,7 +4464,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -4480,9 +4480,9 @@ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tar-pack": { @@ -4492,14 +4492,14 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" } }, "tough-cookie": { @@ -4509,7 +4509,7 @@ "dev": true, "optional": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -4519,7 +4519,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -4566,7 +4566,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -4625,7 +4625,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -4642,8 +4642,8 @@ "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", "dev": true, "requires": { - "got": "7.1.0", - "is-plain-obj": "1.1.0" + "got": "^7.0.0", + "is-plain-obj": "^1.1.0" }, "dependencies": { "got": { @@ -4652,20 +4652,20 @@ "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", "dev": true, "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.1", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" } }, "p-cancelable": { @@ -4680,7 +4680,7 @@ "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", "dev": true, "requires": { - "p-finally": "1.0.0" + "p-finally": "^1.0.0" } }, "prepend-http": { @@ -4695,7 +4695,7 @@ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } } } @@ -4706,7 +4706,7 @@ "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", "dev": true, "requires": { - "gh-got": "6.0.0" + "gh-got": "^6.0.0" } }, "glob": { @@ -4715,12 +4715,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-all": { @@ -4729,8 +4729,8 @@ "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", "dev": true, "requires": { - "glob": "7.1.2", - "yargs": "1.2.6" + "glob": "^7.0.5", + "yargs": "~1.2.6" }, "dependencies": { "minimist": { @@ -4745,7 +4745,7 @@ "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", "dev": true, "requires": { - "minimist": "0.1.0" + "minimist": "^0.1.0" } } } @@ -4756,8 +4756,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -4766,7 +4766,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "global-modules": { @@ -4775,9 +4775,9 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, "global-prefix": { @@ -4786,11 +4786,11 @@ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "1.0.2", - "which": "1.3.0" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, "globals": { @@ -4805,12 +4805,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -4827,23 +4827,23 @@ "integrity": "sha512-kBNy/S2CGwrYgDSec5KTWGKUvupwkkTVAjIsVFF2shXO13xpZdFP4d4kxa//CLX2tN/rV0aYwK8vY6UKWGn2vQ==", "dev": true, "requires": { - "@sindresorhus/is": "0.7.0", - "cacheable-request": "2.1.4", - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "into-stream": "3.1.0", - "is-retry-allowed": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "mimic-response": "1.0.0", - "p-cancelable": "0.4.1", - "p-timeout": "2.0.1", - "pify": "3.0.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "url-parse-lax": "3.0.0", - "url-to-options": "1.0.1" + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" } }, "graceful-fs": { @@ -4858,7 +4858,7 @@ "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.17.2" } }, "growl": { @@ -4873,10 +4873,10 @@ "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "source-map": { @@ -4885,7 +4885,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -4902,7 +4902,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -4911,7 +4911,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-color": { @@ -4938,7 +4938,7 @@ "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dev": true, "requires": { - "has-symbol-support-x": "1.4.2" + "has-symbol-support-x": "^1.4.1" } }, "has-value": { @@ -4947,9 +4947,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { "isobject": { @@ -4966,8 +4966,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -4976,7 +4976,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4985,7 +4985,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -4996,7 +4996,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -5007,8 +5007,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -5017,8 +5017,8 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, "hawk": { @@ -5027,10 +5027,10 @@ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "he": { @@ -5044,9 +5044,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoek": { @@ -5061,8 +5061,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "homedir-polyfill": { @@ -5071,7 +5071,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { @@ -5091,9 +5091,9 @@ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "requires": { - "eventemitter3": "3.0.1", - "follow-redirects": "1.4.1", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-server": { @@ -5102,13 +5102,13 @@ "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==", "requires": { "colors": "1.0.3", - "corser": "2.0.1", - "ecstatic": "3.2.0", - "http-proxy": "1.17.0", - "opener": "1.4.3", - "optimist": "0.6.1", - "portfinder": "1.0.13", - "union": "0.4.6" + "corser": "~2.0.0", + "ecstatic": "^3.0.0", + "http-proxy": "^1.8.1", + "opener": "~1.4.0", + "optimist": "0.6.x", + "portfinder": "^1.0.13", + "union": "~0.4.3" }, "dependencies": { "colors": { @@ -5124,9 +5124,9 @@ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-browserify": { @@ -5165,8 +5165,8 @@ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", "dev": true, "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" } }, "imurmurhash": { @@ -5181,7 +5181,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "indexof": { @@ -5196,8 +5196,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -5218,20 +5218,20 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.4", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { @@ -5246,7 +5246,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5255,9 +5255,9 @@ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "strip-ansi": { @@ -5266,7 +5266,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -5275,7 +5275,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5292,8 +5292,8 @@ "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", "dev": true, "requires": { - "from2": "2.3.0", - "p-is-promise": "1.1.0" + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" } }, "invariant": { @@ -5302,7 +5302,7 @@ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -5317,7 +5317,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-arrayish": { @@ -5332,7 +5332,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.10.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -5347,7 +5347,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-data-descriptor": { @@ -5356,7 +5356,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-descriptor": { @@ -5365,9 +5365,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -5390,7 +5390,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -5411,7 +5411,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -5426,7 +5426,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-number": { @@ -5435,7 +5435,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-object": { @@ -5450,7 +5450,7 @@ "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", "dev": true, "requires": { - "symbol-observable": "0.2.4" + "symbol-observable": "^0.2.2" }, "dependencies": { "symbol-observable": { @@ -5467,7 +5467,7 @@ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-number": "4.0.0" + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -5490,7 +5490,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -5499,7 +5499,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-obj": { @@ -5514,7 +5514,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -5561,7 +5561,7 @@ "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", "dev": true, "requires": { - "scoped-regex": "1.0.0" + "scoped-regex": "^1.0.0" } }, "is-stream": { @@ -5615,8 +5615,8 @@ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "dev": true, "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.3" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "isstream": { @@ -5631,14 +5631,14 @@ "integrity": "sha1-eBeVZWAYohdMX2DzZ+5dNhy1e3c=", "dev": true, "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "istanbul-api": "1.1.14", - "js-yaml": "3.10.0", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "which": "1.3.0", - "wordwrap": "1.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "istanbul-api": "^1.1.0-alpha", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "which": "^1.1.1", + "wordwrap": "^1.0.0" } }, "istanbul-api": { @@ -5647,17 +5647,17 @@ "integrity": "sha1-JbxXAffGgMD//5E95G42GaOm5oA=", "dev": true, "requires": { - "async": "2.5.0", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.0.7", - "istanbul-lib-instrument": "1.8.0", - "istanbul-lib-report": "1.1.1", - "istanbul-lib-source-maps": "1.2.1", - "istanbul-reports": "1.1.2", - "js-yaml": "3.10.0", - "mkdirp": "0.5.1", - "once": "1.4.0" + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-hook": "^1.0.7", + "istanbul-lib-instrument": "^1.8.0", + "istanbul-lib-report": "^1.1.1", + "istanbul-lib-source-maps": "^1.2.1", + "istanbul-reports": "^1.1.2", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" }, "dependencies": { "async": { @@ -5666,7 +5666,7 @@ "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.14.0" } } } @@ -5683,7 +5683,7 @@ "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==", "dev": true, "requires": { - "append-transform": "0.4.0" + "append-transform": "^0.4.0" } }, "istanbul-lib-instrument": { @@ -5692,13 +5692,13 @@ "integrity": "sha1-ZvbJQhzJ7EcE928tsIS6kHiitTI=", "dev": true, "requires": { - "babel-generator": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.4.1" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.1.1", + "semver": "^5.3.0" } }, "istanbul-lib-report": { @@ -5707,10 +5707,10 @@ "integrity": "sha512-tvF+YmCmH4thnez6JFX06ujIA19WPa9YUiwjc1uALF2cv5dmE3It8b5I8Ob7FHJ70H9Y5yF+TDkVa/mcADuw1Q==", "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" + "istanbul-lib-coverage": "^1.1.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" }, "dependencies": { "has-flag": { @@ -5725,7 +5725,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -5736,11 +5736,11 @@ "integrity": "sha512-mukVvSXCn9JQvdJl8wP/iPhqig0MRtuWuD4ZNKo6vB2Ik//AmhAKe3QnPN02dmkRe3lTudFk3rzoHhwU4hb94w==", "dev": true, "requires": { - "debug": "2.6.8", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" + "debug": "^2.6.3", + "istanbul-lib-coverage": "^1.1.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" } }, "istanbul-reports": { @@ -5749,7 +5749,7 @@ "integrity": "sha1-D7Lj9qqZIr085F0F2KtNXo4HvU8=", "dev": true, "requires": { - "handlebars": "4.0.10" + "handlebars": "^4.0.3" } }, "istextorbinary": { @@ -5758,9 +5758,9 @@ "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", "dev": true, "requires": { - "binaryextensions": "2.1.1", - "editions": "1.3.4", - "textextensions": "2.2.0" + "binaryextensions": "2", + "editions": "^1.3.3", + "textextensions": "2" } }, "isurl": { @@ -5769,8 +5769,8 @@ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, "js-tokens": { @@ -5785,8 +5785,8 @@ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { @@ -5802,21 +5802,21 @@ "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0", - "babel-preset-es2015": "6.24.1", - "babel-preset-stage-1": "6.24.1", - "babel-register": "6.26.0", - "babylon": "7.0.0-beta.46", - "colors": "1.2.1", - "flow-parser": "0.70.0", - "lodash": "4.17.4", - "micromatch": "2.3.11", - "neo-async": "2.5.1", + "babel-plugin-transform-flow-strip-types": "^6.8.0", + "babel-preset-es2015": "^6.9.0", + "babel-preset-stage-1": "^6.5.0", + "babel-register": "^6.9.0", + "babylon": "^7.0.0-beta.30", + "colors": "^1.1.2", + "flow-parser": "^0.*", + "lodash": "^4.13.1", + "micromatch": "^2.3.7", + "neo-async": "^2.5.0", "node-dir": "0.1.8", - "nomnom": "1.8.1", - "recast": "0.14.7", - "temp": "0.8.3", - "write-file-atomic": "1.3.4" + "nomnom": "^1.8.1", + "recast": "^0.14.1", + "temp": "^0.8.1", + "write-file-atomic": "^1.2.0" }, "dependencies": { "babylon": { @@ -5863,7 +5863,7 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stable-stringify-without-jsonify": { @@ -5890,7 +5890,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -5934,7 +5934,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -5950,7 +5950,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "levn": { @@ -5959,8 +5959,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "listr": { @@ -5969,23 +5969,23 @@ "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "figures": "1.7.0", - "indent-string": "2.1.0", - "is-observable": "0.2.0", - "is-promise": "2.1.0", - "is-stream": "1.1.0", - "listr-silent-renderer": "1.1.1", - "listr-update-renderer": "0.4.0", - "listr-verbose-renderer": "0.4.1", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "ora": "0.2.3", - "p-map": "1.2.0", - "rxjs": "5.5.10", - "stream-to-observable": "0.2.0", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "figures": "^1.7.0", + "indent-string": "^2.1.0", + "is-observable": "^0.2.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.4.0", + "listr-verbose-renderer": "^0.4.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "ora": "^0.2.3", + "p-map": "^1.1.1", + "rxjs": "^5.4.2", + "stream-to-observable": "^0.2.0", + "strip-ansi": "^3.0.1" }, "dependencies": { "figures": { @@ -5994,8 +5994,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "log-symbols": { @@ -6004,7 +6004,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } } } @@ -6021,14 +6021,14 @@ "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "elegant-spinner": "1.0.1", - "figures": "1.7.0", - "indent-string": "3.2.0", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "strip-ansi": "^3.0.1" }, "dependencies": { "figures": { @@ -6037,8 +6037,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "indent-string": { @@ -6053,7 +6053,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } } } @@ -6064,10 +6064,10 @@ "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "date-fns": "1.29.0", - "figures": "1.7.0" + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" }, "dependencies": { "cli-cursor": { @@ -6076,7 +6076,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "figures": { @@ -6085,8 +6085,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "onetime": { @@ -6101,8 +6101,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } } } @@ -6113,10 +6113,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" }, "dependencies": { "pify": { @@ -6139,9 +6139,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -6150,8 +6150,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -6172,7 +6172,7 @@ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "2.4.0" + "chalk": "^2.0.1" }, "dependencies": { "ansi-styles": { @@ -6181,7 +6181,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -6190,9 +6190,9 @@ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "supports-color": { @@ -6201,7 +6201,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -6212,8 +6212,8 @@ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "cli-cursor": "1.0.2" + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" }, "dependencies": { "ansi-escapes": { @@ -6228,7 +6228,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "onetime": { @@ -6243,8 +6243,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } } } @@ -6261,7 +6261,7 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lowercase-keys": { @@ -6276,8 +6276,8 @@ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -6286,7 +6286,7 @@ "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "make-error": { @@ -6307,7 +6307,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5.js": { @@ -6316,8 +6316,8 @@ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "mem": { @@ -6326,7 +6326,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "mem-fs": { @@ -6335,9 +6335,9 @@ "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", "dev": true, "requires": { - "through2": "2.0.3", - "vinyl": "1.2.0", - "vinyl-file": "2.0.0" + "through2": "^2.0.0", + "vinyl": "^1.1.0", + "vinyl-file": "^2.0.0" } }, "mem-fs-editor": { @@ -6346,16 +6346,16 @@ "integrity": "sha1-3Qpuryu4prN3QAZ6pUnrUwEFr58=", "dev": true, "requires": { - "commondir": "1.0.1", - "deep-extend": "0.4.2", - "ejs": "2.5.9", - "glob": "7.1.2", - "globby": "6.1.0", - "mkdirp": "0.5.1", - "multimatch": "2.1.0", - "rimraf": "2.6.2", - "through2": "2.0.3", - "vinyl": "2.1.0" + "commondir": "^1.0.1", + "deep-extend": "^0.4.0", + "ejs": "^2.3.1", + "glob": "^7.0.3", + "globby": "^6.1.0", + "mkdirp": "^0.5.0", + "multimatch": "^2.0.0", + "rimraf": "^2.2.8", + "through2": "^2.0.0", + "vinyl": "^2.0.1" }, "dependencies": { "clone": { @@ -6376,11 +6376,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { @@ -6401,12 +6401,12 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.2", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } } } @@ -6417,8 +6417,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.3" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "micromatch": { @@ -6427,19 +6427,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "miller-rabin": { @@ -6448,8 +6448,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -6469,7 +6469,7 @@ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "dev": true, "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.30.0" } }, "mimic-fn": { @@ -6502,7 +6502,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -6516,16 +6516,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.5.4", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.4.0", - "stream-each": "1.2.2", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -6534,8 +6534,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -6544,7 +6544,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -6597,7 +6597,7 @@ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -6608,14 +6608,14 @@ "integrity": "sha512-2fdl+Y5rSPlslVmuBRjT3829GYj/hh7Cyber+EkIubD60W44EkMR58jPHeopG5eBGgk3HWRl6Rm/g2knDeSbEA==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "chalk": "2.3.2", - "diff": "3.5.0", - "json-stringify-safe": "5.0.1", - "lodash": "4.17.4", - "mochawesome-report-generator": "3.1.1", - "strip-ansi": "4.0.0", - "uuid": "3.1.0" + "babel-runtime": "^6.20.0", + "chalk": "^2.3.0", + "diff": "^3.4.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.3", + "mochawesome-report-generator": "^3.0.1", + "strip-ansi": "^4.0.0", + "uuid": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -6630,7 +6630,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -6639,9 +6639,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "strip-ansi": { @@ -6650,7 +6650,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -6659,7 +6659,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -6670,19 +6670,19 @@ "integrity": "sha512-dzhYGBkmzKLwbO1hvSHkXcG5Q0PiUpstBH5viIePD9VYkBkFpFyDcK5Jyu9JP28qg+H7fAxKZo59aHepowdiuQ==", "dev": true, "requires": { - "chalk": "2.3.2", - "dateformat": "3.0.3", - "fs-extra": "4.0.3", - "fsu": "1.0.4", - "lodash.isfunction": "3.0.9", - "opener": "1.4.3", - "prop-types": "15.6.1", - "react": "16.2.0", - "react-dom": "16.2.0", - "tcomb": "3.2.25", - "tcomb-validation": "3.4.1", - "validator": "9.4.1", - "yargs": "10.1.2" + "chalk": "^2.3.0", + "dateformat": "^3.0.2", + "fs-extra": "^4.0.2", + "fsu": "^1.0.2", + "lodash.isfunction": "^3.0.8", + "opener": "^1.4.2", + "prop-types": "^15.5.8", + "react": "^16.0.0", + "react-dom": "^16.0.0", + "tcomb": "^3.2.17", + "tcomb-validation": "^3.3.0", + "validator": "^9.1.2", + "yargs": "^10.0.3" }, "dependencies": { "ansi-regex": { @@ -6697,7 +6697,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -6706,9 +6706,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "cliui": { @@ -6717,9 +6717,9 @@ "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "strip-ansi": { @@ -6728,7 +6728,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -6737,7 +6737,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "yargs": { @@ -6746,18 +6746,18 @@ "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", "dev": true, "requires": { - "cliui": "4.0.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.1.0" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" } } } @@ -6768,12 +6768,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -6787,10 +6787,10 @@ "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-union": "1.0.2", - "arrify": "1.0.1", - "minimatch": "3.0.4" + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" } }, "mute-stream": { @@ -6812,18 +6812,18 @@ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { @@ -6876,8 +6876,8 @@ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "dev": true, "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "node-libs-browser": { @@ -6886,28 +6886,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.8.1", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" } }, @@ -6917,8 +6917,8 @@ "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", "dev": true, "requires": { - "chalk": "0.4.0", - "underscore": "1.6.0" + "chalk": "~0.4.0", + "underscore": "~1.6.0" }, "dependencies": { "ansi-styles": { @@ -6933,9 +6933,9 @@ "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", "dev": true, "requires": { - "ansi-styles": "1.0.0", - "has-color": "0.1.7", - "strip-ansi": "0.1.1" + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" } }, "strip-ansi": { @@ -6952,7 +6952,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } }, "normalize-package-data": { @@ -6961,10 +6961,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.3" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -6973,7 +6973,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "normalize-url": { @@ -6982,9 +6982,9 @@ "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "dev": true, "requires": { - "prepend-http": "2.0.0", - "query-string": "5.1.1", - "sort-keys": "2.0.0" + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" } }, "npm-run-path": { @@ -6993,7 +6993,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -7008,33 +7008,33 @@ "integrity": "sha512-EGePURSKUEpS1jWnEKAMhY+GWZzi7JC+f8iBDOATaOsLZW5hM/9eYx2dHGaEXa1ITvMm44CJugMksvP3NwMQMw==", "dev": true, "requires": { - "archy": "1.0.0", - "arrify": "1.0.1", - "caching-transform": "1.0.1", - "convert-source-map": "1.5.1", - "debug-log": "1.0.1", - "default-require-extensions": "1.0.0", - "find-cache-dir": "0.1.1", - "find-up": "2.1.0", - "foreground-child": "1.5.6", - "glob": "7.1.2", - "istanbul-lib-coverage": "1.2.0", - "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.10.1", - "istanbul-lib-report": "1.1.3", - "istanbul-lib-source-maps": "1.2.3", - "istanbul-reports": "1.4.0", - "md5-hex": "1.3.0", - "merge-source-map": "1.1.0", - "micromatch": "2.3.11", - "mkdirp": "0.5.1", - "resolve-from": "2.0.0", - "rimraf": "2.6.2", - "signal-exit": "3.0.2", - "spawn-wrap": "1.4.2", - "test-exclude": "4.2.1", + "archy": "^1.0.0", + "arrify": "^1.0.1", + "caching-transform": "^1.0.0", + "convert-source-map": "^1.5.1", + "debug-log": "^1.0.1", + "default-require-extensions": "^1.0.0", + "find-cache-dir": "^0.1.1", + "find-up": "^2.1.0", + "foreground-child": "^1.5.3", + "glob": "^7.0.6", + "istanbul-lib-coverage": "^1.1.2", + "istanbul-lib-hook": "^1.1.0", + "istanbul-lib-instrument": "^1.10.0", + "istanbul-lib-report": "^1.1.3", + "istanbul-lib-source-maps": "^1.2.3", + "istanbul-reports": "^1.4.0", + "md5-hex": "^1.2.0", + "merge-source-map": "^1.0.2", + "micromatch": "^2.3.11", + "mkdirp": "^0.5.0", + "resolve-from": "^2.0.0", + "rimraf": "^2.5.4", + "signal-exit": "^3.0.1", + "spawn-wrap": "^1.4.2", + "test-exclude": "^4.2.0", "yargs": "11.1.0", - "yargs-parser": "8.1.0" + "yargs-parser": "^8.0.0" }, "dependencies": { "align-text": { @@ -7042,9 +7042,9 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "amdefine": { @@ -7067,7 +7067,7 @@ "bundled": true, "dev": true, "requires": { - "default-require-extensions": "1.0.0" + "default-require-extensions": "^1.0.0" } }, "archy": { @@ -7080,7 +7080,7 @@ "bundled": true, "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -7123,9 +7123,9 @@ "bundled": true, "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-generator": { @@ -7133,14 +7133,14 @@ "bundled": true, "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.5", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" } }, "babel-messages": { @@ -7148,7 +7148,7 @@ "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-runtime": { @@ -7156,8 +7156,8 @@ "bundled": true, "dev": true, "requires": { - "core-js": "2.5.5", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { @@ -7165,11 +7165,11 @@ "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.5" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -7177,15 +7177,15 @@ "bundled": true, "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.5" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -7193,10 +7193,10 @@ "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.5", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -7214,13 +7214,13 @@ "bundled": true, "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -7228,7 +7228,7 @@ "bundled": true, "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -7236,7 +7236,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -7244,7 +7244,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -7252,9 +7252,9 @@ "bundled": true, "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -7274,7 +7274,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -7283,9 +7283,9 @@ "bundled": true, "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "builtin-modules": { @@ -7298,15 +7298,15 @@ "bundled": true, "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" }, "dependencies": { "isobject": { @@ -7321,9 +7321,9 @@ "bundled": true, "dev": true, "requires": { - "md5-hex": "1.3.0", - "mkdirp": "0.5.1", - "write-file-atomic": "1.3.4" + "md5-hex": "^1.2.0", + "mkdirp": "^0.5.1", + "write-file-atomic": "^1.1.4" } }, "camelcase": { @@ -7338,8 +7338,8 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { @@ -7347,11 +7347,11 @@ "bundled": true, "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "class-utils": { @@ -7359,10 +7359,10 @@ "bundled": true, "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -7370,7 +7370,7 @@ "bundled": true, "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "isobject": { @@ -7386,8 +7386,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -7409,8 +7409,8 @@ "bundled": true, "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "commondir": { @@ -7448,8 +7448,8 @@ "bundled": true, "dev": true, "requires": { - "lru-cache": "4.1.2", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, "debug": { @@ -7480,7 +7480,7 @@ "bundled": true, "dev": true, "requires": { - "strip-bom": "2.0.0" + "strip-bom": "^2.0.0" } }, "define-property": { @@ -7488,8 +7488,8 @@ "bundled": true, "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -7497,7 +7497,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -7505,7 +7505,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -7513,9 +7513,9 @@ "bundled": true, "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -7535,7 +7535,7 @@ "bundled": true, "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "error-ex": { @@ -7543,7 +7543,7 @@ "bundled": true, "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "escape-string-regexp": { @@ -7561,13 +7561,13 @@ "bundled": true, "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { @@ -7575,9 +7575,9 @@ "bundled": true, "dev": true, "requires": { - "lru-cache": "4.1.2", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } @@ -7587,7 +7587,7 @@ "bundled": true, "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -7595,7 +7595,7 @@ "bundled": true, "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "extend-shallow": { @@ -7603,8 +7603,8 @@ "bundled": true, "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -7612,7 +7612,7 @@ "bundled": true, "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -7622,7 +7622,7 @@ "bundled": true, "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "filename-regex": { @@ -7635,11 +7635,11 @@ "bundled": true, "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "find-cache-dir": { @@ -7647,9 +7647,9 @@ "bundled": true, "dev": true, "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" } }, "find-up": { @@ -7657,7 +7657,7 @@ "bundled": true, "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "for-in": { @@ -7670,7 +7670,7 @@ "bundled": true, "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreground-child": { @@ -7678,8 +7678,8 @@ "bundled": true, "dev": true, "requires": { - "cross-spawn": "4.0.2", - "signal-exit": "3.0.2" + "cross-spawn": "^4", + "signal-exit": "^3.0.0" } }, "fragment-cache": { @@ -7687,7 +7687,7 @@ "bundled": true, "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fs.realpath": { @@ -7715,12 +7715,12 @@ "bundled": true, "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -7728,8 +7728,8 @@ "bundled": true, "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -7737,7 +7737,7 @@ "bundled": true, "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "globals": { @@ -7755,10 +7755,10 @@ "bundled": true, "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "source-map": { @@ -7766,7 +7766,7 @@ "bundled": true, "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -7776,7 +7776,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -7789,9 +7789,9 @@ "bundled": true, "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { "isobject": { @@ -7806,8 +7806,8 @@ "bundled": true, "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -7815,7 +7815,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -7823,7 +7823,7 @@ "bundled": true, "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -7833,7 +7833,7 @@ "bundled": true, "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -7853,8 +7853,8 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -7867,7 +7867,7 @@ "bundled": true, "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -7880,7 +7880,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-arrayish": { @@ -7898,7 +7898,7 @@ "bundled": true, "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-data-descriptor": { @@ -7906,7 +7906,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-descriptor": { @@ -7914,9 +7914,9 @@ "bundled": true, "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -7936,7 +7936,7 @@ "bundled": true, "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -7954,7 +7954,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -7967,7 +7967,7 @@ "bundled": true, "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-number": { @@ -7975,7 +7975,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-odd": { @@ -7983,7 +7983,7 @@ "bundled": true, "dev": true, "requires": { - "is-number": "4.0.0" + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -7998,7 +7998,7 @@ "bundled": true, "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -8061,7 +8061,7 @@ "bundled": true, "dev": true, "requires": { - "append-transform": "0.4.0" + "append-transform": "^0.4.0" } }, "istanbul-lib-instrument": { @@ -8069,13 +8069,13 @@ "bundled": true, "dev": true, "requires": { - "babel-generator": "6.26.1", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.2.0", - "semver": "5.5.0" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.0", + "semver": "^5.3.0" } }, "istanbul-lib-report": { @@ -8083,10 +8083,10 @@ "bundled": true, "dev": true, "requires": { - "istanbul-lib-coverage": "1.2.0", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" }, "dependencies": { "supports-color": { @@ -8094,7 +8094,7 @@ "bundled": true, "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -8104,11 +8104,11 @@ "bundled": true, "dev": true, "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.2.0", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" }, "dependencies": { "debug": { @@ -8126,7 +8126,7 @@ "bundled": true, "dev": true, "requires": { - "handlebars": "4.0.11" + "handlebars": "^4.0.3" } }, "js-tokens": { @@ -8144,7 +8144,7 @@ "bundled": true, "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -8158,7 +8158,7 @@ "bundled": true, "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "load-json-file": { @@ -8166,11 +8166,11 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "locate-path": { @@ -8178,8 +8178,8 @@ "bundled": true, "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "dependencies": { "path-exists": { @@ -8204,7 +8204,7 @@ "bundled": true, "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lru-cache": { @@ -8212,8 +8212,8 @@ "bundled": true, "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "map-cache": { @@ -8226,7 +8226,7 @@ "bundled": true, "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5-hex": { @@ -8234,7 +8234,7 @@ "bundled": true, "dev": true, "requires": { - "md5-o-matic": "0.1.1" + "md5-o-matic": "^0.1.1" } }, "md5-o-matic": { @@ -8247,7 +8247,7 @@ "bundled": true, "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "merge-source-map": { @@ -8255,7 +8255,7 @@ "bundled": true, "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -8270,19 +8270,19 @@ "bundled": true, "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "mimic-fn": { @@ -8295,7 +8295,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -8308,8 +8308,8 @@ "bundled": true, "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -8317,7 +8317,7 @@ "bundled": true, "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -8340,18 +8340,18 @@ "bundled": true, "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { @@ -8376,10 +8376,10 @@ "bundled": true, "dev": true, "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.3" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -8387,7 +8387,7 @@ "bundled": true, "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -8395,7 +8395,7 @@ "bundled": true, "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -8413,9 +8413,9 @@ "bundled": true, "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -8423,7 +8423,7 @@ "bundled": true, "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -8433,7 +8433,7 @@ "bundled": true, "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" }, "dependencies": { "isobject": { @@ -8448,8 +8448,8 @@ "bundled": true, "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -8457,7 +8457,7 @@ "bundled": true, "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -8472,7 +8472,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "optimist": { @@ -8480,8 +8480,8 @@ "bundled": true, "dev": true, "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "os-homedir": { @@ -8494,9 +8494,9 @@ "bundled": true, "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "p-finally": { @@ -8509,7 +8509,7 @@ "bundled": true, "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -8517,7 +8517,7 @@ "bundled": true, "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -8530,10 +8530,10 @@ "bundled": true, "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { @@ -8541,7 +8541,7 @@ "bundled": true, "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "pascalcase": { @@ -8554,7 +8554,7 @@ "bundled": true, "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -8577,9 +8577,9 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { @@ -8597,7 +8597,7 @@ "bundled": true, "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -8605,7 +8605,7 @@ "bundled": true, "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" }, "dependencies": { "find-up": { @@ -8613,8 +8613,8 @@ "bundled": true, "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } } } @@ -8639,8 +8639,8 @@ "bundled": true, "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -8648,7 +8648,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8656,7 +8656,7 @@ "bundled": true, "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8666,7 +8666,7 @@ "bundled": true, "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8676,9 +8676,9 @@ "bundled": true, "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -8686,8 +8686,8 @@ "bundled": true, "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "dependencies": { "find-up": { @@ -8695,8 +8695,8 @@ "bundled": true, "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } } } @@ -8711,7 +8711,7 @@ "bundled": true, "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -8719,8 +8719,8 @@ "bundled": true, "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "remove-trailing-separator": { @@ -8743,7 +8743,7 @@ "bundled": true, "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "require-directory": { @@ -8777,7 +8777,7 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -8785,7 +8785,7 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-regex": { @@ -8793,7 +8793,7 @@ "bundled": true, "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "semver": { @@ -8811,10 +8811,10 @@ "bundled": true, "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -8822,7 +8822,7 @@ "bundled": true, "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -8832,7 +8832,7 @@ "bundled": true, "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -8855,14 +8855,14 @@ "bundled": true, "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "3.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -8870,7 +8870,7 @@ "bundled": true, "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -8878,7 +8878,7 @@ "bundled": true, "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -8888,9 +8888,9 @@ "bundled": true, "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -8898,7 +8898,7 @@ "bundled": true, "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -8906,7 +8906,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -8914,7 +8914,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -8922,9 +8922,9 @@ "bundled": true, "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -8944,7 +8944,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "source-map": { @@ -8957,11 +8957,11 @@ "bundled": true, "dev": true, "requires": { - "atob": "2.1.0", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.0.0", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -8974,12 +8974,12 @@ "bundled": true, "dev": true, "requires": { - "foreground-child": "1.5.6", - "mkdirp": "0.5.1", - "os-homedir": "1.0.2", - "rimraf": "2.6.2", - "signal-exit": "3.0.2", - "which": "1.3.0" + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" } }, "spdx-correct": { @@ -8987,8 +8987,8 @@ "bundled": true, "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -9001,8 +9001,8 @@ "bundled": true, "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -9015,7 +9015,7 @@ "bundled": true, "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "static-extend": { @@ -9023,8 +9023,8 @@ "bundled": true, "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -9032,7 +9032,7 @@ "bundled": true, "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -9042,8 +9042,8 @@ "bundled": true, "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -9056,7 +9056,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -9066,7 +9066,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -9074,7 +9074,7 @@ "bundled": true, "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-eof": { @@ -9092,11 +9092,11 @@ "bundled": true, "dev": true, "requires": { - "arrify": "1.0.1", - "micromatch": "3.1.10", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" + "arrify": "^1.0.1", + "micromatch": "^3.1.8", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" }, "dependencies": { "arr-diff": { @@ -9114,16 +9114,16 @@ "bundled": true, "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -9131,7 +9131,7 @@ "bundled": true, "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -9141,13 +9141,13 @@ "bundled": true, "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -9155,7 +9155,7 @@ "bundled": true, "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -9163,7 +9163,7 @@ "bundled": true, "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -9171,7 +9171,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -9179,7 +9179,7 @@ "bundled": true, "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -9189,7 +9189,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -9197,7 +9197,7 @@ "bundled": true, "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -9207,9 +9207,9 @@ "bundled": true, "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -9224,14 +9224,14 @@ "bundled": true, "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -9239,7 +9239,7 @@ "bundled": true, "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -9247,7 +9247,7 @@ "bundled": true, "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -9257,10 +9257,10 @@ "bundled": true, "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -9268,7 +9268,7 @@ "bundled": true, "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -9278,7 +9278,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -9286,7 +9286,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -9294,9 +9294,9 @@ "bundled": true, "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-number": { @@ -9304,7 +9304,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -9312,7 +9312,7 @@ "bundled": true, "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -9332,19 +9332,19 @@ "bundled": true, "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } } } @@ -9359,7 +9359,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -9367,10 +9367,10 @@ "bundled": true, "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -9378,8 +9378,8 @@ "bundled": true, "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { "is-number": { @@ -9387,7 +9387,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } } } @@ -9403,9 +9403,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "yargs": { @@ -9414,9 +9414,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -9433,10 +9433,10 @@ "bundled": true, "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -9444,7 +9444,7 @@ "bundled": true, "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -9452,10 +9452,10 @@ "bundled": true, "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -9465,8 +9465,8 @@ "bundled": true, "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -9474,9 +9474,9 @@ "bundled": true, "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -9511,7 +9511,7 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { @@ -9526,8 +9526,8 @@ "bundled": true, "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "which": { @@ -9535,7 +9535,7 @@ "bundled": true, "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -9559,8 +9559,8 @@ "bundled": true, "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -9568,7 +9568,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -9576,9 +9576,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -9593,9 +9593,9 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" } }, "y18n": { @@ -9613,18 +9613,18 @@ "bundled": true, "dev": true, "requires": { - "cliui": "4.0.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" }, "dependencies": { "ansi-regex": { @@ -9642,9 +9642,9 @@ "bundled": true, "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "strip-ansi": { @@ -9652,7 +9652,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "yargs-parser": { @@ -9660,7 +9660,7 @@ "bundled": true, "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -9670,7 +9670,7 @@ "bundled": true, "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { @@ -9700,9 +9700,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -9711,7 +9711,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -9722,7 +9722,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" }, "dependencies": { "isobject": { @@ -9739,8 +9739,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -9749,7 +9749,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -9766,7 +9766,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -9775,7 +9775,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "opener": { @@ -9788,8 +9788,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { "wordwrap": { @@ -9805,12 +9805,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "ora": { @@ -9819,10 +9819,10 @@ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" }, "dependencies": { "cli-cursor": { @@ -9831,7 +9831,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "onetime": { @@ -9846,8 +9846,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } } } @@ -9870,9 +9870,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "os-tmpdir": { @@ -9887,9 +9887,9 @@ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" } }, "p-cancelable": { @@ -9904,7 +9904,7 @@ "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", "dev": true, "requires": { - "p-reduce": "1.0.0" + "p-reduce": "^1.0.0" } }, "p-finally": { @@ -9931,7 +9931,7 @@ "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -9940,7 +9940,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -9961,7 +9961,7 @@ "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", "dev": true, "requires": { - "p-finally": "1.0.0" + "p-finally": "^1.0.0" } }, "p-try": { @@ -9982,9 +9982,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "parse-asn1": { @@ -9993,11 +9993,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.16" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-glob": { @@ -10006,10 +10006,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { @@ -10018,7 +10018,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse-passwd": { @@ -10081,7 +10081,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" }, "dependencies": { "pify": { @@ -10104,11 +10104,11 @@ "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.1", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "performance-now": { @@ -10135,7 +10135,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -10144,7 +10144,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "pluralize": { @@ -10158,9 +10158,9 @@ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", "requires": { - "async": "1.5.2", - "debug": "2.6.8", - "mkdirp": "0.5.1" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" } }, "posix-character-classes": { @@ -10229,7 +10229,7 @@ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dev": true, "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "promise-inflight": { @@ -10244,9 +10244,9 @@ "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", "dev": true, "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "fbjs": "^0.8.16", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, "prr": { @@ -10267,11 +10267,11 @@ "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "pump": { @@ -10280,8 +10280,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -10290,9 +10290,9 @@ "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", "dev": true, "requires": { - "duplexify": "3.5.4", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.5.3", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -10312,9 +10312,9 @@ "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dev": true, "requires": { - "decode-uri-component": "0.2.0", - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "querystring": { @@ -10335,8 +10335,8 @@ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -10345,7 +10345,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -10354,7 +10354,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -10365,7 +10365,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -10376,7 +10376,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -10385,8 +10385,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "react": { @@ -10395,10 +10395,10 @@ "integrity": "sha512-ZmIomM7EE1DvPEnSFAHZn9Vs9zJl5A9H7el0EGTE6ZbW9FKe/14IYAlPbC8iH25YarEQxZL+E8VW7Mi7kfQrDQ==", "dev": true, "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.1" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "react-dom": { @@ -10407,10 +10407,10 @@ "integrity": "sha512-zpGAdwHVn9K0091d+hr+R0qrjoJ84cIBFL2uU60KvWBPfZ7LPSrfqviTxGHWN0sjPZb2hxWzMexwrvJdKePvjg==", "dev": true, "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.1" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "read-chunk": { @@ -10419,8 +10419,8 @@ "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", "dev": true, "requires": { - "pify": "3.0.0", - "safe-buffer": "5.1.1" + "pify": "^3.0.0", + "safe-buffer": "^5.1.1" } }, "read-pkg": { @@ -10429,9 +10429,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -10440,8 +10440,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "readable-stream": { @@ -10450,13 +10450,13 @@ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -10465,10 +10465,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "recast": { @@ -10478,9 +10478,9 @@ "dev": true, "requires": { "ast-types": "0.11.3", - "esprima": "4.0.0", - "private": "0.1.7", - "source-map": "0.6.1" + "esprima": "~4.0.0", + "private": "~0.1.5", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -10497,7 +10497,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.5.0" + "resolve": "^1.1.6" } }, "regenerate": { @@ -10518,9 +10518,9 @@ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.7" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-cache": { @@ -10529,7 +10529,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -10538,8 +10538,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpp": { @@ -10554,9 +10554,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -10571,7 +10571,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -10606,7 +10606,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-ext": { @@ -10633,8 +10633,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "requires-port": { @@ -10648,7 +10648,7 @@ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-cwd": { @@ -10657,7 +10657,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" }, "dependencies": { "resolve-from": { @@ -10674,8 +10674,8 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-from": { @@ -10696,7 +10696,7 @@ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "dev": true, "requires": { - "lowercase-keys": "1.0.1" + "lowercase-keys": "^1.0.0" } }, "restore-cursor": { @@ -10705,8 +10705,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { @@ -10722,7 +10722,7 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -10731,7 +10731,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { @@ -10740,8 +10740,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-async": { @@ -10750,7 +10750,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "run-queue": { @@ -10759,7 +10759,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "rx-lite": { @@ -10774,7 +10774,7 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" } }, "rxjs": { @@ -10798,7 +10798,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "schema-utils": { @@ -10807,8 +10807,8 @@ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "dev": true, "requires": { - "ajv": "6.4.0", - "ajv-keywords": "3.1.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" }, "dependencies": { "ajv": { @@ -10817,10 +10817,10 @@ "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "dev": true, "requires": { - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1", - "uri-js": "3.0.2" + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0", + "uri-js": "^3.0.2" } }, "ajv-keywords": { @@ -10867,10 +10867,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -10879,7 +10879,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -10896,8 +10896,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -10906,7 +10906,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -10921,9 +10921,9 @@ "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", "dev": true, "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, "signal-exit": { @@ -10944,7 +10944,7 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" } }, "slide": { @@ -10959,14 +10959,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.8", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "3.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -10975,7 +10975,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -10984,7 +10984,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -10995,9 +10995,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -11006,7 +11006,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -11015,7 +11015,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -11024,7 +11024,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -11033,9 +11033,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -11058,7 +11058,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "sntp": { @@ -11067,7 +11067,7 @@ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sort-keys": { @@ -11076,7 +11076,7 @@ "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "source-list-map": { @@ -11097,11 +11097,11 @@ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "dev": true, "requires": { - "atob": "2.1.0", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.0.0", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { @@ -11110,7 +11110,7 @@ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.6" } }, "source-map-url": { @@ -11125,8 +11125,8 @@ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -11141,8 +11141,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -11157,7 +11157,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -11172,14 +11172,14 @@ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "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", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -11196,7 +11196,7 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.1" } }, "static-extend": { @@ -11205,8 +11205,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -11215,7 +11215,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -11226,8 +11226,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -11236,8 +11236,8 @@ "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -11246,11 +11246,11 @@ "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.3", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -11265,7 +11265,7 @@ "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", "dev": true, "requires": { - "any-observable": "0.2.0" + "any-observable": "^0.2.0" } }, "strict-uri-encode": { @@ -11286,8 +11286,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -11302,7 +11302,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -11313,7 +11313,7 @@ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -11328,7 +11328,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -11343,8 +11343,8 @@ "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", "dev": true, "requires": { - "first-chunk-stream": "2.0.0", - "strip-bom": "2.0.0" + "first-chunk-stream": "^2.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { "strip-bom": { @@ -11353,7 +11353,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -11388,12 +11388,12 @@ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.4.0", - "lodash": "4.17.4", + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "string-width": "^2.1.1" }, "dependencies": { "ansi-styles": { @@ -11402,7 +11402,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -11411,9 +11411,9 @@ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "supports-color": { @@ -11422,7 +11422,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -11445,7 +11445,7 @@ "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", "dev": true, "requires": { - "tcomb": "3.2.25" + "tcomb": "^3.0.0" } }, "temp": { @@ -11454,8 +11454,8 @@ "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", "dev": true, "requires": { - "os-tmpdir": "1.0.2", - "rimraf": "2.2.8" + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" }, "dependencies": { "rimraf": { @@ -11490,8 +11490,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "timed-out": { @@ -11506,7 +11506,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tmp": { @@ -11515,7 +11515,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-arraybuffer": { @@ -11536,7 +11536,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -11545,10 +11545,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -11557,8 +11557,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { "is-number": { @@ -11567,7 +11567,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } } } @@ -11578,7 +11578,7 @@ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "trim-right": { @@ -11593,14 +11593,14 @@ "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", "dev": true, "requires": { - "arrify": "1.0.1", - "chalk": "2.4.0", - "diff": "3.5.0", - "make-error": "1.3.4", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map-support": "0.5.5", - "yn": "2.0.0" + "arrify": "^1.0.0", + "chalk": "^2.3.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.3", + "yn": "^2.0.0" }, "dependencies": { "ansi-styles": { @@ -11609,7 +11609,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -11618,9 +11618,9 @@ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "minimist": { @@ -11641,8 +11641,8 @@ "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", "dev": true, "requires": { - "buffer-from": "1.0.0", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "supports-color": { @@ -11651,7 +11651,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -11668,18 +11668,18 @@ "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.3.2", - "commander": "2.15.0", - "diff": "3.5.0", - "glob": "7.1.2", - "js-yaml": "3.10.0", - "minimatch": "3.0.4", - "resolve": "1.5.0", - "semver": "5.4.1", - "tslib": "1.9.0", - "tsutils": "2.22.2" + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.12.1" }, "dependencies": { "ansi-styles": { @@ -11688,7 +11688,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -11697,9 +11697,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "commander": { @@ -11714,7 +11714,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -11725,7 +11725,7 @@ "integrity": "sha512-u06FUSulCJ+Y8a2ftuqZN6kIGqdP2yJjUPEngXqmdPND4UQfb04igcotH+dw+IFr417yP6muCLE8/5/Qlfnx0w==", "dev": true, "requires": { - "tslib": "1.9.0" + "tslib": "^1.8.1" } }, "tty-browserify": { @@ -11747,7 +11747,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { @@ -11781,9 +11781,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "yargs": { @@ -11793,9 +11793,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -11814,14 +11814,14 @@ "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.5", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.1.0", - "worker-farm": "1.6.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "commander": { @@ -11842,8 +11842,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" } } } @@ -11859,7 +11859,7 @@ "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", "requires": { - "qs": "2.3.3" + "qs": "~2.3.3" } }, "union-value": { @@ -11868,10 +11868,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -11880,7 +11880,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -11889,10 +11889,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -11903,7 +11903,7 @@ "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", "dev": true, "requires": { - "unique-slug": "2.0.0" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -11912,7 +11912,7 @@ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "universalify": { @@ -11927,8 +11927,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -11937,9 +11937,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -11985,7 +11985,7 @@ "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", "dev": true, "requires": { - "punycode": "2.1.0" + "punycode": "^2.1.0" }, "dependencies": { "punycode": { @@ -12031,7 +12031,7 @@ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dev": true, "requires": { - "prepend-http": "2.0.0" + "prepend-http": "^2.0.0" } }, "url-to-options": { @@ -12052,7 +12052,7 @@ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { @@ -12110,7 +12110,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" } }, "validate-npm-package-license": { @@ -12119,8 +12119,8 @@ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "validator": { @@ -12135,9 +12135,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" }, "dependencies": { "assert-plus": { @@ -12154,8 +12154,8 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } }, @@ -12165,12 +12165,12 @@ "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0", - "strip-bom-stream": "2.0.0", - "vinyl": "1.2.0" + "graceful-fs": "^4.1.2", + "pify": "^2.3.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^2.0.0", + "vinyl": "^1.1.0" }, "dependencies": { "pify": { @@ -12185,7 +12185,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -12205,9 +12205,9 @@ "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", "dev": true, "requires": { - "chokidar": "2.0.3", - "graceful-fs": "4.1.11", - "neo-async": "2.5.1" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" }, "dependencies": { "anymatch": { @@ -12216,8 +12216,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "arr-diff": { @@ -12238,16 +12238,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -12256,7 +12256,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -12267,18 +12267,18 @@ "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.1.2", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.0.4" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.1.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.0" } }, "expand-brackets": { @@ -12287,13 +12287,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.8", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -12302,7 +12302,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -12311,7 +12311,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -12320,7 +12320,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -12329,7 +12329,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -12340,7 +12340,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -12349,7 +12349,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -12360,9 +12360,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -12379,14 +12379,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -12395,7 +12395,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -12404,7 +12404,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -12415,10 +12415,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -12427,7 +12427,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -12438,8 +12438,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -12448,7 +12448,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -12459,7 +12459,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -12468,7 +12468,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -12477,9 +12477,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-extglob": { @@ -12494,7 +12494,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -12503,7 +12503,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -12512,7 +12512,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -12535,19 +12535,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } } } @@ -12558,25 +12558,25 @@ "integrity": "sha512-Fu/k/3fZeGtIhuFkiYpIy1UDHhMiGKjG4FFPVuvG+5Os2lWA1ttWpmi9Qnn6AgfZqj9MvhZW/rmj/ip+nHr06g==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.4.0", - "ajv-keywords": "3.1.0", - "chrome-trace-event": "0.1.3", - "enhanced-resolve": "4.0.0", - "eslint-scope": "3.7.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.5.1", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.5", - "tapable": "1.0.0", - "uglifyjs-webpack-plugin": "1.2.5", - "watchpack": "1.5.0", - "webpack-sources": "1.1.0" + "acorn": "^5.0.0", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^0.1.1", + "enhanced-resolve": "^4.0.0", + "eslint-scope": "^3.7.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.0.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.0.1" }, "dependencies": { "ajv": { @@ -12585,10 +12585,10 @@ "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "dev": true, "requires": { - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1", - "uri-js": "3.0.2" + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0", + "uri-js": "^3.0.2" } }, "ajv-keywords": { @@ -12615,16 +12615,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -12633,7 +12633,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -12644,13 +12644,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.8", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -12659,7 +12659,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -12668,7 +12668,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -12677,7 +12677,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -12686,7 +12686,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -12697,7 +12697,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -12706,7 +12706,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -12717,9 +12717,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -12736,14 +12736,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -12752,7 +12752,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -12761,7 +12761,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -12772,10 +12772,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -12784,7 +12784,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -12795,7 +12795,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -12804,7 +12804,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -12813,9 +12813,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-number": { @@ -12824,7 +12824,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -12833,7 +12833,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -12856,19 +12856,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } } } @@ -12879,7 +12879,7 @@ "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", "dev": true, "requires": { - "jscodeshift": "0.4.1" + "jscodeshift": "^0.4.0" }, "dependencies": { "ast-types": { @@ -12894,21 +12894,21 @@ "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", "dev": true, "requires": { - "async": "1.5.2", - "babel-plugin-transform-flow-strip-types": "6.22.0", - "babel-preset-es2015": "6.24.1", - "babel-preset-stage-1": "6.24.1", - "babel-register": "6.26.0", - "babylon": "6.18.0", - "colors": "1.2.1", - "flow-parser": "0.70.0", - "lodash": "4.17.4", - "micromatch": "2.3.11", + "async": "^1.5.0", + "babel-plugin-transform-flow-strip-types": "^6.8.0", + "babel-preset-es2015": "^6.9.0", + "babel-preset-stage-1": "^6.5.0", + "babel-register": "^6.9.0", + "babylon": "^6.17.3", + "colors": "^1.1.2", + "flow-parser": "^0.*", + "lodash": "^4.13.1", + "micromatch": "^2.3.7", "node-dir": "0.1.8", - "nomnom": "1.8.1", - "recast": "0.12.9", - "temp": "0.8.3", - "write-file-atomic": "1.3.4" + "nomnom": "^1.8.1", + "recast": "^0.12.5", + "temp": "^0.8.1", + "write-file-atomic": "^1.2.0" } }, "recast": { @@ -12918,10 +12918,10 @@ "dev": true, "requires": { "ast-types": "0.10.1", - "core-js": "2.5.1", - "esprima": "4.0.0", - "private": "0.1.7", - "source-map": "0.6.1" + "core-js": "^2.4.1", + "esprima": "~4.0.0", + "private": "~0.1.5", + "source-map": "~0.6.1" } }, "source-map": { @@ -12938,32 +12938,32 @@ "integrity": "sha512-bjNeIUO51D4OsmZ5ufzcpzVoacjxfWNfeBZKYL3jc+EMfCME3TyfdCPSUoKiOnebQChfupQuIRpAnx7L4l3Hew==", "dev": true, "requires": { - "chalk": "2.4.0", - "cross-spawn": "6.0.5", - "diff": "3.5.0", - "enhanced-resolve": "4.0.0", - "envinfo": "4.4.2", - "glob-all": "3.1.0", - "global-modules": "1.0.0", - "got": "8.3.0", - "import-local": "1.0.0", - "inquirer": "5.2.0", - "interpret": "1.1.0", - "jscodeshift": "0.5.0", - "listr": "0.13.0", - "loader-utils": "1.1.0", - "lodash": "4.17.10", - "log-symbols": "2.2.0", - "mkdirp": "0.5.1", - "p-each-series": "1.0.0", - "p-lazy": "1.0.0", - "prettier": "1.12.1", - "supports-color": "5.4.0", - "v8-compile-cache": "1.1.2", - "webpack-addons": "1.1.5", - "yargs": "11.1.0", - "yeoman-environment": "2.0.6", - "yeoman-generator": "2.0.4" + "chalk": "^2.3.2", + "cross-spawn": "^6.0.5", + "diff": "^3.5.0", + "enhanced-resolve": "^4.0.0", + "envinfo": "^4.4.2", + "glob-all": "^3.1.0", + "global-modules": "^1.0.0", + "got": "^8.2.0", + "import-local": "^1.0.0", + "inquirer": "^5.1.0", + "interpret": "^1.0.4", + "jscodeshift": "^0.5.0", + "listr": "^0.13.0", + "loader-utils": "^1.1.0", + "lodash": "^4.17.5", + "log-symbols": "^2.2.0", + "mkdirp": "^0.5.1", + "p-each-series": "^1.0.0", + "p-lazy": "^1.0.0", + "prettier": "^1.5.3", + "supports-color": "^5.3.0", + "v8-compile-cache": "^1.1.2", + "webpack-addons": "^1.1.5", + "yargs": "^11.1.0", + "yeoman-environment": "^2.0.0", + "yeoman-generator": "^2.0.3" }, "dependencies": { "ansi-regex": { @@ -12978,7 +12978,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -12987,9 +12987,9 @@ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "cross-spawn": { @@ -12998,11 +12998,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.4", - "path-key": "2.0.1", - "semver": "5.5.0", - "shebang-command": "1.2.0", - "which": "1.3.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "inquirer": { @@ -13011,19 +13011,19 @@ "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", "dev": true, "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.10", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rxjs": "5.5.10", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" } }, "lodash": { @@ -13044,7 +13044,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -13053,7 +13053,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -13064,8 +13064,8 @@ "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -13088,7 +13088,7 @@ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -13116,7 +13116,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -13125,8 +13125,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -13135,7 +13135,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -13144,9 +13144,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -13163,7 +13163,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "write-file-atomic": { @@ -13172,9 +13172,9 @@ "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" } }, "xtend": { @@ -13201,18 +13201,18 @@ "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" }, "dependencies": { "ansi-regex": { @@ -13233,9 +13233,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "strip-ansi": { @@ -13244,7 +13244,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "yargs-parser": { @@ -13253,7 +13253,7 @@ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -13264,7 +13264,7 @@ "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { @@ -13281,19 +13281,19 @@ "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", "dev": true, "requires": { - "chalk": "2.4.0", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "globby": "6.1.0", - "grouped-queue": "0.3.3", - "inquirer": "3.3.0", - "is-scoped": "1.0.0", - "lodash": "4.17.4", - "log-symbols": "2.2.0", - "mem-fs": "1.1.3", - "text-table": "0.2.0", - "untildify": "3.0.2" + "chalk": "^2.1.0", + "debug": "^3.1.0", + "diff": "^3.3.1", + "escape-string-regexp": "^1.0.2", + "globby": "^6.1.0", + "grouped-queue": "^0.3.3", + "inquirer": "^3.3.0", + "is-scoped": "^1.0.0", + "lodash": "^4.17.4", + "log-symbols": "^2.1.0", + "mem-fs": "^1.1.0", + "text-table": "^0.2.0", + "untildify": "^3.0.2" }, "dependencies": { "ansi-styles": { @@ -13302,7 +13302,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -13311,9 +13311,9 @@ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "debug": { @@ -13331,11 +13331,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { @@ -13350,7 +13350,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -13361,31 +13361,31 @@ "integrity": "sha512-Sgvz3MAkOpEIobcpW3rjEl6bOTNnl8SkibP9z7hYKfIGIlw0QDC2k0MAeXvyE2pLqc2M0Duql+6R7/W9GrJojg==", "dev": true, "requires": { - "async": "2.6.0", - "chalk": "2.4.0", - "cli-table": "0.3.1", - "cross-spawn": "5.1.0", - "dargs": "5.1.0", - "dateformat": "3.0.3", - "debug": "3.1.0", - "detect-conflict": "1.0.1", - "error": "7.0.2", - "find-up": "2.1.0", - "github-username": "4.1.0", - "istextorbinary": "2.2.1", - "lodash": "4.17.4", - "make-dir": "1.2.0", - "mem-fs-editor": "3.0.2", - "minimist": "1.2.0", - "pretty-bytes": "4.0.2", - "read-chunk": "2.1.0", - "read-pkg-up": "3.0.0", - "rimraf": "2.6.2", - "run-async": "2.3.0", - "shelljs": "0.8.1", - "text-table": "0.2.0", - "through2": "2.0.3", - "yeoman-environment": "2.0.6" + "async": "^2.6.0", + "chalk": "^2.3.0", + "cli-table": "^0.3.1", + "cross-spawn": "^5.1.0", + "dargs": "^5.1.0", + "dateformat": "^3.0.2", + "debug": "^3.1.0", + "detect-conflict": "^1.0.0", + "error": "^7.0.2", + "find-up": "^2.1.0", + "github-username": "^4.0.0", + "istextorbinary": "^2.1.0", + "lodash": "^4.17.4", + "make-dir": "^1.1.0", + "mem-fs-editor": "^3.0.2", + "minimist": "^1.2.0", + "pretty-bytes": "^4.0.2", + "read-chunk": "^2.1.0", + "read-pkg-up": "^3.0.0", + "rimraf": "^2.6.2", + "run-async": "^2.0.0", + "shelljs": "^0.8.0", + "text-table": "^0.2.0", + "through2": "^2.0.0", + "yeoman-environment": "^2.0.5" }, "dependencies": { "ansi-styles": { @@ -13394,7 +13394,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "async": { @@ -13403,7 +13403,7 @@ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.14.0" } }, "chalk": { @@ -13412,9 +13412,9 @@ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "debug": { @@ -13432,10 +13432,10 @@ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "minimist": { @@ -13450,8 +13450,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "path-type": { @@ -13460,7 +13460,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "read-pkg": { @@ -13469,9 +13469,9 @@ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { @@ -13480,8 +13480,8 @@ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "3.0.0" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" } }, "supports-color": { @@ -13490,7 +13490,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } diff --git a/src/js/algorithms/dynamic-programing/longest-common-subsequence-print.js b/src/js/algorithms/dynamic-programing/longest-common-subsequence-print.js index 0ddc1b37..e18c6e11 100644 --- a/src/js/algorithms/dynamic-programing/longest-common-subsequence-print.js +++ b/src/js/algorithms/dynamic-programing/longest-common-subsequence-print.js @@ -15,7 +15,7 @@ function printSolution(solution, wordX, m, n) { } x = solution[a][b]; } - // console.log('lcs: ' + answer); + return answer; } export function lcs(wordX, wordY) { const m = wordX.length; @@ -47,6 +47,5 @@ export function lcs(wordX, wordY) { // console.log(l[i].join()); // console.log(solution[i].join()); } - printSolution(solution, wordX, m, n); - return l[m][n]; + return printSolution(solution, wordX, m, n); } diff --git a/src/js/index.js b/src/js/index.js index 096a418c..a79f2d30 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -92,5 +92,7 @@ export { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack'; export { lcs } from './algorithms/dynamic-programing/longest-common-subsequence'; export { lcs as lcsPrint } from './algorithms/dynamic-programing/longest-common-subsequence-print'; export { lcs as lcsRecursive } from './algorithms/greedy/longest-common-subsequence'; +export { matrixChainOrder } from './algorithms/dynamic-programing/matrix-chain-multiplication'; +export { matrixChainOrder as matrixChainOrderGreedy } from './algorithms/greedy/matrix-chain-multiplication'; export { ratInAMaze } from './algorithms/backtracking/rat-in-maze'; export { sudokuSolver } from './algorithms/backtracking/sudoku-solver'; diff --git a/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts b/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts index 3fbbab8e..7c26b986 100644 --- a/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts +++ b/src/ts/algorithms/dynamic-programing/longest-common-subsequence-print.ts @@ -31,9 +31,9 @@ export function lcs(wordX: string, wordY: string) { // console.log(solution[i].join()); } - printSolution(solution, wordX, m, n); + return printSolution(solution, wordX, m, n); - return l[m][n]; + // return l[m][n]; } function printSolution(solution: Array>, wordX: string, m: number, n: number) { @@ -55,5 +55,6 @@ function printSolution(solution: Array>, wordX: string, m: number, x = solution[a][b]; } + return answer; // console.log('lcs: ' + answer); } diff --git a/test/ts/algorithms/dynamic-programming/knapsack-recursive.spec.ts b/test/ts/algorithms/dynamic-programming/knapsack-recursive.spec.ts new file mode 100644 index 00000000..4b1f7672 --- /dev/null +++ b/test/ts/algorithms/dynamic-programming/knapsack-recursive.spec.ts @@ -0,0 +1,16 @@ +import 'mocha'; +import { expect } from 'chai'; +import { knapSackRecursive } from '../../../../src/ts/index'; + +describe('KnapSack Dynamic Programming - Recursive', () => { + const SIZE = 100; + + it('works with recursive approach', () => { + const values = [3, 4, 5]; + const weights = [2, 3, 4]; + const capacity = 5; + const n = values.length; + + expect(knapSackRecursive(capacity, weights, values, n)).to.equal(7); + }); +}); diff --git a/test/ts/algorithms/dynamic-programming/knapsack.spec.ts b/test/ts/algorithms/dynamic-programming/knapsack.spec.ts new file mode 100644 index 00000000..e14f95cc --- /dev/null +++ b/test/ts/algorithms/dynamic-programming/knapsack.spec.ts @@ -0,0 +1,16 @@ +import 'mocha'; +import { expect } from 'chai'; +import { knapSack } from '../../../../src/ts/index'; + +describe('KnapSack Dynamic Programming', () => { + const SIZE = 100; + + it('works with DP approach', () => { + const values = [3, 4, 5]; + const weights = [2, 3, 4]; + const capacity = 5; + const n = values.length; + + expect(knapSack(capacity, weights, values, n)).to.equal(7); + }); +}); diff --git a/test/ts/algorithms/greedy/knapsack.spec.ts b/test/ts/algorithms/greedy/knapsack.spec.ts index 0997bafd..4ec03bc1 100644 --- a/test/ts/algorithms/greedy/knapsack.spec.ts +++ b/test/ts/algorithms/greedy/knapsack.spec.ts @@ -2,7 +2,7 @@ import 'mocha'; import { expect } from 'chai'; import { knapSackGreedy } from '../../../../src/ts/index'; -describe('Min Coin Change Greedy', () => { +describe('KnapSack Greedy', () => { const SIZE = 100; it('works with greedy approach', () => { diff --git a/test/ts/algorithms/greedy/longest-common-subsequence.spec.ts b/test/ts/algorithms/greedy/longest-common-subsequence.spec.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/test/ts/algorithms/greedy/matrix-chain-multiplication.spec.ts b/test/ts/algorithms/greedy/matrix-chain-multiplication.spec.ts deleted file mode 100644 index e69de29b..00000000 From 302667d0442460e799e1223dbd2b40f71fa1632b Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 1 May 2018 10:36:25 -0400 Subject: [PATCH 129/188] padded-blocks --- .eslintrc.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index af313c2f..6569a375 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -29,6 +29,7 @@ "no-return-assign": 0, "no-restricted-globals": 0, "no-multi-assign": 0, - "prefer-destructuring": ["error", {"object": true, "array": false}] + "prefer-destructuring": ["error", {"object": true, "array": false}], + "padded-blocks": 0 } } From 873f9292bae2dba8ef8ec4af954021503e226d89 Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 1 May 2018 10:36:48 -0400 Subject: [PATCH 130/188] [Algorithm Design and Techniques] --- .../09-MatrixChainMultiplicationDP.js | 3 +- .../10-MatrixChainMultiplicationRecursive.js | 3 +- src/ts/index.ts | 2 ++ .../knapsack-recursive.spec.js | 15 ++++++++++ .../dynamic-programming/knapsack.spec.js | 15 ++++++++++ .../longest-common-subsequence-print.spec.js | 13 ++++++++ .../longest-common-subsequence.spec.js | 13 ++++++++ .../matrix-chain-multiplication.spec.js | 12 ++++++++ .../min-coin-change.spec.js | 30 +++++++++++++++++++ test/js/algorithms/greedy/knapsack.spec.js | 14 +++++++++ .../greedy/longest-common-subsequence.spec.js | 13 ++++++++ .../matrix-chain-multiplication.spec.js | 12 ++++++++ .../algorithms/greedy/min-coin-change.spec.js | 12 ++++++++ .../knapsack-recursive.spec.ts | 1 - .../dynamic-programming/knapsack.spec.ts | 1 - .../longest-common-subsequence-print.spec.ts | 13 ++++++++ .../longest-common-subsequence.spec.ts | 13 ++++++++ .../matrix-chain-multiplication.spec.ts | 12 ++++++++ test/ts/algorithms/greedy/knapsack.spec.ts | 1 - .../greedy/longest-common-subsequence.spec.ts | 13 ++++++++ .../matrix-chain-multiplication.spec.ts | 12 ++++++++ .../algorithms/greedy/min-coin-change.spec.ts | 2 -- 22 files changed, 216 insertions(+), 9 deletions(-) create mode 100644 test/js/algorithms/dynamic-programming/knapsack-recursive.spec.js create mode 100644 test/js/algorithms/dynamic-programming/knapsack.spec.js create mode 100644 test/js/algorithms/dynamic-programming/longest-common-subsequence-print.spec.js create mode 100644 test/js/algorithms/dynamic-programming/longest-common-subsequence.spec.js create mode 100644 test/js/algorithms/dynamic-programming/matrix-chain-multiplication.spec.js create mode 100644 test/js/algorithms/dynamic-programming/min-coin-change.spec.js create mode 100644 test/js/algorithms/greedy/knapsack.spec.js create mode 100644 test/js/algorithms/greedy/longest-common-subsequence.spec.js create mode 100644 test/js/algorithms/greedy/matrix-chain-multiplication.spec.js create mode 100644 test/js/algorithms/greedy/min-coin-change.spec.js create mode 100644 test/ts/algorithms/dynamic-programming/longest-common-subsequence-print.spec.ts create mode 100644 test/ts/algorithms/dynamic-programming/longest-common-subsequence.spec.ts create mode 100644 test/ts/algorithms/dynamic-programming/matrix-chain-multiplication.spec.ts create mode 100644 test/ts/algorithms/greedy/longest-common-subsequence.spec.ts create mode 100644 test/ts/algorithms/greedy/matrix-chain-multiplication.spec.ts diff --git a/examples/chapter14/09-MatrixChainMultiplicationDP.js b/examples/chapter14/09-MatrixChainMultiplicationDP.js index 8eb154a3..50e92fd5 100644 --- a/examples/chapter14/09-MatrixChainMultiplicationDP.js +++ b/examples/chapter14/09-MatrixChainMultiplicationDP.js @@ -1,5 +1,4 @@ const { matrixChainOrder } = PacktDataStructuresAlgorithms; const p = [10, 100, 5, 50, 1]; -const n = p.length; -console.log(matrixChainOrder(p, n)); +console.log(matrixChainOrder(p)); diff --git a/examples/chapter14/10-MatrixChainMultiplicationRecursive.js b/examples/chapter14/10-MatrixChainMultiplicationRecursive.js index aecd31e2..97245276 100644 --- a/examples/chapter14/10-MatrixChainMultiplicationRecursive.js +++ b/examples/chapter14/10-MatrixChainMultiplicationRecursive.js @@ -1,5 +1,4 @@ const { matrixChainOrderGreedy } = PacktDataStructuresAlgorithms; const p = [10, 100, 5, 50, 1]; -const n = p.length; -console.log(matrixChainOrderGreedy(p, n)); +console.log(matrixChainOrderGreedy(p)); diff --git a/src/ts/index.ts b/src/ts/index.ts index 6a3ed6cb..fca04e09 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -71,6 +71,8 @@ export { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack'; export { lcs } from './algorithms/dynamic-programing/longest-common-subsequence'; export { lcs as lcsPrint } from './algorithms/dynamic-programing/longest-common-subsequence-print'; export { lcs as lcsRecursive } from './algorithms/greedy/longest-common-subsequence'; +export { matrixChainOrder } from './algorithms/dynamic-programing/matrix-chain-multiplication'; +export { matrixChainOrder as matrixChainOrderGreedy } from './algorithms/greedy/matrix-chain-multiplication'; export { ratInAMaze } from './algorithms/backtracking/rat-in-maze'; export { sudokuSolver } from './algorithms/backtracking/sudoku-solver'; diff --git a/test/js/algorithms/dynamic-programming/knapsack-recursive.spec.js b/test/js/algorithms/dynamic-programming/knapsack-recursive.spec.js new file mode 100644 index 00000000..589b8e9d --- /dev/null +++ b/test/js/algorithms/dynamic-programming/knapsack-recursive.spec.js @@ -0,0 +1,15 @@ +import 'mocha'; +import { expect } from 'chai'; +import { knapSackRecursive } from '../../../../src/js/index'; + +describe('KnapSack Dynamic Programming - Recursive', () => { + + it('works with recursive approach', () => { + const values = [3, 4, 5]; + const weights = [2, 3, 4]; + const capacity = 5; + const n = values.length; + + expect(knapSackRecursive(capacity, weights, values, n)).to.equal(7); + }); +}); diff --git a/test/js/algorithms/dynamic-programming/knapsack.spec.js b/test/js/algorithms/dynamic-programming/knapsack.spec.js new file mode 100644 index 00000000..47e2ab37 --- /dev/null +++ b/test/js/algorithms/dynamic-programming/knapsack.spec.js @@ -0,0 +1,15 @@ +import 'mocha'; +import { expect } from 'chai'; +import { knapSack } from '../../../../src/js/index'; + +describe('KnapSack Dynamic Programming', () => { + + it('works with DP approach', () => { + const values = [3, 4, 5]; + const weights = [2, 3, 4]; + const capacity = 5; + const n = values.length; + + expect(knapSack(capacity, weights, values, n)).to.equal(7); + }); +}); diff --git a/test/js/algorithms/dynamic-programming/longest-common-subsequence-print.spec.js b/test/js/algorithms/dynamic-programming/longest-common-subsequence-print.spec.js new file mode 100644 index 00000000..8b5ba9fe --- /dev/null +++ b/test/js/algorithms/dynamic-programming/longest-common-subsequence-print.spec.js @@ -0,0 +1,13 @@ +import 'mocha'; +import { expect } from 'chai'; +import { lcsPrint } from '../../../../src/js/index'; + +describe('LCS Dynamic Programming with print solution', () => { + + it('works with DP approach with print solution', () => { + const wordX = 'acbaed'; + const wordY = 'abcadf'; + + expect(lcsPrint(wordX, wordY)).to.equal('acad'); + }); +}); diff --git a/test/js/algorithms/dynamic-programming/longest-common-subsequence.spec.js b/test/js/algorithms/dynamic-programming/longest-common-subsequence.spec.js new file mode 100644 index 00000000..121cf4fa --- /dev/null +++ b/test/js/algorithms/dynamic-programming/longest-common-subsequence.spec.js @@ -0,0 +1,13 @@ +import 'mocha'; +import { expect } from 'chai'; +import { lcs } from '../../../../src/js/index'; + +describe('LCS Dynamic Programming', () => { + + it('works with DP approach', () => { + const wordX = 'acbaed'; + const wordY = 'abcadf'; + + expect(lcs(wordX, wordY)).to.equal(4); + }); +}); diff --git a/test/js/algorithms/dynamic-programming/matrix-chain-multiplication.spec.js b/test/js/algorithms/dynamic-programming/matrix-chain-multiplication.spec.js new file mode 100644 index 00000000..db1972e3 --- /dev/null +++ b/test/js/algorithms/dynamic-programming/matrix-chain-multiplication.spec.js @@ -0,0 +1,12 @@ +import 'mocha'; +import { expect } from 'chai'; +import { matrixChainOrder } from '../../../../src/js/index'; + +describe('Matrix Chain Multiplication', () => { + + it('works with DP approach', () => { + const p = [10, 100, 5, 50, 1]; + + expect(matrixChainOrder(p)).to.equal(1750); + }); +}); diff --git a/test/js/algorithms/dynamic-programming/min-coin-change.spec.js b/test/js/algorithms/dynamic-programming/min-coin-change.spec.js new file mode 100644 index 00000000..ecc8be1b --- /dev/null +++ b/test/js/algorithms/dynamic-programming/min-coin-change.spec.js @@ -0,0 +1,30 @@ +import 'mocha'; +import { expect } from 'chai'; +import { minCoinChange } from '../../../../src/js/index'; + +describe('Dynamic Programming: Min Coin Change', () => { + + it('works with amount 0', () => { + expect(minCoinChange([1, 2, 3], 0)).to.deep.equal([]); + }); + + it('works with amount 1', () => { + expect(minCoinChange([1, 2, 3], 1)).to.deep.equal([1]); + }); + + it('works with amount 2', () => { + expect(minCoinChange([1, 2, 3], 2)).to.deep.equal([2]); + }); + + it('works with amount 3', () => { + expect(minCoinChange([1, 2, 3], 3)).to.deep.equal([3]); + }); + + it('works with amount 4', () => { + expect(minCoinChange([1, 2, 3], 4)).to.deep.equal([1, 3]); + }); + + it('works with amount 6', () => { + expect(minCoinChange([1, 2, 3], 6)).to.deep.equal([3, 3]); + }); +}); diff --git a/test/js/algorithms/greedy/knapsack.spec.js b/test/js/algorithms/greedy/knapsack.spec.js new file mode 100644 index 00000000..39be668a --- /dev/null +++ b/test/js/algorithms/greedy/knapsack.spec.js @@ -0,0 +1,14 @@ +import 'mocha'; +import { expect } from 'chai'; +import { knapSackGreedy } from '../../../../src/js/index'; + +describe('KnapSack Greedy', () => { + + it('works with greedy approach', () => { + const values = [3, 4, 5]; + const weights = [2, 3, 4]; + const capacity = 5; + + expect(knapSackGreedy(capacity, weights, values)).to.equal(7); + }); +}); diff --git a/test/js/algorithms/greedy/longest-common-subsequence.spec.js b/test/js/algorithms/greedy/longest-common-subsequence.spec.js new file mode 100644 index 00000000..7be0e4c4 --- /dev/null +++ b/test/js/algorithms/greedy/longest-common-subsequence.spec.js @@ -0,0 +1,13 @@ +import 'mocha'; +import { expect } from 'chai'; +import { lcsRecursive } from '../../../../src/js/index'; + +describe('LCS Greedy', () => { + + it('works with Greedy approach', () => { + const wordX = 'acbaed'; + const wordY = 'abcadf'; + + expect(lcsRecursive(wordX, wordY)).to.equal(4); + }); +}); diff --git a/test/js/algorithms/greedy/matrix-chain-multiplication.spec.js b/test/js/algorithms/greedy/matrix-chain-multiplication.spec.js new file mode 100644 index 00000000..c9d53888 --- /dev/null +++ b/test/js/algorithms/greedy/matrix-chain-multiplication.spec.js @@ -0,0 +1,12 @@ +import 'mocha'; +import { expect } from 'chai'; +import { matrixChainOrderGreedy } from '../../../../src/js/index'; + +describe('Matrix Chain Multiplication', () => { + + it('works with DP approach', () => { + const p = [10, 100, 5, 50, 1]; + + expect(matrixChainOrderGreedy(p)).to.equal(1750); + }); +}); diff --git a/test/js/algorithms/greedy/min-coin-change.spec.js b/test/js/algorithms/greedy/min-coin-change.spec.js new file mode 100644 index 00000000..ffa0b674 --- /dev/null +++ b/test/js/algorithms/greedy/min-coin-change.spec.js @@ -0,0 +1,12 @@ +import 'mocha'; +import { expect } from 'chai'; +import { minCoinChangeGreedy } from '../../../../src/js/index'; + +describe('Min Coin Change Greedy', () => { + + it('works with greedy approach', () => { + expect(minCoinChangeGreedy([1, 5, 10], 15)).to.deep.equal([10, 5]); + expect(minCoinChangeGreedy([1, 3, 4], 6)).to.deep.equal([4, 1, 1]); + }); + +}); diff --git a/test/ts/algorithms/dynamic-programming/knapsack-recursive.spec.ts b/test/ts/algorithms/dynamic-programming/knapsack-recursive.spec.ts index 4b1f7672..944cd655 100644 --- a/test/ts/algorithms/dynamic-programming/knapsack-recursive.spec.ts +++ b/test/ts/algorithms/dynamic-programming/knapsack-recursive.spec.ts @@ -3,7 +3,6 @@ import { expect } from 'chai'; import { knapSackRecursive } from '../../../../src/ts/index'; describe('KnapSack Dynamic Programming - Recursive', () => { - const SIZE = 100; it('works with recursive approach', () => { const values = [3, 4, 5]; diff --git a/test/ts/algorithms/dynamic-programming/knapsack.spec.ts b/test/ts/algorithms/dynamic-programming/knapsack.spec.ts index e14f95cc..113f9182 100644 --- a/test/ts/algorithms/dynamic-programming/knapsack.spec.ts +++ b/test/ts/algorithms/dynamic-programming/knapsack.spec.ts @@ -3,7 +3,6 @@ import { expect } from 'chai'; import { knapSack } from '../../../../src/ts/index'; describe('KnapSack Dynamic Programming', () => { - const SIZE = 100; it('works with DP approach', () => { const values = [3, 4, 5]; diff --git a/test/ts/algorithms/dynamic-programming/longest-common-subsequence-print.spec.ts b/test/ts/algorithms/dynamic-programming/longest-common-subsequence-print.spec.ts new file mode 100644 index 00000000..4626c593 --- /dev/null +++ b/test/ts/algorithms/dynamic-programming/longest-common-subsequence-print.spec.ts @@ -0,0 +1,13 @@ +import 'mocha'; +import { expect } from 'chai'; +import { lcsPrint } from '../../../../src/ts/index'; + +describe('LCS Dynamic Programming with print solution', () => { + + it('works with DP approach with print solution', () => { + const wordX = 'acbaed'; + const wordY = 'abcadf'; + + expect(lcsPrint(wordX, wordY)).to.equal('acad'); + }); +}); diff --git a/test/ts/algorithms/dynamic-programming/longest-common-subsequence.spec.ts b/test/ts/algorithms/dynamic-programming/longest-common-subsequence.spec.ts new file mode 100644 index 00000000..3da8abcd --- /dev/null +++ b/test/ts/algorithms/dynamic-programming/longest-common-subsequence.spec.ts @@ -0,0 +1,13 @@ +import 'mocha'; +import { expect } from 'chai'; +import { lcs } from '../../../../src/ts/index'; + +describe('LCS Dynamic Programming', () => { + + it('works with DP approach', () => { + const wordX = 'acbaed'; + const wordY = 'abcadf'; + + expect(lcs(wordX, wordY)).to.equal(4); + }); +}); diff --git a/test/ts/algorithms/dynamic-programming/matrix-chain-multiplication.spec.ts b/test/ts/algorithms/dynamic-programming/matrix-chain-multiplication.spec.ts new file mode 100644 index 00000000..09b58d2d --- /dev/null +++ b/test/ts/algorithms/dynamic-programming/matrix-chain-multiplication.spec.ts @@ -0,0 +1,12 @@ +import 'mocha'; +import { expect } from 'chai'; +import { matrixChainOrder } from '../../../../src/ts/index'; + +describe('Matrix Chain Multiplication', () => { + + it('works with DP approach', () => { + const p = [10, 100, 5, 50, 1]; + + expect(matrixChainOrder(p)).to.equal(1750); + }); +}); diff --git a/test/ts/algorithms/greedy/knapsack.spec.ts b/test/ts/algorithms/greedy/knapsack.spec.ts index 4ec03bc1..de73ff47 100644 --- a/test/ts/algorithms/greedy/knapsack.spec.ts +++ b/test/ts/algorithms/greedy/knapsack.spec.ts @@ -3,7 +3,6 @@ import { expect } from 'chai'; import { knapSackGreedy } from '../../../../src/ts/index'; describe('KnapSack Greedy', () => { - const SIZE = 100; it('works with greedy approach', () => { const values = [3, 4, 5]; diff --git a/test/ts/algorithms/greedy/longest-common-subsequence.spec.ts b/test/ts/algorithms/greedy/longest-common-subsequence.spec.ts new file mode 100644 index 00000000..82d4000a --- /dev/null +++ b/test/ts/algorithms/greedy/longest-common-subsequence.spec.ts @@ -0,0 +1,13 @@ +import 'mocha'; +import { expect } from 'chai'; +import { lcsRecursive } from '../../../../src/ts/index'; + +describe('LCS Greedy', () => { + + it('works with Greedy approach', () => { + const wordX = 'acbaed'; + const wordY = 'abcadf'; + + expect(lcsRecursive(wordX, wordY)).to.equal(4); + }); +}); diff --git a/test/ts/algorithms/greedy/matrix-chain-multiplication.spec.ts b/test/ts/algorithms/greedy/matrix-chain-multiplication.spec.ts new file mode 100644 index 00000000..d6655752 --- /dev/null +++ b/test/ts/algorithms/greedy/matrix-chain-multiplication.spec.ts @@ -0,0 +1,12 @@ +import 'mocha'; +import { expect } from 'chai'; +import { matrixChainOrderGreedy } from '../../../../src/ts/index'; + +describe('Matrix Chain Multiplication', () => { + + it('works with DP approach', () => { + const p = [10, 100, 5, 50, 1]; + + expect(matrixChainOrderGreedy(p)).to.equal(1750); + }); +}); diff --git a/test/ts/algorithms/greedy/min-coin-change.spec.ts b/test/ts/algorithms/greedy/min-coin-change.spec.ts index c16e4de0..946d19ff 100644 --- a/test/ts/algorithms/greedy/min-coin-change.spec.ts +++ b/test/ts/algorithms/greedy/min-coin-change.spec.ts @@ -4,8 +4,6 @@ import { minCoinChangeGreedy } from '../../../../src/ts/index'; describe('Min Coin Change Greedy', () => { - const SIZE = 100; - it('works with greedy approach', () => { expect(minCoinChangeGreedy([1, 5, 10], 15)).to.deep.equal([10, 5]); expect(minCoinChangeGreedy([1, 3, 4], 6)).to.deep.equal([4, 1, 1]); From 0e8a608d1904a01d44189b2e970995a27d78f93e Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 1 May 2018 10:46:39 -0400 Subject: [PATCH 131/188] updated travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 65552b8d..7def9b91 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ script: - npm run go after_success: - npm run coverage - - test $TRAVIS_BRANCH = "third-edition" && firebase deploy --token $FIREBASE_TOKEN --non-interactive + - test $TRAVIS_BRANCH = "master" && test $TRAVIS_PULL_REQUEST = "false" && firebase deploy --token $FIREBASE_TOKEN --non-interactive notifications: email: on_failure: change From 6e51e622a10c457a4d01d152be4a764dc4ee6933 Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 1 May 2018 12:24:37 -0400 Subject: [PATCH 132/188] added tests --- test/js/algorithms/search/search-algorithms-tests.js | 8 ++++++++ test/ts/algorithms/search/search-algorithms-tests.ts | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/test/js/algorithms/search/search-algorithms-tests.js b/test/js/algorithms/search/search-algorithms-tests.js index d3e1774e..f0c698a2 100644 --- a/test/js/algorithms/search/search-algorithms-tests.js +++ b/test/js/algorithms/search/search-algorithms-tests.js @@ -33,6 +33,14 @@ export function testSearchAlgorithm( expect(searchAlgorithm(array, SIZE)).to.equal(SIZE - 1); }); + it('finds value at different positions', () => { + const array = createSortedArray(); + + for (let value = 1; value <= SIZE; value++) { + expect(searchAlgorithm(array, value)).to.equal(value - 1); + } + }); + if (config.customEquals) { it('finds value with custom equals function', () => { const array = [{ key: 1 }, { key: 2 }, { key: 3 }]; diff --git a/test/ts/algorithms/search/search-algorithms-tests.ts b/test/ts/algorithms/search/search-algorithms-tests.ts index 05d1d88d..dd590f5d 100644 --- a/test/ts/algorithms/search/search-algorithms-tests.ts +++ b/test/ts/algorithms/search/search-algorithms-tests.ts @@ -39,6 +39,14 @@ export function testSearchAlgorithm( expect(searchAlgorithm(array, SIZE)).to.equal(SIZE - 1); }); + it('finds value at different positions', () => { + const array = createSortedArray(); + + for (let value = 1; value <= SIZE; value++) { + expect(searchAlgorithm(array, value)).to.equal(value - 1); + } + }); + if (config.customEquals) { it('finds value with custom equals function', () => { const array = [{ key: 1 }, { key: 2 }, { key: 3 }]; From eaeb1888b9940a510132e9be677d9124473edbc8 Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 1 May 2018 15:32:13 -0400 Subject: [PATCH 133/188] Math algorithms --- src/ts/algorithms/math/find-divisors.ts | 4 +++ src/ts/algorithms/math/primality-test.ts | 5 ++-- src/ts/algorithms/math/sieve-eratosthenes.ts | 21 +++++++++---- src/ts/index.ts | 9 ++++++ test/ts/algorithms/math/find-divisors.spec.ts | 17 +++++++++++ test/ts/algorithms/math/gcd.spec.ts | 16 ++++++++++ .../math/greatest-difference.spec.ts | 14 +++++++++ test/ts/algorithms/math/lcm.spec.ts | 16 ++++++++++ .../ts/algorithms/math/primality-test.spec.ts | 30 +++++++++++++++++++ .../math/sieve-eratosthenes.spec.ts | 17 +++++++++++ 10 files changed, 141 insertions(+), 8 deletions(-) create mode 100644 test/ts/algorithms/math/find-divisors.spec.ts create mode 100644 test/ts/algorithms/math/gcd.spec.ts create mode 100644 test/ts/algorithms/math/greatest-difference.spec.ts create mode 100644 test/ts/algorithms/math/lcm.spec.ts create mode 100644 test/ts/algorithms/math/primality-test.spec.ts create mode 100644 test/ts/algorithms/math/sieve-eratosthenes.spec.ts diff --git a/src/ts/algorithms/math/find-divisors.ts b/src/ts/algorithms/math/find-divisors.ts index 1397d555..ea454418 100644 --- a/src/ts/algorithms/math/find-divisors.ts +++ b/src/ts/algorithms/math/find-divisors.ts @@ -12,6 +12,10 @@ export const findDivisors = (num: number) => { } } + if (num >= 2 && !divisors.includes(num)) { + divisors.push(num); + } + divisors.sort((a, b) => a - b); return divisors; diff --git a/src/ts/algorithms/math/primality-test.ts b/src/ts/algorithms/math/primality-test.ts index 6ab95167..f04e899d 100644 --- a/src/ts/algorithms/math/primality-test.ts +++ b/src/ts/algorithms/math/primality-test.ts @@ -4,7 +4,7 @@ export const isPrime = (n: number) => { } const sqrt = Math.floor(Math.sqrt(n)); - for (let i = 2; i < sqrt; i++) { + for (let i = 2; i <= sqrt; i++) { if (n % i === 0) { return false; } @@ -33,4 +33,5 @@ export const testPrime = (n: number) => { return true; }; -export const isPrime2 = (n: number) => ![...Array(n).keys()].slice(2).map(i => !(n % i)).includes(true) && ![0, 1].includes(n); +// tslint:disable-next-line:max-line-length +export const isPrime2 = (n: number) => (n >= 2) ? (![...Array(n).keys()].slice(2).map(i => !(n % i)).includes(true) && ![0, 1].includes(n)) : false; diff --git a/src/ts/algorithms/math/sieve-eratosthenes.ts b/src/ts/algorithms/math/sieve-eratosthenes.ts index 1c2cb06d..353389a1 100644 --- a/src/ts/algorithms/math/sieve-eratosthenes.ts +++ b/src/ts/algorithms/math/sieve-eratosthenes.ts @@ -1,18 +1,27 @@ export const sieveOfEratosthenes = (n: number) => { - const prime: boolean[] = []; + const sieve: boolean[] = []; + const primes: number[] = []; - for (let i = 0; i < n; i++) { - prime[i] = true; + sieve[1] = false; + + for (let i = 2; i <= n; i++) { + sieve[i] = true; } for (let p = 2; p * p <= n; p++) { - if (prime[p]) { + if (sieve[p]) { for (let i = p * 2; i <= n; i += p) { - prime[i] = false; + sieve[i] = false; } } } - return prime.filter(num => num === true); + sieve.forEach((value, index) => { + if (value) { + primes.push(index); + } + }, primes); + + return primes; }; diff --git a/src/ts/index.ts b/src/ts/index.ts index fca04e09..fafc6eca 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -76,6 +76,15 @@ export { matrixChainOrder as matrixChainOrderGreedy } from './algorithms/greedy/ export { ratInAMaze } from './algorithms/backtracking/rat-in-maze'; export { sudokuSolver } from './algorithms/backtracking/sudoku-solver'; +// others +export { findDivisors } from './algorithms/math/find-divisors'; +export { gcd } from './algorithms/math/gcd'; +export { lcm } from './algorithms/math/lcm'; +export { greatestDifference } from './algorithms/math/greatest-difference'; +export { isPrime } from './algorithms/math/primality-test'; +export { testPrime } from './algorithms/math/primality-test'; +export { isPrime2 } from './algorithms/math/primality-test'; +export { sieveOfEratosthenes } from './algorithms/math/sieve-eratosthenes'; /* import { hotPotato } from './others/hot-potato'; diff --git a/test/ts/algorithms/math/find-divisors.spec.ts b/test/ts/algorithms/math/find-divisors.spec.ts new file mode 100644 index 00000000..b4223378 --- /dev/null +++ b/test/ts/algorithms/math/find-divisors.spec.ts @@ -0,0 +1,17 @@ +import 'mocha'; +import { expect } from 'chai'; +import { findDivisors } from '../../../../src/ts/index'; + +describe('Find Divisors', () => { + + it('returns the divisors of the number', () => { + + expect(findDivisors(-1)).to.deep.equal([]); + expect(findDivisors(0)).to.deep.equal([]); + expect(findDivisors(1)).to.deep.equal([1]); + expect(findDivisors(2)).to.deep.equal([1, 2]); + expect(findDivisors(3)).to.deep.equal([1, 3]); + expect(findDivisors(4)).to.deep.equal([1, 2, 4]); + expect(findDivisors(100)).to.deep.equal([1, 2, 4, 5, 10, 20, 25, 50, 100 ]); + }); +}); diff --git a/test/ts/algorithms/math/gcd.spec.ts b/test/ts/algorithms/math/gcd.spec.ts new file mode 100644 index 00000000..fd565a33 --- /dev/null +++ b/test/ts/algorithms/math/gcd.spec.ts @@ -0,0 +1,16 @@ +import 'mocha'; +import { expect } from 'chai'; +import { gcd } from '../../../../src/ts/index'; + +describe('GCD', () => { + + it('returns the gcd between two numbers', () => { + + expect(gcd(1, 0)).to.equal(0); + expect(gcd(1, 1)).to.equal(1); + expect(gcd(2, 2)).to.equal(2); + expect(gcd(2, 4)).to.equal(2); + expect(gcd(2, 3)).to.equal(1); + expect(gcd(10, 1000)).to.equal(10); + }); +}); diff --git a/test/ts/algorithms/math/greatest-difference.spec.ts b/test/ts/algorithms/math/greatest-difference.spec.ts new file mode 100644 index 00000000..889e4ef6 --- /dev/null +++ b/test/ts/algorithms/math/greatest-difference.spec.ts @@ -0,0 +1,14 @@ +import 'mocha'; +import { expect } from 'chai'; +import { greatestDifference } from '../../../../src/ts/index'; + +describe('Greatest Difference', () => { + + it('returns the gcd between two numbers', () => { + + expect(greatestDifference([5, 6, 7, 2, 10])).to.equal(8); + expect(greatestDifference([1, 2, 4])).to.equal(3); + expect(greatestDifference([1, 3])).to.equal(2); + + }); +}); diff --git a/test/ts/algorithms/math/lcm.spec.ts b/test/ts/algorithms/math/lcm.spec.ts new file mode 100644 index 00000000..2262161c --- /dev/null +++ b/test/ts/algorithms/math/lcm.spec.ts @@ -0,0 +1,16 @@ +import 'mocha'; +import { expect } from 'chai'; +import { lcm } from '../../../../src/ts/index'; + +describe('LCM', () => { + + it('returns the lcm between two numbers', () => { + + expect(lcm(0, 0)).to.equal(0); + expect(lcm(1, 1)).to.equal(1); + expect(lcm(1, 2)).to.equal(2); + expect(lcm(2, 4)).to.equal(4); + expect(lcm(2, 3)).to.equal(6); + + }); +}); diff --git a/test/ts/algorithms/math/primality-test.spec.ts b/test/ts/algorithms/math/primality-test.spec.ts new file mode 100644 index 00000000..b62610df --- /dev/null +++ b/test/ts/algorithms/math/primality-test.spec.ts @@ -0,0 +1,30 @@ +import 'mocha'; +import { expect } from 'chai'; +import { isPrime, testPrime, isPrime2 } from '../../../../src/ts/index'; + +describe('Primality Tests', () => { + + it('returns if the number is prime or not - isPrime', () => { + testIsPrime(isPrime); + }); + + it('returns if the number is prime or not - testPrime', () => { + testIsPrime(testPrime); + }); + + it('returns if the number is prime or not - isPrime2', () => { + testIsPrime(isPrime2); + }); + + function testIsPrime(primeFunction) { + expect(primeFunction(-1)).to.equal(false); + expect(primeFunction(0)).to.equal(false); + expect(primeFunction(1)).to.equal(false); + expect(primeFunction(2)).to.equal(true); + expect(primeFunction(3)).to.equal(true); + expect(primeFunction(4)).to.equal(false); + expect(primeFunction(5)).to.equal(true); + expect(primeFunction(10)).to.equal(false); + expect(primeFunction(113)).to.equal(true); + } +}); diff --git a/test/ts/algorithms/math/sieve-eratosthenes.spec.ts b/test/ts/algorithms/math/sieve-eratosthenes.spec.ts new file mode 100644 index 00000000..1cd31c2d --- /dev/null +++ b/test/ts/algorithms/math/sieve-eratosthenes.spec.ts @@ -0,0 +1,17 @@ +import 'mocha'; +import { expect } from 'chai'; +import { sieveOfEratosthenes } from '../../../../src/ts/index'; + +describe('Sieve Of Eratosthene', () => { + + it('returns the prime numbers', () => { + + expect(sieveOfEratosthenes(0)).to.deep.equal([]); + expect(sieveOfEratosthenes(1)).to.deep.equal([]); + expect(sieveOfEratosthenes(2)).to.deep.equal([2]); + expect(sieveOfEratosthenes(3)).to.deep.equal([2, 3]); + expect(sieveOfEratosthenes(4)).to.deep.equal([2, 3]); + expect(sieveOfEratosthenes(5)).to.deep.equal([2, 3, 5]); + + }); +}); From fc26932ff732262aa75c055b05f2a3c5fe9ed784 Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 1 May 2018 15:57:27 -0400 Subject: [PATCH 134/188] [Trees] --- src/ts/data-structures/models/red-black-node.ts | 8 -------- src/ts/data-structures/red-black-tree.ts | 4 ++-- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/ts/data-structures/models/red-black-node.ts b/src/ts/data-structures/models/red-black-node.ts index 20da6f60..76493d9e 100644 --- a/src/ts/data-structures/models/red-black-node.ts +++ b/src/ts/data-structures/models/red-black-node.ts @@ -19,12 +19,4 @@ export class RedBlackNode extends Node { isRed() { return this.color === Colors.RED; } - - flipColor() { - if (this.color === Colors.RED) { - this.color = Colors.BLACK; - } else { - this.color = Colors.RED; - } - } } diff --git a/src/ts/data-structures/red-black-tree.ts b/src/ts/data-structures/red-black-tree.ts index b58b71df..0d206e2f 100644 --- a/src/ts/data-structures/red-black-tree.ts +++ b/src/ts/data-structures/red-black-tree.ts @@ -111,7 +111,7 @@ export default class RedBlackTree extends BinarySearchTree { const uncle = grandParent.right; // case 1: uncle of node is also red - only recoloring - if (uncle && uncle.color === Colors.RED) { + if (uncle && uncle.isRed()) { grandParent.color = Colors.RED; parent.color = Colors.BLACK; uncle.color = Colors.BLACK; @@ -137,7 +137,7 @@ export default class RedBlackTree extends BinarySearchTree { const uncle = grandParent.left; // case 1: uncle is read - only recoloring - if (uncle && uncle.color === Colors.RED) { + if (uncle && uncle.isRed()) { grandParent.color = Colors.RED; parent.color = Colors.BLACK; uncle.color = Colors.BLACK; From 829552eb8abd9581ed85389d3a0f5f930567b50a Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 1 May 2018 16:53:26 -0400 Subject: [PATCH 135/188] [Graphs] --- .eslintrc.json | 4 +- examples/chapter12/04-Dijkstra.js | 2 +- .../algorithms/graph/breadth-first-search.ts | 11 ++-- src/ts/algorithms/graph/depth-first-search.ts | 27 ++++---- src/ts/data-structures/graph.ts | 5 +- src/ts/index.ts | 2 + .../graph/breadth-first-search.spec.js | 65 +++++++++++++++++++ .../graph/depth-first-search.spec.js | 64 ++++++++++++++++++ test/js/algorithms/graph/dijkstra.spec.js | 21 ++++++ .../algorithms/graph/floyd-warshall.spec.js | 26 ++++++++ test/js/algorithms/graph/kruskal.spec.js | 18 +++++ test/js/algorithms/graph/prim.spec.js | 18 +++++ .../graph/breadth-first-search.spec.ts | 47 ++++++++++++++ .../graph/depth-first-search.spec.ts | 58 +++++++++++++++++ test/ts/algorithms/graph/dijkstra.spec.ts | 21 ++++++ .../algorithms/graph/floyd-warshall.spec.ts | 26 ++++++++ test/ts/algorithms/graph/kruskal.spec.ts | 18 +++++ test/ts/algorithms/graph/prim.spec.ts | 18 +++++ 18 files changed, 426 insertions(+), 25 deletions(-) create mode 100644 test/js/algorithms/graph/breadth-first-search.spec.js create mode 100644 test/js/algorithms/graph/depth-first-search.spec.js create mode 100644 test/js/algorithms/graph/dijkstra.spec.js create mode 100644 test/js/algorithms/graph/floyd-warshall.spec.js create mode 100644 test/js/algorithms/graph/kruskal.spec.js create mode 100644 test/js/algorithms/graph/prim.spec.js create mode 100644 test/ts/algorithms/graph/breadth-first-search.spec.ts create mode 100644 test/ts/algorithms/graph/depth-first-search.spec.ts create mode 100644 test/ts/algorithms/graph/dijkstra.spec.ts create mode 100644 test/ts/algorithms/graph/floyd-warshall.spec.ts create mode 100644 test/ts/algorithms/graph/kruskal.spec.ts create mode 100644 test/ts/algorithms/graph/prim.spec.ts diff --git a/.eslintrc.json b/.eslintrc.json index 6569a375..b02c43f4 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -30,6 +30,8 @@ "no-restricted-globals": 0, "no-multi-assign": 0, "prefer-destructuring": ["error", {"object": true, "array": false}], - "padded-blocks": 0 + "padded-blocks": 0, + "no-sparse-arrays": 0, + "array-bracket-spacing": 0 } } diff --git a/examples/chapter12/04-Dijkstra.js b/examples/chapter12/04-Dijkstra.js index fbba7ec1..dfa58854 100644 --- a/examples/chapter12/04-Dijkstra.js +++ b/examples/chapter12/04-Dijkstra.js @@ -11,7 +11,7 @@ const graph = [ console.log("********* Dijkstra's Algorithm - Shortest Path ***********"); -var dist = dijkstra(graph, 0); +const dist = dijkstra(graph, 0); for (i = 0; i < dist.length; i++){ console.log(i + '\t\t' + dist[i]); diff --git a/src/ts/algorithms/graph/breadth-first-search.ts b/src/ts/algorithms/graph/breadth-first-search.ts index 147bebe7..95438007 100644 --- a/src/ts/algorithms/graph/breadth-first-search.ts +++ b/src/ts/algorithms/graph/breadth-first-search.ts @@ -15,16 +15,17 @@ const initializeColor = (vertices: (string | number)[]) => { return color; }; -export const breadthFirstSearch = (graph: Graph, callback: Function) => { +export const breadthFirstSearch = (graph: Graph, startVertex: any, callback: Function) => { const vertices = graph.getVertices(); const adjList = graph.getAdjList(); const color = initializeColor(vertices); const queue = new Queue(); - queue.enqueue(vertices); + + queue.enqueue(startVertex); while (!queue.isEmpty()) { - const u = queue.dequeue(), - neighbors = adjList.get(u); + const u = queue.dequeue(); + const neighbors = adjList.get(u); color[u] = Colors.GREY; for (let i = 0; i < neighbors.length; i++) { const w = neighbors[i]; @@ -40,7 +41,7 @@ export const breadthFirstSearch = (graph: Graph, callback: Function) => { } }; -export const bfs = (graph: Graph, startVertex: number) => { +export const bfs = (graph: Graph, startVertex: any) => { const vertices = graph.getVertices(); const adjList = graph.getAdjList(); const color = initializeColor(vertices); diff --git a/src/ts/algorithms/graph/depth-first-search.ts b/src/ts/algorithms/graph/depth-first-search.ts index e47ef54c..de47c93f 100644 --- a/src/ts/algorithms/graph/depth-first-search.ts +++ b/src/ts/algorithms/graph/depth-first-search.ts @@ -54,12 +54,12 @@ const DFSVisit = ( d: any, f: any, p: any, - time: number, + time: any, adjList: any ) => { // console.log('discovered ' + u); color[u] = Colors.GREY; - d[u] = ++time; + d[u] = ++time.count; const neighbors = adjList.get(u); for (let i = 0; i < neighbors.length; i++) { const w = neighbors[i]; @@ -69,35 +69,34 @@ const DFSVisit = ( } } color[u] = Colors.BLACK; - f[u] = ++time; + f[u] = ++time.count; // console.log('explored ' + u); }; export const DFS = (graph: Graph) => { - const vertices = graph.getVertices(); const adjList = graph.getAdjList(); const color = initializeColor(vertices); const d: any = {}; const f: any = {}; const p: any = {}; - const time = 0; + const time = { count: 0 }; for (let i = 0; i < vertices.length; i++) { - f[vertices[i]] = 0; - d[vertices[i]] = 0; - p[vertices[i]] = null; + f[vertices[i]] = 0; + d[vertices[i]] = 0; + p[vertices[i]] = null; } for (let i = 0; i < vertices.length; i++) { - if (color[vertices[i]] === Colors.WHITE) { - DFSVisit(vertices[i], color, d, f, p, time, adjList); - } + if (color[vertices[i]] === Colors.WHITE) { + DFSVisit(vertices[i], color, d, f, p, time, adjList); + } } return { - discovery: d, - finished: f, - predecessors: p + discovery: d, + finished: f, + predecessors: p }; }; diff --git a/src/ts/data-structures/graph.ts b/src/ts/data-structures/graph.ts index 2123d407..b07a4eb4 100644 --- a/src/ts/data-structures/graph.ts +++ b/src/ts/data-structures/graph.ts @@ -20,13 +20,10 @@ export default class Graph { if (!this.adjList.get(b)) { this.addVertex(b); } - this.adjList.get(a).push(b); - - if (!this.isDirected) { + if (this.isDirected !== true) { this.adjList.get(b).push(a); } - // adjList.get(w).push(v); //commented to run the improved DFS with topological sorting } getVertices() { diff --git a/src/ts/index.ts b/src/ts/index.ts index fafc6eca..cc8aec85 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -1,6 +1,8 @@ import * as _util from './util'; export const util = _util; +export { default as Stack } from './data-structures/stack'; + export { default as LinkedList } from './data-structures/linked-list'; export { default as DoublyLinkedList } from './data-structures/doubly-linked-list'; export { default as CircularLinkedList } from './data-structures/circular-linked-list'; diff --git a/test/js/algorithms/graph/breadth-first-search.spec.js b/test/js/algorithms/graph/breadth-first-search.spec.js new file mode 100644 index 00000000..1d7b5e75 --- /dev/null +++ b/test/js/algorithms/graph/breadth-first-search.spec.js @@ -0,0 +1,65 @@ +import 'mocha'; +import { expect } from 'chai'; +import { BFS, breadthFirstSearch, Graph } from '../../../../src/js/index'; + +describe('Breadth First Search', () => { + let count; + const vertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; + let graph; + + function assertCallback(value) { + expect(value).to.equal(vertices[count]); + count++; + } + + beforeEach(() => { + count = 0; + graph = new Graph(); + + for (let i = 0; i < vertices.length; i++) { + graph.addVertex(vertices[i]); + } + + graph.addEdge('A', 'B'); + graph.addEdge('A', 'C'); + graph.addEdge('A', 'D'); + graph.addEdge('C', 'D'); + graph.addEdge('C', 'G'); + graph.addEdge('D', 'G'); + graph.addEdge('D', 'H'); + graph.addEdge('B', 'E'); + graph.addEdge('B', 'F'); + graph.addEdge('E', 'I'); + }); + + it('breadthFirstSearch', () => { + breadthFirstSearch(graph, vertices[0], assertCallback); + }); + + it('sorthest path - BFS', () => { + const shortestPathA = BFS(graph, vertices[0]); + + expect(shortestPathA.distances).to.deep.equal({ + A: 0, + B: 1, + C: 1, + D: 1, + E: 2, + F: 2, + G: 2, + H: 2, + I: 3 + }); + expect(shortestPathA.predecessors).to.deep.equal({ + A: null, + B: 'A', + C: 'A', + D: 'A', + E: 'B', + F: 'B', + G: 'C', + H: 'D', + I: 'E' + }); + }); +}); diff --git a/test/js/algorithms/graph/depth-first-search.spec.js b/test/js/algorithms/graph/depth-first-search.spec.js new file mode 100644 index 00000000..e0cbcde9 --- /dev/null +++ b/test/js/algorithms/graph/depth-first-search.spec.js @@ -0,0 +1,64 @@ +import 'mocha'; +import { expect } from 'chai'; +import { DFS, depthFirstSearch, Graph } from '../../../../src/js/index'; + +describe('Depth First Search', () => { + let count; + const vertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; + const dfsCallBack = ['A', 'B', 'E', 'I', 'F', 'C', 'D', 'G', 'H']; + let graph; + + beforeEach(() => { + count = 0; + graph = new Graph(true); + }); + + function assertCallback(value) { + expect(value).to.equal(dfsCallBack[count]); + count++; + } + + it('depthFirstSearch', () => { + for (let i = 0; i < vertices.length; i++) { + graph.addVertex(vertices[i]); + } + + graph.addEdge('A', 'B'); + graph.addEdge('A', 'C'); + graph.addEdge('A', 'D'); + graph.addEdge('C', 'D'); + graph.addEdge('C', 'G'); + graph.addEdge('D', 'G'); + graph.addEdge('D', 'H'); + graph.addEdge('B', 'E'); + graph.addEdge('B', 'F'); + graph.addEdge('E', 'I'); + + depthFirstSearch(graph, assertCallback); + }); + + it('topological sort - DFS', () => { + const myVertices = ['A', 'B', 'C', 'D', 'E', 'F']; + for (let i = 0; i < myVertices.length; i++) { + graph.addVertex(myVertices[i]); + } + graph.addEdge('A', 'C'); + graph.addEdge('A', 'D'); + graph.addEdge('B', 'D'); + graph.addEdge('B', 'E'); + graph.addEdge('C', 'F'); + graph.addEdge('F', 'E'); + + const result = DFS(graph); + + expect(result.discovery).to.deep.equal({ + A: 1, B: 11, C: 2, D: 8, E: 4, F: 3 + }); + expect(result.finished).to.deep.equal({ + A: 10, B: 12, C: 7, D: 9, E: 5, F: 6 + }); + expect(result.predecessors).to.deep.equal({ + A: null, B: null, C: 'A', D: 'A', E: 'F', F: 'C' + }); + }); +}); diff --git a/test/js/algorithms/graph/dijkstra.spec.js b/test/js/algorithms/graph/dijkstra.spec.js new file mode 100644 index 00000000..7a88f040 --- /dev/null +++ b/test/js/algorithms/graph/dijkstra.spec.js @@ -0,0 +1,21 @@ +import 'mocha'; +import { expect } from 'chai'; +import { dijkstra } from '../../../../src/js/index'; + +describe('Dijkstra\'s Algorithm - Shortest Path', () => { + + it('Shortest Path', () => { + const graph = [ + [0, 2, 4, 0, 0, 0], + [0, 0, 2, 4, 2, 0], + [0, 0, 0, 0, 3, 0], + [0, 0, 0, 0, 0, 2], + [0, 0, 0, 3, 0, 2], + [0, 0, 0, 0, 0, 0] + ]; + + expect(dijkstra(graph, 0)).to.deep.equal([0, 2, 4, 6, 4, 6]); + + }); + +}); diff --git a/test/js/algorithms/graph/floyd-warshall.spec.js b/test/js/algorithms/graph/floyd-warshall.spec.js new file mode 100644 index 00000000..0f62cb7a --- /dev/null +++ b/test/js/algorithms/graph/floyd-warshall.spec.js @@ -0,0 +1,26 @@ +import 'mocha'; +import { expect } from 'chai'; +import { floydWarshall } from '../../../../src/js/index'; + +describe('Floyd-Warshall Algorithm - All-Pairs Shortest Path', () => { + it('All-Pairs Shortest Path', () => { + const INF = Infinity; + const graph = [ + [INF, 2, 4, INF, INF, INF], + [INF, INF, 2, 4, 2, INF], + [INF, INF, INF, INF, 3, INF], + [INF, INF, INF, INF, INF, 2], + [INF, INF, INF, 3, INF, 2], + [INF, INF, INF, INF, INF, INF] + ]; + + expect(floydWarshall(graph)).to.deep.equal([ + [0, 2, 4, 6, 4, 6], + [INF, 0, 2, 4, 2, 4], + [INF, INF, 0, 6, 3, 5], + [INF, INF, INF, 0, INF, 2], + [INF, INF, INF, 3, 0, 2], + [INF, INF, INF, INF, INF, 0] + ]); + }); +}); diff --git a/test/js/algorithms/graph/kruskal.spec.js b/test/js/algorithms/graph/kruskal.spec.js new file mode 100644 index 00000000..38a2132c --- /dev/null +++ b/test/js/algorithms/graph/kruskal.spec.js @@ -0,0 +1,18 @@ +import 'mocha'; +import { expect } from 'chai'; +import { kruskal } from '../../../../src/js/index'; + +describe('Kruskal Algorithm - Minimum Spanning Tree', () => { + it('Minimum Spanning Tree', () => { + const graph = [ + [0, 2, 4, 0, 0, 0], + [2, 0, 2, 4, 2, 0], + [4, 2, 0, 0, 3, 0], + [0, 4, 0, 0, 3, 2], + [0, 2, 3, 3, 0, 2], + [0, 0, 0, 2, 2, 0] + ]; + + expect(kruskal(graph)).to.deep.equal([ , 0, 1, 1, 1, 3]); + }); +}); diff --git a/test/js/algorithms/graph/prim.spec.js b/test/js/algorithms/graph/prim.spec.js new file mode 100644 index 00000000..9e0b6b31 --- /dev/null +++ b/test/js/algorithms/graph/prim.spec.js @@ -0,0 +1,18 @@ +import 'mocha'; +import { expect } from 'chai'; +import { prim } from '../../../../src/js/index'; + +describe('Prim\'s Algorithm - Minimum Spanning Tree', () => { + it('Minimum Spanning Tree', () => { + const graph = [ + [0, 2, 4, 0, 0, 0], + [2, 0, 2, 4, 2, 0], + [4, 2, 0, 0, 3, 0], + [0, 4, 0, 0, 3, 2], + [0, 2, 3, 3, 0, 2], + [0, 0, 0, 2, 2, 0] + ]; + + expect(prim(graph)).to.deep.equal([-1, 0, 1, 5, 1, 4]); + }); +}); diff --git a/test/ts/algorithms/graph/breadth-first-search.spec.ts b/test/ts/algorithms/graph/breadth-first-search.spec.ts new file mode 100644 index 00000000..e528ea54 --- /dev/null +++ b/test/ts/algorithms/graph/breadth-first-search.spec.ts @@ -0,0 +1,47 @@ +import 'mocha'; +import { expect } from 'chai'; +import { BFS, breadthFirstSearch, Graph, Stack } from '../../../../src/ts/index'; + +describe('Breadth First Search', () => { + + let count; + const vertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; + let graph: Graph; + + beforeEach(() => { + count = 0; + graph = new Graph(); + + for (let i = 0; i < vertices.length; i++) { + graph.addVertex(vertices[i]); + } + + graph.addEdge('A', 'B'); + graph.addEdge('A', 'C'); + graph.addEdge('A', 'D'); + graph.addEdge('C', 'D'); + graph.addEdge('C', 'G'); + graph.addEdge('D', 'G'); + graph.addEdge('D', 'H'); + graph.addEdge('B', 'E'); + graph.addEdge('B', 'F'); + graph.addEdge('E', 'I'); + }); + + it('breadthFirstSearch', () => { + breadthFirstSearch(graph, vertices[0], assertCallback); + }); + + function assertCallback(value) { + expect(value).to.equal(vertices[count]); + count++; + } + + it('sorthest path - BFS', () => { + const shortestPathA = BFS(graph, vertices[0]); + + expect(shortestPathA.distances).to.deep.equal({A: 0, B: 1, C: 1, D: 1, E: 2,  F: 2, G: 2, H: 2, I: 3}); + expect(shortestPathA.predecessors).to.deep.equal({A: null, B: 'A', C: 'A', D: 'A', E: 'B',  F: 'B', G: 'C', H: 'D', I: 'E'}); + }); + +}); diff --git a/test/ts/algorithms/graph/depth-first-search.spec.ts b/test/ts/algorithms/graph/depth-first-search.spec.ts new file mode 100644 index 00000000..60e2921c --- /dev/null +++ b/test/ts/algorithms/graph/depth-first-search.spec.ts @@ -0,0 +1,58 @@ +import 'mocha'; +import { expect } from 'chai'; +import { DFS, depthFirstSearch, Graph } from '../../../../src/ts/index'; + +describe('Depth First Search', () => { + let count; + const vertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; + const dfsCallBack = ['A', 'B', 'E', 'I', 'F', 'C', 'D', 'G', 'H']; + let graph: Graph; + + beforeEach(() => { + count = 0; + graph = new Graph(true); + }); + + it('depthFirstSearch', () => { + for (let i = 0; i < vertices.length; i++) { + graph.addVertex(vertices[i]); + } + + graph.addEdge('A', 'B'); + graph.addEdge('A', 'C'); + graph.addEdge('A', 'D'); + graph.addEdge('C', 'D'); + graph.addEdge('C', 'G'); + graph.addEdge('D', 'G'); + graph.addEdge('D', 'H'); + graph.addEdge('B', 'E'); + graph.addEdge('B', 'F'); + graph.addEdge('E', 'I'); + + depthFirstSearch(graph, assertCallback); + }); + + function assertCallback(value) { + expect(value).to.equal(dfsCallBack[count]); + count++; + } + + it('topological sort - DFS', () => { + const myVertices = ['A', 'B', 'C', 'D', 'E', 'F']; + for (let i = 0; i < myVertices.length; i++) { + graph.addVertex(myVertices[i]); + } + graph.addEdge('A', 'C'); + graph.addEdge('A', 'D'); + graph.addEdge('B', 'D'); + graph.addEdge('B', 'E'); + graph.addEdge('C', 'F'); + graph.addEdge('F', 'E'); + + const result = DFS(graph); + + expect(result.discovery).to.deep.equal({A: 1, B: 11, C: 2, D: 8, E: 4, F: 3}); + expect(result.finished).to.deep.equal({A: 10, B: 12, C: 7, D: 9, E: 5, F: 6}); + expect(result.predecessors).to.deep.equal({A: null, B: null, C: 'A', D: 'A', E: 'F', F: 'C'}); + }); +}); diff --git a/test/ts/algorithms/graph/dijkstra.spec.ts b/test/ts/algorithms/graph/dijkstra.spec.ts new file mode 100644 index 00000000..05b2e2f9 --- /dev/null +++ b/test/ts/algorithms/graph/dijkstra.spec.ts @@ -0,0 +1,21 @@ +import 'mocha'; +import { expect } from 'chai'; +import { dijkstra } from '../../../../src/ts/index'; + +describe('Dijkstra\'s Algorithm - Shortest Path', () => { + + it('Shortest Path', () => { + const graph = [ + [0, 2, 4, 0, 0, 0], + [0, 0, 2, 4, 2, 0], + [0, 0, 0, 0, 3, 0], + [0, 0, 0, 0, 0, 2], + [0, 0, 0, 3, 0, 2], + [0, 0, 0, 0, 0, 0] + ]; + + expect(dijkstra(graph, 0)).to.deep.equal([0, 2, 4, 6, 4, 6]); + + }); + +}); diff --git a/test/ts/algorithms/graph/floyd-warshall.spec.ts b/test/ts/algorithms/graph/floyd-warshall.spec.ts new file mode 100644 index 00000000..cf0adae2 --- /dev/null +++ b/test/ts/algorithms/graph/floyd-warshall.spec.ts @@ -0,0 +1,26 @@ +import 'mocha'; +import { expect } from 'chai'; +import { floydWarshall } from '../../../../src/ts/index'; + +describe('Floyd-Warshall Algorithm - All-Pairs Shortest Path', () => { + it('All-Pairs Shortest Path', () => { + const INF = Infinity; + const graph = [ + [INF, 2, 4, INF, INF, INF], + [INF, INF, 2, 4, 2, INF], + [INF, INF, INF, INF, 3, INF], + [INF, INF, INF, INF, INF, 2], + [INF, INF, INF, 3, INF, 2], + [INF, INF, INF, INF, INF, INF] + ]; + + expect(floydWarshall(graph)).to.deep.equal([ + [0, 2, 4, 6, 4, 6], + [INF, 0, 2, 4, 2, 4], + [INF, INF, 0, 6, 3, 5], + [INF, INF, INF, 0, INF, 2], + [INF, INF, INF, 3, 0, 2], + [INF, INF, INF, INF, INF, 0] + ]); + }); +}); diff --git a/test/ts/algorithms/graph/kruskal.spec.ts b/test/ts/algorithms/graph/kruskal.spec.ts new file mode 100644 index 00000000..838c643e --- /dev/null +++ b/test/ts/algorithms/graph/kruskal.spec.ts @@ -0,0 +1,18 @@ +import 'mocha'; +import { expect } from 'chai'; +import { kruskal } from '../../../../src/ts/index'; + +describe('Kruskal Algorithm - Minimum Spanning Tree', () => { + it('Minimum Spanning Tree', () => { + const graph = [ + [0, 2, 4, 0, 0, 0], + [2, 0, 2, 4, 2, 0], + [4, 2, 0, 0, 3, 0], + [0, 4, 0, 0, 3, 2], + [0, 2, 3, 3, 0, 2], + [0, 0, 0, 2, 2, 0] + ]; + + expect(kruskal(graph)).to.deep.equal([ , 0, 1, 1, 1, 3]); + }); +}); diff --git a/test/ts/algorithms/graph/prim.spec.ts b/test/ts/algorithms/graph/prim.spec.ts new file mode 100644 index 00000000..18224d71 --- /dev/null +++ b/test/ts/algorithms/graph/prim.spec.ts @@ -0,0 +1,18 @@ +import 'mocha'; +import { expect } from 'chai'; +import { prim } from '../../../../src/ts/index'; + +describe('Prim\'s Algorithm - Minimum Spanning Tree', () => { + it('Minimum Spanning Tree', () => { + const graph = [ + [0, 2, 4, 0, 0, 0], + [2, 0, 2, 4, 2, 0], + [4, 2, 0, 0, 3, 0], + [0, 4, 0, 0, 3, 2], + [0, 2, 3, 3, 0, 2], + [0, 0, 0, 2, 2, 0] + ]; + + expect(prim(graph)).to.deep.equal([-1, 0, 1, 5, 1, 4]); + }); +}); From 168f71bb50187fc6216e5717beed49c796f316f6 Mon Sep 17 00:00:00 2001 From: loiane Date: Tue, 1 May 2018 17:00:21 -0400 Subject: [PATCH 136/188] updated README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aa17055a..88e7a8ee 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Learning JavaScript Data Structures and Algorithms ==================================== -[![Build Status](https://travis-ci.org/loiane/javascript-datastructures-algorithms.svg?branch=third-edition)](https://travis-ci.org/loiane/javascript-datastructures-algorithms) +[![Build Status](https://travis-ci.org/loiane/javascript-datastructures-algorithms.svg?branch=master)](https://travis-ci.org/loiane/javascript-datastructures-algorithms) [![codecov](https://codecov.io/gh/loiane/javascript-datastructures-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/loiane/javascript-datastructures-algorithms) [![devDependencies Status](https://david-dm.org/loiane/javascript-datastructures-algorithms/dev-status.svg)](https://david-dm.org/loiane/javascript-datastructures-algorithms?type=dev) [![dependencies Status](https://david-dm.org/loiane/javascript-datastructures-algorithms/status.svg)](https://david-dm.org/loiane/javascript-datastructures-algorithms) From d377b4afe6b2189ac190b88cfb280a6b6c612a76 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Wed, 9 May 2018 00:18:36 +0000 Subject: [PATCH 137/188] chore(package): update nyc to version 11.7.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 754e062d..e9c9258b 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "istanbul": "^v1.1.0-alpha.1", "mocha": "^5.0.4", "mochawesome": "^3.0.2", - "nyc": "11.7.1", + "nyc": "11.7.2", "ts-node": "^5.0.1", "tslint": "^5.9.1", "typescript": "^2.7.2", From 025fa13f545876e5af806be4a7098bd2179ef201 Mon Sep 17 00:00:00 2001 From: Loiane Groner Date: Sat, 2 Jun 2018 11:35:23 -0400 Subject: [PATCH 138/188] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aa17055a..1e984e2d 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ Happy Coding! | 1st edition | 2nd edition | 3rd edition | | ------------- |:-------------:|:-------------:| -| ![1st edition](https://d1ldz4te4covpm.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/4874OS_Learning%20JavaScript%20Data%20Structures%20and%20Algorithms.jpg) | ![2nd edition](https://d255esdrn735hr.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/5493OS_5348_Learning%20JavaScript%20Data%20Structures%20and%20Algorithms,%20Second%20Edition.jpg) | ![2nd edition](https://d1ldz4te4covpm.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/B09377_MockupCover_0.png) | +| ![1st edition](https://d1ldz4te4covpm.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/4874OS_Learning%20JavaScript%20Data%20Structures%20and%20Algorithms.jpg) | ![2nd edition](https://d255esdrn735hr.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/5493OS_5348_Learning%20JavaScript%20Data%20Structures%20and%20Algorithms,%20Second%20Edition.jpg) | ![3rd edition](https://d1ldz4te4covpm.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/B09377.png) | | [Book link](http://amzn.to/1Y1OWPx)| [Book link](http://amzn.to/1TSkcA1)| [Book link](http://a.co/cbMlYmJ)| Book link - first edition: From 2f56c5f7bec8d3d3c9fc8b7a83991115c07fac77 Mon Sep 17 00:00:00 2001 From: Helder Burato Berto Date: Mon, 4 Jun 2018 14:14:38 -0300 Subject: [PATCH 139/188] Fix chapter 1 and 2 links in README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1e984e2d..9b823e57 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ Source code of **Learning JavaScript Data Structures and Algorithms** book, thir ## List of available chapters: -* 01: [JavaScript: a quick overview](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter01) -* 02: [ECMAScript and TypeScript Introduction](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter02) +* 01: [JavaScript: a quick overview](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter01_02) +* 02: [ECMAScript and TypeScript Introduction](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter01_02) * 03: [Arrays](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter03) * 04: [Stacks](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter04) * 05: [Queues and Deques](https://github.com/loiane/javascript-datastructures-algorithms/tree/third-edition/examples/chapter05) From 376ffd3db8b2d51a31f204add9e5246a1e7e820f Mon Sep 17 00:00:00 2001 From: Engcompaulo Date: Fri, 9 Nov 2018 15:08:35 -0200 Subject: [PATCH 140/188] =?UTF-8?q?Altera=C3=A7=C3=A3o=20do=20README.md=20?= =?UTF-8?q?que=20n=C3=A3o=20estava=20exibindo=20as=20capas=20dos=20livros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9b823e57..0f48d147 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ Happy Coding! | 1st edition | 2nd edition | 3rd edition | | ------------- |:-------------:|:-------------:| -| ![1st edition](https://d1ldz4te4covpm.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/4874OS_Learning%20JavaScript%20Data%20Structures%20and%20Algorithms.jpg) | ![2nd edition](https://d255esdrn735hr.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/5493OS_5348_Learning%20JavaScript%20Data%20Structures%20and%20Algorithms,%20Second%20Edition.jpg) | ![3rd edition](https://d1ldz4te4covpm.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/B09377.png) | +| ![1st edition](https://d1ldz4te4covpm.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/4874OS_Learning%20JavaScript%20Data%20Structures%20and%20Algorithms.jpg) | ![2nd edition](https://images-na.ssl-images-amazon.com/images/I/51PWJ%2BoKc2L._SX403_BO1,204,203,200_.jpg) | ![3rd edition](https://images-na.ssl-images-amazon.com/images/I/41oSXp3VztL._SX404_BO1,204,203,200_.jpg) | | [Book link](http://amzn.to/1Y1OWPx)| [Book link](http://amzn.to/1TSkcA1)| [Book link](http://a.co/cbMlYmJ)| Book link - first edition: From b502ec25a3495d1b0002e58710906bbd36423510 Mon Sep 17 00:00:00 2001 From: Engcompaulo Date: Fri, 9 Nov 2018 15:17:26 -0200 Subject: [PATCH 141/188] =?UTF-8?q?Altera=C3=A7=C3=A3o=20do=20README.md=20?= =?UTF-8?q?que=20n=C3=A3o=20estava=20exibindo=20as=20capas=20dos=20livros?= =?UTF-8?q?=20livro=201=20modificado=20tamb=C3=A9m?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0f48d147..a698b45b 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ Happy Coding! | 1st edition | 2nd edition | 3rd edition | | ------------- |:-------------:|:-------------:| -| ![1st edition](https://d1ldz4te4covpm.cloudfront.net/sites/default/files/imagecache/ppv4_main_book_cover/4874OS_Learning%20JavaScript%20Data%20Structures%20and%20Algorithms.jpg) | ![2nd edition](https://images-na.ssl-images-amazon.com/images/I/51PWJ%2BoKc2L._SX403_BO1,204,203,200_.jpg) | ![3rd edition](https://images-na.ssl-images-amazon.com/images/I/41oSXp3VztL._SX404_BO1,204,203,200_.jpg) | +| ![1st edition](https://images-na.ssl-images-amazon.com/images/I/51xXGv7QlBL._SX403_BO1,204,203,200_.jpg) | ![2nd edition](https://images-na.ssl-images-amazon.com/images/I/51PWJ%2BoKc2L._SX403_BO1,204,203,200_.jpg) | ![3rd edition](https://images-na.ssl-images-amazon.com/images/I/41oSXp3VztL._SX404_BO1,204,203,200_.jpg) | | [Book link](http://amzn.to/1Y1OWPx)| [Book link](http://amzn.to/1TSkcA1)| [Book link](http://a.co/cbMlYmJ)| Book link - first edition: From 13702e4b7f39860d9254f097adf016b2db879058 Mon Sep 17 00:00:00 2001 From: Loiane Date: Fri, 15 Mar 2019 11:25:41 -0400 Subject: [PATCH 142/188] npm audit fix --- package-lock.json | 6686 +++++++++++++++++++++++++-------------------- package.json | 10 +- 2 files changed, 3752 insertions(+), 2944 deletions(-) diff --git a/package-lock.json b/package-lock.json index 38e97403..d2b4d6d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -185,6 +185,22 @@ } } }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, "@sindresorhus/is": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", @@ -203,6 +219,194 @@ "integrity": "sha512-YeDiSEzznwZwwp766SJ6QlrTyBYUGPSIwmREHVTmktUYiT/WADdWtpt9iH0KuUSf8lZLdI4lP0X6PBzPo5//JQ==", "dev": true }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -216,13 +420,10 @@ "dev": true }, "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true }, "acorn-jsx": { "version": "3.0.1", @@ -241,6 +442,15 @@ } } }, + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", @@ -253,6 +463,12 @@ "json-schema-traverse": "^0.3.0" } }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, "ajv-keywords": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", @@ -264,6 +480,7 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -326,6 +543,17 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", @@ -402,10 +630,14 @@ "dev": true }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "~2.1.0" + } }, "asn1.js": { "version": "4.10.1", @@ -425,13 +657,31 @@ "dev": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true }, "assertion-error": { "version": "1.0.2", @@ -446,9 +696,9 @@ "dev": true }, "ast-types": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", - "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.5.tgz", + "integrity": "sha512-oJjo+5e7/vEc2FBK8gUalV0pba4L3VdBIs2EKhOLHLcOd2FgQIVQN9xb0eZ9IjEWyAL7vq6fGJxOvVvdCHNyMw==", "dev": true }, "async": { @@ -466,7 +716,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "dev": true, + "optional": true }, "atob": { "version": "2.1.0", @@ -475,16 +726,18 @@ "dev": true }, "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true + "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, + "optional": true }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true, + "optional": true }, "babel-cli": { "version": "6.26.0", @@ -521,9 +774,9 @@ } }, "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, "requires": { "babel-code-frame": "^6.26.0", @@ -536,15 +789,32 @@ "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", - "convert-source-map": "^1.5.0", - "debug": "^2.6.8", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", "json5": "^0.5.1", "lodash": "^4.17.4", "minimatch": "^3.0.4", "path-is-absolute": "^1.0.1", - "private": "^0.1.7", + "private": "^0.1.8", "slash": "^1.0.0", - "source-map": "^0.5.6" + "source-map": "^0.5.7" + }, + "dependencies": { + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + } } }, "babel-eslint": { @@ -1122,9 +1392,9 @@ } }, "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "dev": true, "requires": { "babel-plugin-transform-strict-mode": "^6.24.1", @@ -1330,9 +1600,9 @@ } }, "babel-preset-env": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", - "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", "dev": true, "requires": { "babel-plugin-check-es2015-constants": "^6.22.0", @@ -1362,7 +1632,7 @@ "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", "babel-plugin-transform-exponentiation-operator": "^6.22.0", "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^2.1.2", + "browserslist": "^3.2.6", "invariant": "^2.2.2", "semver": "^5.3.0" } @@ -1588,9 +1858,9 @@ "dev": true }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "optional": true, "requires": { @@ -1610,15 +1880,25 @@ "dev": true }, "binaryextensions": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.1.tgz", - "integrity": "sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.2.tgz", + "integrity": "sha512-xVNN69YGDghOqCCtA6FI7avYrr02mTJjOgB0/f1VPD3pJC8QEvjTKWc4epDx8AqxxA75NI0QpVM2gPJXUbE4Tg==", "dev": true }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "optional": true, + "requires": { + "inherits": "~2.0.0" + } + }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", "dev": true }, "bn.js": { @@ -1627,15 +1907,6 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", @@ -1695,14 +1966,23 @@ } }, "browserify-des": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", - "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "browserify-rsa": { @@ -1740,13 +2020,13 @@ } }, "browserslist": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.5.1.tgz", - "integrity": "sha512-jAvM2ku7YDJ+leAq3bFH1DE0Ylw+F+EQDq4GkqZfgPEqpWYw9ofQH85uKSB9r3Tv7XDbfqVtE+sdvKJW7IlPJA==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000744", - "electron-to-chromium": "^1.3.24" + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" } }, "buffer": { @@ -1760,6 +2040,28 @@ "isarray": "^1.0.0" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, "buffer-from": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", @@ -1785,31 +2087,67 @@ "dev": true }, "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", "y18n": "^4.0.0" }, "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true } } }, @@ -1861,6 +2199,12 @@ } } }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -1884,11 +2228,18 @@ "optional": true }, "caniuse-lite": { - "version": "1.0.30000748", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000748.tgz", - "integrity": "sha1-RMjW2lKtZaXXudyk7+vQvdmCugk=", + "version": "1.0.30000948", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000948.tgz", + "integrity": "sha512-Lw4y7oz1X5MOMZm+2IFaSISqVVQvUuD+ZUSfeYK/SlYiMjkHN/eJ2PDfJehW5NA6JjrxYSSnIWfwjeObQMEjFQ==", "dev": true }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true, + "optional": true + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -1958,16 +2309,19 @@ } }, "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true }, "chrome-trace-event": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz", - "integrity": "sha512-sjndyZHrrWiu4RY7AkHgjn80GfAM2ZSzUkZLV/Js59Ldmh6JDThf0SUmOHU53rFu2rVxxfCzJ30Ukcfch3Gb/A==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } }, "cipher-base": { "version": "1.0.4", @@ -2194,85 +2548,26 @@ "dev": true }, "codecov": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.0.tgz", - "integrity": "sha1-wnO4xPEpRXI+jcnSWAPYk0Pl8o4=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.2.0.tgz", + "integrity": "sha512-3NJvNARXxilqnqVfgzDHyVrF4oeVgaYW1c1O6Oi5mn93exE7HTSSFNiYdwojWW6IwrCZABJ8crpNbKoo9aUHQw==", "dev": true, "requires": { - "argv": "0.0.2", - "request": "2.81.0", - "urlgrey": "0.4.4" + "argv": "^0.0.2", + "ignore-walk": "^3.0.1", + "js-yaml": "^3.12.0", + "teeny-request": "^3.7.0", + "urlgrey": "^0.4.4" }, "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "js-yaml": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", "dev": true, "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - } - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - } - }, - "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" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } } } @@ -2303,16 +2598,17 @@ "dev": true }, "colors": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", - "integrity": "sha512-s8+wktIuDSLffCywiwSxQOMqtPxML11a/dtHE17tMn4B1MSWw/C22EKf7M2KGUBcDaVFEGT+S8N02geDXeuNKg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", "dev": true }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, + "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -2362,6 +2658,13 @@ "date-now": "^0.1.4" } }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true, + "optional": true + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -2418,9 +2721,9 @@ "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=" }, "create-ecdh": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.1.tgz", - "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { "bn.js": "^4.1.0", @@ -2465,15 +2768,6 @@ "which": "^1.2.9" } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.x.x" - } - }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -2510,22 +2804,15 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, "date-now": { @@ -2541,9 +2828,9 @@ "dev": true }, "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } @@ -2578,10 +2865,17 @@ "type-detect": "^4.0.0" } }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true, + "optional": true + }, "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "deep-is": { @@ -2610,6 +2904,16 @@ } } }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "optional": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -2663,6 +2967,13 @@ } } }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true, + "optional": true + }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", @@ -2690,7 +3001,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true }, "des.js": { "version": "1.0.0", @@ -2734,6 +3053,27 @@ "randombytes": "^2.0.0" } }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + } + } + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2756,9 +3096,9 @@ "dev": true }, "duplexify": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", - "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", @@ -2768,13 +3108,14 @@ } }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ecstatic": { @@ -2796,21 +3137,33 @@ } }, "editions": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", - "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/editions/-/editions-2.1.3.tgz", + "integrity": "sha512-xDZyVm0A4nLgMNWVVLJvcwMjI80ShiH/27RyLiCnW1L273TcJIA25C4pwJ33AWV01OX6UriP35Xu+lH4S7HWQw==", + "dev": true, + "requires": { + "errlop": "^1.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + } + } }, "ejs": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.9.tgz", - "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", "dev": true }, "electron-to-chromium": { - "version": "1.3.27", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", - "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", + "version": "1.3.116", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz", + "integrity": "sha512-NKwKAXzur5vFCZYBHpdWjTMO8QptNLNP80nItkSIgUOapPAo9Uia+RvkCaZJtO7fhQaVElSvBPWEc2ku6cKsPA==", "dev": true }, "elegant-spinner": { @@ -2820,9 +3173,9 @@ "dev": true }, "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -2875,6 +3228,15 @@ "integrity": "sha512-5rfRs+m+6pwoKRCFqpsA5+qsLngFms1aWPrxfKbrObCzQaPc3M3yPloZx+BL9UE3dK58cxw36XVQbFRSCCfGSQ==", "dev": true }, + "errlop": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.1.tgz", + "integrity": "sha512-WX7QjiPHhsny7/PQvrhS5VMizXXKoKCS3udaBp8gjlARdbn+XmK300eKBAAN0hGyRaTCtRpOaxK+xFVPUJ3zkw==", + "dev": true, + "requires": { + "editions": "^2.1.2" + } + }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -2903,6 +3265,48 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "optional": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "optional": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -3033,75 +3437,34 @@ "requires": { "debug": "^2.6.9", "resolve": "^1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } } }, "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", + "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", "dev": true, "requires": { "debug": "^2.6.8", - "pkg-dir": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } + "pkg-dir": "^2.0.0" } }, "eslint-plugin-import": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz", - "integrity": "sha1-Fa7qN6Z0mdhI6OmBgG1GJ7VQOBY=", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", + "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", "dev": true, "requires": { "contains-path": "^0.1.0", - "debug": "^2.6.8", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.3.0", + "has": "^1.0.3", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" + "resolve": "^1.9.0" }, "dependencies": { "doctrine": { @@ -3114,13 +3477,19 @@ "isarray": "^1.0.0" } }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } } } @@ -3199,9 +3568,9 @@ "integrity": "sha512-QOCPu979MMWX9XNlfRZoin+Wm+bK1SP7vv3NGUniYwuSJK/+cPA10blMaeRgzg31RvoSFk6FsCDVa4vNryBTGA==" }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", "dev": true }, "evp_bytestokey": { @@ -3263,10 +3632,11 @@ } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "optional": true }, "extend-shallow": { "version": "3.0.2", @@ -3313,7 +3683,8 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "dev": true, + "optional": true }, "fast-deep-equal": { "version": "1.1.0", @@ -3321,1280 +3692,748 @@ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fbjs": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "fast-glob": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", + "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", "dev": true, "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.9" + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" }, "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true - } - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "dev": true, - "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" - } - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^1.1.3", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "first-chunk-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", - "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" - } - }, - "flow-parser": { - "version": "0.70.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.70.0.tgz", - "integrity": "sha512-gGdyVUZWswG5jcINrVDHd3RY4nJptBTAx9mR9thGsrGGmAUR7omgJXQSpR+fXrLtxSTAea3HpAZNU/yzRJc2Cg==", - "dev": true - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, - "follow-redirects": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", - "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", - "requires": { - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "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.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-readdir-recursive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", - "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", - "dev": true - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.3.0", - "node-pre-gyp": "^0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "aproba": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", - "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "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, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true, - "requires": { - "balanced-match": "^0.4.1", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.x.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true, - "optional": true - }, - "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 - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "dev": true, - "optional": true, - "requires": { - "fstream": "^1.0.0", - "inherits": "2", - "minimatch": "^3.0.0" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "optional": true, - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "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, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": 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, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "optional": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "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, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, - "requires": { - "mime-db": "~1.27.0" - } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", - "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", - "dev": true, - "optional": true, - "requires": { - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "request": "^2.81.0", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^2.2.1", - "tar-pack": "^3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "npmlog": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", - "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, - "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "wrappy": "1" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, - "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, - "optional": true, "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, - "optional": true + "requires": { + "is-extglob": "^2.1.0" + } } } }, - "readable-stream": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "buffer-shims": "~1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~1.0.0", - "util-deprecate": "~1.0.1" + "kind-of": "^6.0.0" } }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, - "optional": true, "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" + "kind-of": "^6.0.0" } }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "glob": "^7.0.5" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, - "optional": true + "requires": { + "is-extglob": "^2.1.1" + } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "optional": true + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true, - "optional": true + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, - "optional": true, "requires": { - "hoek": "2.x.x" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fbjs": { + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "dev": true, + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.9" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + } + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true }, - "sshpk": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", - "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, - "optional": 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", - "jodid25519": "^1.0.0", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true } } + } + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "first-chunk-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", + "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" + } + }, + "flow-parser": { + "version": "0.95.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.95.1.tgz", + "integrity": "sha512-HKkivrDpJduju6PfvnTdycPp5U8jemBDBwT/PlqiiW4TNOqmlSIbgniMcssl0h7vpoCUrQ/LX3CCIc/QSIDJWA==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "tar-pack": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", - "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "optional": true, "requires": { - "debug": "^2.2.0", - "fstream": "^1.0.10", - "fstream-ignore": "^1.0.5", - "once": "^1.3.3", - "readable-stream": "^2.1.4", - "rimraf": "^2.5.1", - "tar": "^2.2.1", - "uid-number": "^0.0.6" + "safe-buffer": "~5.1.0" } - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true, - "optional": true, + } + } + }, + "follow-redirects": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", + "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", + "requires": { + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "punycode": "^1.4.1" + "ms": "2.0.0" } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + } + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "optional": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "optional": 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, + "optional": 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", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-readdir-recursive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", + "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.3.0", + "node-pre-gyp": "^0.6.36" + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "dev": true, + "optional": true, + "requires": { + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" + } + }, + "fsu": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.0.4.tgz", + "integrity": "sha512-T8DGjqL3DNJsA/uHWUTIZhJ/VuEqi3QdNsQBAWpKtoIPS/8rK4HWG79ae2+HEw+Cz9e5lIsWghpoXCcNsrDPFA==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "optional": true, "requires": { - "safe-buffer": "^5.0.1" + "number-is-nan": "^1.0.0" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true, - "optional": true - }, - "util-deprecate": { + "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true } } }, - "fsu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.0.4.tgz", - "integrity": "sha512-T8DGjqL3DNJsA/uHWUTIZhJ/VuEqi3QdNsQBAWpKtoIPS/8rK4HWG79ae2+HEw+Cz9e5lIsWghpoXCcNsrDPFA==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", @@ -4624,16 +4463,9 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "gh-got": { @@ -4769,6 +4601,12 @@ "is-glob": "^2.0.0" } }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -4822,9 +4660,9 @@ } }, "got": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.0.tgz", - "integrity": "sha512-kBNy/S2CGwrYgDSec5KTWGKUvupwkkTVAjIsVFF2shXO13xpZdFP4d4kxa//CLX2tN/rV0aYwK8vY6UKWGn2vQ==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "dev": true, "requires": { "@sindresorhus/is": "^0.7.0", @@ -4891,18 +4729,59 @@ } }, "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "optional": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, + "optional": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true, + "optional": 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, + "optional": true + } + } }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "^1.0.2" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -4932,6 +4811,13 @@ "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "dev": true }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true, + "optional": true + }, "has-to-string-tag-x": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", @@ -4941,6 +4827,13 @@ "has-symbol-support-x": "^1.4.1" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -5012,25 +4905,13 @@ } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" + "minimalistic-assert": "^1.0.1" } }, "he": { @@ -5049,12 +4930,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -5066,9 +4941,9 @@ } }, "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { "parse-passwd": "^1.0.0" @@ -5119,12 +4994,13 @@ } }, "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, + "optional": true, "requires": { - "assert-plus": "^0.2.0", + "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } @@ -5135,6 +5011,33 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "dev": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", @@ -5142,9 +5045,9 @@ "dev": true }, "ieee754": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", - "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, "iferr": { @@ -5159,6 +5062,15 @@ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", "dev": true }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "import-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", @@ -5281,9 +5193,9 @@ } }, "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, "into-stream": { @@ -5350,6 +5262,13 @@ "builtin-modules": "^1.0.0" } }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true, + "optional": true + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -5359,6 +5278,13 @@ "kind-of": "^3.0.2" } }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true, + "optional": true + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -5543,6 +5469,16 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "optional": true, + "requires": { + "has": "^1.0.1" + } + }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", @@ -5570,11 +5506,22 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "optional": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "dev": true, + "optional": true }, "is-utf8": { "version": "0.2.1", @@ -5594,6 +5541,15 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -5623,7 +5579,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "dev": true, + "optional": true }, "istanbul": { "version": "1.1.0-alpha.1", @@ -5642,83 +5599,103 @@ } }, "istanbul-api": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.14.tgz", - "integrity": "sha1-JbxXAffGgMD//5E95G42GaOm5oA=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", + "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", "dev": true, "requires": { "async": "^2.1.4", "fileset": "^2.0.2", - "istanbul-lib-coverage": "^1.1.1", - "istanbul-lib-hook": "^1.0.7", - "istanbul-lib-instrument": "^1.8.0", - "istanbul-lib-report": "^1.1.1", - "istanbul-lib-source-maps": "^1.2.1", - "istanbul-reports": "^1.1.2", + "istanbul-lib-coverage": "^1.2.1", + "istanbul-lib-hook": "^1.2.2", + "istanbul-lib-instrument": "^1.10.2", + "istanbul-lib-report": "^1.1.5", + "istanbul-lib-source-maps": "^1.2.6", + "istanbul-reports": "^1.5.1", "js-yaml": "^3.7.0", "mkdirp": "^0.5.1", "once": "^1.4.0" }, "dependencies": { "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "dev": true, "requires": { - "lodash": "^4.14.0" + "lodash": "^4.17.11" } - } - } - }, - "istanbul-lib-coverage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", - "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", - "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==", - "dev": true, - "requires": { - "append-transform": "^0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz", - "integrity": "sha1-ZvbJQhzJ7EcE928tsIS6kHiitTI=", - "dev": true, - "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.1.1", - "semver": "^5.3.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-tvF+YmCmH4thnez6JFX06ujIA19WPa9YUiwjc1uALF2cv5dmE3It8b5I8Ob7FHJ70H9Y5yF+TDkVa/mcADuw1Q==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^1.1.1", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" - }, - "dependencies": { + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", + "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", + "dev": true, + "requires": { + "append-transform": "^0.4.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + } + }, + "istanbul-reports": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -5730,37 +5707,38 @@ } } }, - "istanbul-lib-source-maps": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", - "integrity": "sha512-mukVvSXCn9JQvdJl8wP/iPhqig0MRtuWuD4ZNKo6vB2Ik//AmhAKe3QnPN02dmkRe3lTudFk3rzoHhwU4hb94w==", - "dev": true, - "requires": { - "debug": "^2.6.3", - "istanbul-lib-coverage": "^1.1.1", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - } - }, - "istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha1-D7Lj9qqZIr085F0F2KtNXo4HvU8=", + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "requires": { - "handlebars": "^4.0.3" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + } } }, "istextorbinary": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", - "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.5.1.tgz", + "integrity": "sha512-pv/JNPWnfpwGjPx7JrtWTwsWsxkrK3fNzcEVnt92YKEIErps4Fsk49+qzCe9iQF2hjqK8Naqf8P9kzoeCuQI1g==", "dev": true, "requires": { - "binaryextensions": "2", - "editions": "^1.3.3", - "textextensions": "2" + "binaryextensions": "^2.1.2", + "editions": "^2.1.3", + "textextensions": "^2.4.0" } }, "isurl": { @@ -5797,16 +5775,16 @@ "optional": true }, "jscodeshift": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.0.tgz", - "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.1.tgz", + "integrity": "sha512-sRMollbhbmSDrR79JMAnhEjyZJlQQVozeeY9A6/KNuV26DNcuB3mGSCWXp0hks9dcwRNOELbNOiwraZaXXRk5Q==", "dev": true, "requires": { "babel-plugin-transform-flow-strip-types": "^6.8.0", "babel-preset-es2015": "^6.9.0", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.9.0", - "babylon": "^7.0.0-beta.30", + "babylon": "^7.0.0-beta.47", "colors": "^1.1.2", "flow-parser": "^0.*", "lodash": "^4.13.1", @@ -5814,15 +5792,15 @@ "neo-async": "^2.5.0", "node-dir": "0.1.8", "nomnom": "^1.8.1", - "recast": "^0.14.1", + "recast": "^0.15.0", "temp": "^0.8.1", "write-file-atomic": "^1.2.0" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.46", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.46.tgz", - "integrity": "sha512-WFJlg2WatdkXRFMpk7BN/Uzzkjkcjk+WaqnrSCpay+RYl4ypW9ZetZyT9kNt22IH/BQNst3M6PaaBn9IXsUNrg==", + "version": "7.0.0-beta.47", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.47.tgz", + "integrity": "sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==", "dev": true } } @@ -5849,7 +5827,8 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "dev": true, + "optional": true }, "json-schema-traverse": { "version": "0.3.1", @@ -5857,15 +5836,6 @@ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -5893,30 +5863,17 @@ "graceful-fs": "^4.1.6" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "verror": "1.10.0" } }, "keyv": { @@ -6091,7 +6048,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -6128,9 +6085,9 @@ } }, "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, "loader-utils": { @@ -6155,9 +6112,9 @@ } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, "lodash.isfunction": { @@ -6185,9 +6142,9 @@ } }, "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6196,9 +6153,9 @@ } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -6233,7 +6190,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -6253,7 +6210,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "dev": true, + "optional": true }, "loose-envify": { "version": "1.3.1", @@ -6295,6 +6253,12 @@ "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", "dev": true }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -6310,14 +6274,29 @@ "object-visit": "^1.0.0" } }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "mem": { @@ -6341,16 +6320,17 @@ } }, "mem-fs-editor": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz", - "integrity": "sha1-3Qpuryu4prN3QAZ6pUnrUwEFr58=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.3.tgz", + "integrity": "sha512-tgWmwI/+6vwu6POan82dTjxEpwAoaj0NAFnghtVo/FcLK2/7IhPUtFUUYlwou4MOY6OtjTUJtwpfH1h+eSUziw==", "dev": true, "requires": { "commondir": "^1.0.1", - "deep-extend": "^0.4.0", - "ejs": "^2.3.1", + "deep-extend": "^0.6.0", + "ejs": "^2.5.9", "glob": "^7.0.3", - "globby": "^6.1.0", + "globby": "^7.1.1", + "isbinaryfile": "^3.0.2", "mkdirp": "^0.5.0", "multimatch": "^2.0.0", "rimraf": "^2.2.8", @@ -6371,24 +6351,19 @@ "dev": true }, "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", "dev": true, "requires": { "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", @@ -6396,9 +6371,9 @@ "dev": true }, "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, "requires": { "clone": "^2.1.1", @@ -6421,6 +6396,12 @@ "readable-stream": "^2.0.1" } }, + "merge2": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "dev": true + }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", @@ -6458,18 +6439,20 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "dev": true, + "optional": true }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "dev": true, + "optional": true, "requires": { - "mime-db": "~1.30.0" + "mime-db": "~1.38.0" } }, "mimic-fn": { @@ -6479,9 +6462,9 @@ "dev": true }, "mimic-response": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", - "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, "minimalistic-assert": { @@ -6511,9 +6494,9 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { "concat-stream": "^1.5.0", @@ -6522,7 +6505,7 @@ "flush-write-stream": "^1.0.0", "from2": "^2.1.0", "parallel-transform": "^1.1.0", - "pump": "^2.0.1", + "pump": "^3.0.0", "pumpify": "^1.3.3", "stream-each": "^1.1.0", "through2": "^2.0.0" @@ -6859,9 +6842,9 @@ "dev": true }, "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node-dir": { @@ -6881,9 +6864,9 @@ } }, "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", "dev": true, "requires": { "assert": "^1.1.1", @@ -6893,7 +6876,7 @@ "constants-browserify": "^1.0.0", "crypto-browserify": "^3.11.0", "domain-browser": "^1.1.1", - "events": "^1.0.0", + "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", "path-browserify": "0.0.0", @@ -6907,8 +6890,48 @@ "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", "url": "^0.11.0", - "util": "^0.10.3", + "util": "^0.11.0", "vm-browserify": "0.0.4" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-pre-gyp": { + "version": "0.6.37", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.37.tgz", + "integrity": "sha1-PIcrI2suJm5BQFeP4e6I9pMyOgU=", + "dev": true, + "optional": true, + "requires": { + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "request": "^2.81.0", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tape": "^4.6.3", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" + }, + "dependencies": { + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } } }, "nomnom": { @@ -6996,6 +7019,19 @@ "path-key": "^2.0.0" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -7003,9 +7039,9 @@ "dev": true }, "nyc": { - "version": "11.7.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.7.1.tgz", - "integrity": "sha512-EGePURSKUEpS1jWnEKAMhY+GWZzi7JC+f8iBDOATaOsLZW5hM/9eYx2dHGaEXa1ITvMm44CJugMksvP3NwMQMw==", + "version": "11.7.2", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.7.2.tgz", + "integrity": "sha512-gBt7qwsR1vryYfglVjQRx1D+AtMZW5NbUKxb+lZe8SN8KsheGCPGWEsSC9AGQG+r2+te1+10uPHUCahuqm1nGQ==", "dev": true, "requires": { "archy": "^1.0.0", @@ -7025,11 +7061,11 @@ "istanbul-lib-source-maps": "^1.2.3", "istanbul-reports": "^1.4.0", "md5-hex": "^1.2.0", - "merge-source-map": "^1.0.2", - "micromatch": "^2.3.11", + "merge-source-map": "^1.1.0", + "micromatch": "^3.1.10", "mkdirp": "^0.5.0", "resolve-from": "^2.0.0", - "rimraf": "^2.5.4", + "rimraf": "^2.6.2", "signal-exit": "^3.0.1", "spawn-wrap": "^1.4.2", "test-exclude": "^4.2.0", @@ -7041,6 +7077,7 @@ "version": "0.1.4", "bundled": true, "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -7076,12 +7113,9 @@ "dev": true }, "arr-diff": { - "version": "2.0.0", + "version": "4.0.0", "bundled": true, - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } + "dev": true }, "arr-flatten": { "version": "1.1.0", @@ -7094,7 +7128,7 @@ "dev": true }, "array-unique": { - "version": "0.2.1", + "version": "0.3.2", "bundled": true, "dev": true }, @@ -7114,7 +7148,7 @@ "dev": true }, "atob": { - "version": "2.1.0", + "version": "2.1.1", "bundled": true, "dev": true }, @@ -7257,11 +7291,6 @@ "kind-of": "^6.0.2" } }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, "kind-of": { "version": "6.0.2", "bundled": true, @@ -7279,13 +7308,30 @@ } }, "braces": { - "version": "1.8.5", + "version": "2.3.2", "bundled": true, "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "builtin-modules": { @@ -7307,13 +7353,6 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } } }, "caching-transform": { @@ -7372,11 +7411,6 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true } } }, @@ -7439,7 +7473,7 @@ "dev": true }, "core-js": { - "version": "2.5.5", + "version": "2.5.6", "bundled": true, "dev": true }, @@ -7518,11 +7552,6 @@ "kind-of": "^6.0.2" } }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, "kind-of": { "version": "6.0.2", "bundled": true, @@ -7582,66 +7611,142 @@ } } }, - "expand-brackets": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "bundled": true, - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "extend-shallow": { - "version": "3.0.2", + "expand-brackets": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "fill-range": { + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", + "extend-shallow": { + "version": "2.0.1", "bundled": true, "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-extendable": "^0.1.0" } } } }, - "extglob": { - "version": "0.3.2", - "bundled": true, - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^1.1.3", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, "find-cache-dir": { "version": "0.1.1", "bundled": true, @@ -7665,14 +7770,6 @@ "bundled": true, "dev": true }, - "for-own": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, "foreground-child": { "version": "1.5.6", "bundled": true, @@ -7723,23 +7820,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, "globals": { "version": "9.18.0", "bundled": true, @@ -7792,13 +7872,6 @@ "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } } }, "has-values": { @@ -7810,24 +7883,6 @@ "kind-of": "^4.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "kind-of": { "version": "4.0.0", "bundled": true, @@ -7926,29 +7981,11 @@ } } }, - "is-dotfile": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-extendable": { "version": "0.1.1", "bundled": true, "dev": true }, - "is-extglob": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "is-finite": { "version": "1.0.2", "bundled": true, @@ -7962,16 +7999,8 @@ "bundled": true, "dev": true }, - "is-glob": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, "is-number": { - "version": "2.1.0", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { @@ -7999,25 +8028,8 @@ "dev": true, "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } } }, - "is-posix-bracket": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, "is-stream": { "version": "1.1.0", "bundled": true, @@ -8044,12 +8056,9 @@ "dev": true }, "isobject": { - "version": "2.1.0", + "version": "3.0.1", "bundled": true, - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "dev": true }, "istanbul-lib-coverage": { "version": "1.2.0", @@ -8190,14 +8199,15 @@ } }, "lodash": { - "version": "4.17.5", + "version": "4.17.10", "bundled": true, "dev": true }, "longest": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "loose-envify": { "version": "1.3.1", @@ -8208,7 +8218,7 @@ } }, "lru-cache": { - "version": "4.1.2", + "version": "4.1.3", "bundled": true, "dev": true, "requires": { @@ -8266,23 +8276,30 @@ } }, "micromatch": { - "version": "2.3.11", + "version": "3.1.10", "bundled": true, "dev": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } } }, "mimic-fn": { @@ -8354,16 +8371,6 @@ "to-regex": "^3.0.1" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, "kind-of": { "version": "6.0.2", "bundled": true, @@ -8382,14 +8389,6 @@ "validate-npm-package-license": "^3.0.1" } }, - "normalize-path": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, "npm-run-path": { "version": "2.0.2", "bundled": true, @@ -8434,22 +8433,6 @@ "dev": true, "requires": { "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" } }, "object.pick": { @@ -8458,13 +8441,6 @@ "dev": true, "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } } }, "once": { @@ -8525,17 +8501,6 @@ "bundled": true, "dev": true }, - "parse-glob": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, "parse-json": { "version": "2.2.0", "bundled": true, @@ -8609,68 +8574,26 @@ }, "dependencies": { "find-up": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "preserve": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", + "version": "1.1.2", "bundled": true, "dev": true, "requires": { - "is-buffer": "^1.1.5" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } } } }, + "posix-character-classes": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, "read-pkg": { "version": "1.1.0", "bundled": true, @@ -8706,14 +8629,6 @@ "bundled": true, "dev": true }, - "regex-cache": { - "version": "0.4.4", - "bundled": true, - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "bundled": true, @@ -8723,11 +8638,6 @@ "safe-regex": "^1.1.0" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, "repeat-element": { "version": "1.1.2", "bundled": true, @@ -8927,11 +8837,6 @@ "kind-of": "^6.0.2" } }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, "kind-of": { "version": "6.0.2", "bundled": true, @@ -8972,383 +8877,133 @@ "spawn-wrap": { "version": "1.4.2", "bundled": true, - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "split-string": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "static-extend": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "test-exclude": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "arrify": "^1.0.1", - "micromatch": "^3.1.8", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "braces": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "bundled": true, - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "split-string": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "static-extend": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", "bundled": true, "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-descriptor": "^0.1.0" } - }, - "is-number": { + } + } + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { "version": "3.0.0", "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, "dev": true }, - "micromatch": { - "version": "3.1.10", + "strip-ansi": { + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "ansi-regex": "^3.0.0" } } } }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "test-exclude": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^3.1.8", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + } + }, "to-fast-properties": { "version": "1.0.3", "bundled": true, @@ -9380,16 +9035,6 @@ "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } } }, "trim-right": { @@ -9493,11 +9138,6 @@ "version": "0.1.4", "bundled": true, "dev": true - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true } } }, @@ -9638,7 +9278,7 @@ "dev": true }, "cliui": { - "version": "4.0.0", + "version": "4.1.0", "bundled": true, "dev": true, "requires": { @@ -9683,10 +9323,11 @@ } }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -9716,6 +9357,20 @@ } } }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true, + "optional": true + }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "dev": true, + "optional": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -9836,7 +9491,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -9881,6 +9536,17 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "output-file-sync": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", @@ -9971,9 +9637,9 @@ "dev": true }, "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, "parallel-transform": { @@ -9988,16 +9654,17 @@ } }, "parse-asn1": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-glob": { @@ -10099,9 +9766,9 @@ "dev": true }, "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -10112,10 +9779,11 @@ } }, "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true, + "optional": true }, "pify": { "version": "3.0.0", @@ -10188,9 +9856,9 @@ "dev": true }, "prettier": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", - "integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=", + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", + "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", "dev": true }, "pretty-bytes": { @@ -10261,23 +9929,39 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "dev": true, + "optional": true + }, "public-encrypt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -10285,20 +9969,32 @@ } }, "pumpify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", - "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "^3.5.3", + "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "qs": { @@ -10329,51 +10025,10 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -10385,8 +10040,30 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } } }, "react": { @@ -10464,6 +10141,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, + "optional": true, "requires": { "graceful-fs": "^4.1.2", "minimatch": "^3.0.2", @@ -10472,12 +10150,12 @@ } }, "recast": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", - "integrity": "sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A==", + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.15.5.tgz", + "integrity": "sha512-nkAYNqarh73cMWRKFiPQ8I9dOLFvFk6SnG8u/LUlOYfArDOD/EjsVRAs860TlBLrpxqAXHGET/AUAVjdEymL5w==", "dev": true, "requires": { - "ast-types": "0.11.3", + "ast-types": "0.11.5", "esprima": "~4.0.0", "private": "~0.1.5", "source-map": "~0.6.1" @@ -10615,6 +10293,58 @@ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "optional": 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.0", + "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.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "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, + "optional": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true, + "optional": true + } + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -10709,6 +10439,16 @@ "signal-exit": "^3.0.2" } }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "dev": true, + "optional": true, + "requires": { + "through": "~2.3.4" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -10778,9 +10518,9 @@ } }, "rxjs": { - "version": "5.5.10", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", - "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==", + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", "dev": true, "requires": { "symbol-observable": "1.0.1" @@ -10801,32 +10541,51 @@ "ret": "~0.1.10" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "schema-utils": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" }, "dependencies": { "ajv": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", - "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0", - "uri-js": "^3.0.2" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-keywords": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", - "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "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 } } @@ -10844,9 +10603,9 @@ "dev": true }, "serialize-javascript": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", - "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", "dev": true }, "set-blocking": { @@ -10859,7 +10618,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true + "dev": true, + "optional": true }, "set-value": { "version": "2.0.0", @@ -10916,9 +10676,9 @@ "dev": true }, "shelljs": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", - "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", "dev": true, "requires": { "glob": "^7.0.0", @@ -11061,15 +10821,6 @@ "kind-of": "^3.2.0" } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", @@ -11080,9 +10831,9 @@ } }, "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, "source-map": { @@ -11167,10 +10918,11 @@ "dev": true }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, + "optional": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -11179,24 +10931,17 @@ "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "figgy-pudding": "^3.5.1" } }, "static-extend": { @@ -11221,9 +10966,9 @@ } }, "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { "inherits": "~2.0.1", @@ -11231,9 +10976,9 @@ } }, "stream-each": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -11241,16 +10986,48 @@ } }, "stream-http": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", - "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", - "readable-stream": "^2.3.3", + "readable-stream": "^2.3.6", "to-arraybuffer": "^1.0.0", "xtend": "^4.0.0" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-shift": { @@ -11307,6 +11084,18 @@ } } }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "dev": true, + "optional": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.0", + "function-bind": "^1.0.2" + } + }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", @@ -11316,12 +11105,6 @@ "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -11433,6 +11216,98 @@ "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", "dev": true }, + "tape": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.10.1.tgz", + "integrity": "sha512-G0DywYV1jQeY3axeYnXUOt6ktnxS9OPJh97FGR3nrua8lhWi1zPflLxcAHavZ7Jf3qUfY7cxcVIVFa4mY2IY1w==", + "dev": true, + "optional": true, + "requires": { + "deep-equal": "~1.0.1", + "defined": "~1.0.0", + "for-each": "~0.3.3", + "function-bind": "~1.1.1", + "glob": "~7.1.3", + "has": "~1.0.3", + "inherits": "~2.0.3", + "minimist": "~1.2.0", + "object-inspect": "~1.6.0", + "resolve": "~1.10.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.1.2", + "through": "~2.3.8" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true, + "optional": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "optional": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "optional": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + }, + "tar-pack": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.1.tgz", + "integrity": "sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" + } + }, "tcomb": { "version": "3.2.25", "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.25.tgz", @@ -11448,6 +11323,31 @@ "tcomb": "^3.0.0" } }, + "teeny-request": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-3.11.3.tgz", + "integrity": "sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1", + "node-fetch": "^2.2.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "node-fetch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } + } + }, "temp": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", @@ -11466,6 +11366,150 @@ } } }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", + "dev": true, + "requires": { + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.16.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -11473,9 +11517,9 @@ "dev": true }, "textextensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.2.0.tgz", - "integrity": "sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.4.0.tgz", + "integrity": "sha512-qftQXnX1DzpSV8EddtHIT0eDDEiBF8ywhFYR2lI9xrGtxqKN+CvLXhACeCIGbCpQfxxERbrkZEFb8cZcDKbVZA==", "dev": true }, "through": { @@ -11573,12 +11617,23 @@ } }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, + "optional": true, "requires": { + "psl": "^1.1.24", "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + } } }, "trim-right": { @@ -11734,6 +11789,16 @@ "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, + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -11808,45 +11873,12 @@ "dev": true, "optional": true }, - "uglifyjs-webpack-plugin": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", - "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", "dev": true, - "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - } - } - } + "optional": true }, "underscore": { "version": "1.6.0", @@ -11898,18 +11930,18 @@ } }, "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { "unique-slug": "^2.0.0" } }, "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -11968,32 +12000,24 @@ } }, "untildify": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.2.tgz", - "integrity": "sha1-fx8wIFWz/qDz6B3HjrNnZstl4/E=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", + "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", "dev": true }, "upath": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", - "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, "uri-js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", - "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", - "dev": true - } } }, "urix": { @@ -12070,20 +12094,12 @@ "dev": true }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } + "inherits": "2.0.3" } }, "util-deprecate": { @@ -12134,18 +12150,11 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "vinyl": { @@ -12187,67 +12196,249 @@ "requires": { "is-utf8": "^0.2.0" } - } - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "watchpack": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", - "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", + "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "arr-diff": { + "fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -12256,179 +12447,556 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" } - } - } - }, - "chokidar": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", - "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.1.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, "dev": true, + "optional": true, "requires": { - "is-descriptor": "^0.1.0" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "minizlib": { + "version": "1.2.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "is-extendable": "^0.1.0" + "minipass": "^2.2.1" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "mkdirp": { + "version": "0.5.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "minimist": "0.0.8" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, "dev": true, + "optional": true, "requires": { - "kind-of": "^3.0.2" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "minimist": { + "version": "1.2.0", + "bundled": true, "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "optional": true } } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "readable-stream": { + "version": "2.3.6", + "bundled": true, "dev": true, + "optional": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, "requires": { - "is-descriptor": "^1.0.0" + "ansi-regex": "^2.0.0" } }, - "extend-shallow": { + "strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, "dev": true, + "optional": true, "requires": { - "is-extendable": "^0.1.0" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, "dev": true, + "optional": true, "requires": { - "is-extendable": "^0.1.0" + "string-width": "^1.0.2 || 2" } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true } } }, @@ -12549,22 +13117,51 @@ "snapdragon": "^0.8.1", "to-regex": "^3.0.2" } + }, + "nan": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.1.tgz", + "integrity": "sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==", + "dev": true, + "optional": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } } } }, "webpack": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.6.0.tgz", - "integrity": "sha512-Fu/k/3fZeGtIhuFkiYpIy1UDHhMiGKjG4FFPVuvG+5Os2lWA1ttWpmi9Qnn6AgfZqj9MvhZW/rmj/ip+nHr06g==", + "version": "4.29.6", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.6.tgz", + "integrity": "sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==", "dev": true, "requires": { - "acorn": "^5.0.0", - "acorn-dynamic-import": "^3.0.0", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.0.5", + "acorn-dynamic-import": "^4.0.0", "ajv": "^6.1.0", "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^0.1.1", - "enhanced-resolve": "^4.0.0", - "eslint-scope": "^3.7.1", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.3.0", "loader-utils": "^1.1.0", "memory-fs": "~0.4.1", @@ -12572,29 +13169,35 @@ "mkdirp": "~0.5.0", "neo-async": "^2.5.0", "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.0.0", - "uglifyjs-webpack-plugin": "^1.2.4", + "schema-utils": "^1.0.0", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", "watchpack": "^1.5.0", - "webpack-sources": "^1.0.1" + "webpack-sources": "^1.3.0" }, "dependencies": { + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, "ajv": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", - "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0", - "uri-js": "^3.0.2" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-keywords": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", - "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, "arr-diff": { @@ -12638,6 +13241,27 @@ } } }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "eslint-scope": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", + "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -12766,6 +13390,12 @@ } } }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -12844,6 +13474,12 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "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 + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -12870,6 +13506,12 @@ "snapdragon": "^0.8.1", "to-regex": "^3.0.2" } + }, + "tapable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "dev": true } } }, @@ -12933,9 +13575,9 @@ } }, "webpack-cli": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.15.tgz", - "integrity": "sha512-bjNeIUO51D4OsmZ5ufzcpzVoacjxfWNfeBZKYL3jc+EMfCME3TyfdCPSUoKiOnebQChfupQuIRpAnx7L4l3Hew==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.1.1.tgz", + "integrity": "sha512-zoUeCfRkNnME0JdYNTnmmxRdJIcmFfCGdnUlHSLiS9U0E5CCp4MY31ESB3ivOmZ3ewZ18WofH6IRNmU5Oae56g==", "dev": true, "requires": { "chalk": "^2.3.2", @@ -12963,7 +13605,7 @@ "webpack-addons": "^1.1.5", "yargs": "^11.1.0", "yeoman-environment": "^2.0.0", - "yeoman-generator": "^2.0.3" + "yeoman-generator": "^2.0.4" }, "dependencies": { "ansi-regex": { @@ -12982,9 +13624,9 @@ } }, "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -13027,15 +13669,15 @@ } }, "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "strip-ansi": { @@ -13048,9 +13690,9 @@ } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -13059,9 +13701,9 @@ } }, "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -13097,6 +13739,16 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", @@ -13276,26 +13928,40 @@ } }, "yeoman-environment": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", - "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.4.tgz", + "integrity": "sha512-KLxE5ft/74Qj7h3AsQZv8G6MEEHYJwmD5F99nfOVaep3rBzCtbrJKkdqWc7bDV141Nr8UZZsIXmzc3IcCm6E2w==", "dev": true, "requires": { - "chalk": "^2.1.0", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", "debug": "^3.1.0", - "diff": "^3.3.1", + "diff": "^3.5.0", "escape-string-regexp": "^1.0.2", - "globby": "^6.1.0", + "globby": "^8.0.1", "grouped-queue": "^0.3.3", - "inquirer": "^3.3.0", + "inquirer": "^6.0.0", "is-scoped": "^1.0.0", - "lodash": "^4.17.4", - "log-symbols": "^2.1.0", + "lodash": "^4.17.10", + "log-symbols": "^2.2.0", "mem-fs": "^1.1.0", + "strip-ansi": "^4.0.0", "text-table": "^0.2.0", - "untildify": "^3.0.2" + "untildify": "^3.0.3" }, "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -13306,9 +13972,9 @@ } }, "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -13316,38 +13982,149 @@ "supports-color": "^5.3.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" } }, "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", "dev": true, "requires": { "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inquirer": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "strip-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -13356,26 +14133,26 @@ } }, "yeoman-generator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.4.tgz", - "integrity": "sha512-Sgvz3MAkOpEIobcpW3rjEl6bOTNnl8SkibP9z7hYKfIGIlw0QDC2k0MAeXvyE2pLqc2M0Duql+6R7/W9GrJojg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.5.tgz", + "integrity": "sha512-rV6tJ8oYzm4mmdF2T3wjY+Q42jKF2YiiD0VKfJ8/0ZYwmhCKC9Xs2346HVLPj/xE13i68psnFJv7iS6gWRkeAg==", "dev": true, "requires": { "async": "^2.6.0", "chalk": "^2.3.0", "cli-table": "^0.3.1", - "cross-spawn": "^5.1.0", + "cross-spawn": "^6.0.5", "dargs": "^5.1.0", - "dateformat": "^3.0.2", + "dateformat": "^3.0.3", "debug": "^3.1.0", "detect-conflict": "^1.0.0", "error": "^7.0.2", "find-up": "^2.1.0", "github-username": "^4.0.0", - "istextorbinary": "^2.1.0", - "lodash": "^4.17.4", + "istextorbinary": "^2.2.1", + "lodash": "^4.17.10", "make-dir": "^1.1.0", - "mem-fs-editor": "^3.0.2", + "mem-fs-editor": "^4.0.0", "minimist": "^1.2.0", "pretty-bytes": "^4.0.2", "read-chunk": "^2.1.0", @@ -13398,18 +14175,18 @@ } }, "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "dev": true, "requires": { - "lodash": "^4.14.0" + "lodash": "^4.17.11" } }, "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -13417,13 +14194,26 @@ "supports-color": "^5.3.0" } }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "load-json-file": { @@ -13438,12 +14228,24 @@ "strip-bom": "^3.0.0" } }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -13484,10 +14286,16 @@ "read-pkg": "^3.0.0" } }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" diff --git a/package.json b/package.json index e9c9258b..1a7d6a75 100644 --- a/package.json +++ b/package.json @@ -57,17 +57,17 @@ "@types/chai": "^4.1.2", "@types/mocha": "^5.0.0", "babel-cli": "^6.26.0", - "babel-core": "^6.26.0", + "babel-core": "^6.26.3", "babel-eslint": "^8.2.2", "babel-loader": "^7.1.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-es2015-modules-umd": "^6.24.1", - "babel-preset-env": "^1.6.1", + "babel-preset-env": "^1.7.0", "chai": "^4.1.2", - "codecov": "^3.0.0", + "codecov": "^3.2.0", "eslint": "^4.18.2", "eslint-config-airbnb-base": "^12.1.0", - "eslint-plugin-import": "^2.9.0", + "eslint-plugin-import": "^2.16.0", "istanbul": "^v1.1.0-alpha.1", "mocha": "^5.0.4", "mochawesome": "^3.0.2", @@ -75,7 +75,7 @@ "ts-node": "^5.0.1", "tslint": "^5.9.1", "typescript": "^2.7.2", - "webpack": "^4.1.1", + "webpack": "^4.29.6", "webpack-cli": "2.1.1", "yargs": "^11.0.0" }, From e7346515843c7f96e0fffdf23032866cb33aa08d Mon Sep 17 00:00:00 2001 From: Loiane Date: Fri, 15 Mar 2019 12:01:21 -0400 Subject: [PATCH 143/188] eslint update + fixed new js lint issues --- .eslintrc.json | 4 +- package-lock.json | 2033 +++++++++++++---- package.json | 11 +- .../algorithms/backtracking/sudoku-solver.js | 6 +- .../matrix-chain-multiplication.js | 1 - .../dynamic-programing/min-coin-change.js | 6 +- .../greedy/matrix-chain-multiplication.js | 4 +- .../algorithms/search/interpolation-search.js | 6 +- src/js/data-structures/avl-tree.js | 19 +- src/js/data-structures/binary-search-tree.js | 23 +- .../data-structures/circular-linked-list.js | 3 + src/js/data-structures/dictionary.js | 12 + src/js/data-structures/doubly-linked-list.js | 9 + src/js/data-structures/graph.js | 5 + .../hash-table-linear-probing-lazy.js | 34 +- .../hash-table-linear-probing.js | 11 + .../hash-table-separate-chaining.js | 10 + src/js/data-structures/hash-table.js | 10 + src/js/data-structures/heap.js | 29 +- src/js/data-structures/linked-list.js | 11 + src/js/data-structures/models/node.js | 1 + src/js/data-structures/models/value-pair.js | 1 + src/js/data-structures/set.js | 12 + src/js/data-structures/sorted-linked-list.js | 3 + src/js/data-structures/stack-array.js | 1 + src/js/data-structures/stack-linked-list.js | 7 + src/js/data-structures/stack.js | 7 + src/js/index.js | 10 +- src/js/others/palindrome-checker.js | 6 +- src/js/util.js | 4 +- .../search/binary-search-recursive.spec.js | 1 - .../js/algorithms/sorting/bubble-sort.spec.js | 1 - test/js/algorithms/sorting/heap-sort.spec.js | 1 - .../algorithms/sorting/insertion-sort.spec.js | 1 - test/js/algorithms/sorting/merge-sort.spec.js | 1 - test/js/algorithms/sorting/quicksort.spec.js | 1 - test/js/algorithms/sorting/radix-sort.spec.js | 1 - .../algorithms/sorting/selection-sort.spec.js | 1 - test/js/algorithms/sorting/shell-sort.spec.js | 1 - test/js/data-structures/deque.spec.js | 1 + test/js/data-structures/my-obj.js | 1 + test/js/data-structures/queue.spec.js | 1 + test/js/data-structures/stack-array.spec.js | 1 + test/js/data-structures/stack.spec.js | 1 + test/js/others/factorial.spec.js | 2 +- 45 files changed, 1779 insertions(+), 536 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index b02c43f4..ac117e1a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -32,6 +32,8 @@ "prefer-destructuring": ["error", {"object": true, "array": false}], "padded-blocks": 0, "no-sparse-arrays": 0, - "array-bracket-spacing": 0 + "array-bracket-spacing": 0, + "import/no-named-as-default": 0, + "implicit-arrow-linebreak": 0 } } diff --git a/package-lock.json b/package-lock.json index d2b4d6d0..ff37798c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,73 +5,73 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", - "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "dev": true, "requires": { - "@babel/highlight": "7.0.0-beta.44" + "@babel/highlight": "^7.0.0" } }, "@babel/generator": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", - "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", + "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.44", + "@babel/types": "^7.3.4", "jsesc": "^2.5.1", - "lodash": "^4.2.0", + "lodash": "^4.17.11", "source-map": "^0.5.0", "trim-right": "^1.0.1" }, "dependencies": { "jsesc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", - "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true } } }, "@babel/helper-function-name": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", - "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.44", - "@babel/template": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44" + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", - "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.44" + "@babel/types": "^7.0.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", - "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.44" + "@babel/types": "^7.0.0" } }, "@babel/highlight": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", - "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", - "js-tokens": "^3.0.0" + "js-tokens": "^4.0.0" }, "dependencies": { "ansi-styles": { @@ -84,9 +84,9 @@ } }, "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -94,10 +94,16 @@ "supports-color": "^5.3.0" } }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -105,75 +111,71 @@ } } }, + "@babel/parser": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", + "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", + "dev": true + }, "@babel/template": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", - "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "lodash": "^4.2.0" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - } + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.2.2", + "@babel/types": "^7.2.2" } }, "@babel/traverse": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", - "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/generator": "7.0.0-beta.44", - "@babel/helper-function-name": "7.0.0-beta.44", - "@babel/helper-split-export-declaration": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "debug": "^3.1.0", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", + "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.3.4", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.3.4", + "@babel/types": "^7.3.4", + "debug": "^4.1.0", "globals": "^11.1.0", - "invariant": "^2.2.0", - "lodash": "^4.2.0" + "lodash": "^4.17.11" }, "dependencies": { - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "globals": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", - "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, "@babel/types": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", - "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", + "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.2.0", + "lodash": "^4.17.11", "to-fast-properties": "^2.0.0" }, "dependencies": { @@ -414,9 +416,9 @@ "dev": true }, "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true }, "acorn-dynamic-import": { @@ -426,21 +428,10 @@ "dev": true }, "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true }, "agent-base": { "version": "4.2.1", @@ -452,15 +443,15 @@ } }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-errors": { @@ -469,12 +460,6 @@ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "dev": true }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -701,6 +686,12 @@ "integrity": "sha512-oJjo+5e7/vEc2FBK8gUalV0pba4L3VdBIs2EKhOLHLcOd2FgQIVQN9xb0eZ9IjEWyAL7vq6fGJxOvVvdCHNyMw==", "dev": true }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", @@ -818,25 +809,17 @@ } }, "babel-eslint": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.3.tgz", - "integrity": "sha512-0HeSTtaXg/Em7FCUWxwOT+KeFSO1O7LuRuzhk7g+1BjwdlQGlHq4OyMi3GqGxrNfEq8jEi6Hmt5ylEQUhurgiQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", + "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/traverse": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "eslint-scope": "~3.7.1", + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", "eslint-visitor-keys": "^1.0.0" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - } } }, "babel-generator": { @@ -1035,62 +1018,1026 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + } + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-loader": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", + "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "util.promisify": "^1.0.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-add-module-exports": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.0.tgz", + "integrity": "sha512-m0sMxPL4FaN2K69GQgaRJa4Ny15qKSdoknIcpN+gz+NaJlAW9pge/povs13tPYsKDboflrEQC+/3kfIsONBTaw==", + "dev": true, + "requires": { + "chokidar": "^2.0.4" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", + "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "optional": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true, + "optional": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "nan": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.1.tgz", + "integrity": "sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==", + "dev": true, + "optional": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "optional": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } } } }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-loader": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", - "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", - "dev": true, - "requires": { - "find-cache-dir": "^1.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-add-module-exports": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", - "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=", - "dev": true - }, "babel-plugin-check-es2015-constants": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", @@ -2205,19 +3152,10 @@ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", "dev": true }, "camelcase": { @@ -2333,12 +3271,6 @@ "safe-buffer": "^5.0.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -2535,12 +3467,6 @@ } } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -2909,7 +3835,6 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, - "optional": true, "requires": { "object-keys": "^1.0.12" } @@ -2974,29 +3899,6 @@ "dev": true, "optional": true }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -3075,9 +3977,9 @@ } }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -3187,6 +4089,12 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -3270,7 +4178,6 @@ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "dev": true, - "optional": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -3285,7 +4192,6 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, - "optional": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -3314,49 +4220,47 @@ "dev": true }, "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.1.tgz", + "integrity": "sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.2", + "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", + "inquirer": "^6.2.2", + "js-yaml": "^3.12.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" }, "dependencies": { "ansi-regex": { @@ -3375,9 +4279,9 @@ } }, "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -3385,19 +4289,70 @@ "supports-color": "^5.3.0" } }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", + "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "globals": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", - "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "js-yaml": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "strip-ansi": { @@ -3410,9 +4365,9 @@ } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -3421,12 +4376,14 @@ } }, "eslint-config-airbnb-base": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz", - "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", + "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", "dev": true, "requires": { - "eslint-restricted-globals": "^0.1.1" + "eslint-restricted-globals": "^0.1.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4" } }, "eslint-import-resolver-node": { @@ -3510,6 +4467,12 @@ "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, "eslint-visitor-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", @@ -3517,13 +4480,14 @@ "dev": true }, "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" } }, "esprima": { @@ -3687,9 +4651,9 @@ "optional": true }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-glob": { @@ -4069,13 +5033,12 @@ } }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^2.0.1" } }, "filename-regex": { @@ -4134,17 +5097,93 @@ } } }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" - } - }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + } + } + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -4164,17 +5203,47 @@ } }, "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "dev": true + }, "flow-parser": { "version": "0.95.1", "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.95.1.tgz", @@ -4637,28 +5706,6 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, "got": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", @@ -4815,8 +5862,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true, - "optional": true + "dev": true }, "has-to-string-tag-x": { "version": "1.4.1", @@ -5071,6 +6117,16 @@ "minimatch": "^3.0.4" } }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, "import-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", @@ -5125,31 +6181,36 @@ "dev": true }, "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^2.0.4", + "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.3.0", + "lodash": "^4.17.11", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", + "rxjs": "^6.4.0", "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", + "strip-ansi": "^5.0.0", "through": "^2.3.6" }, "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { @@ -5162,9 +6223,9 @@ } }, "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -5172,19 +6233,54 @@ "supports-color": "^5.3.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -5266,8 +6362,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true, - "optional": true + "dev": true }, "is-data-descriptor": { "version": "0.1.4", @@ -5282,8 +6377,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true, - "optional": true + "dev": true }, "is-descriptor": { "version": "0.1.6", @@ -5404,30 +6498,6 @@ } } }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -5474,17 +6544,10 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, - "optional": true, "requires": { "has": "^1.0.1" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", @@ -5511,7 +6574,6 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, - "optional": true, "requires": { "has-symbols": "^1.0.0" } @@ -5831,9 +6893,9 @@ "optional": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "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-stable-stringify-without-jsonify": { @@ -9368,8 +10430,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", - "dev": true, - "optional": true + "dev": true }, "object-visit": { "version": "1.0.1", @@ -9388,6 +10449,40 @@ } } }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", @@ -9653,6 +10748,15 @@ "readable-stream": "^2.1.5" } }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-asn1": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", @@ -9815,12 +10919,6 @@ "find-up": "^2.1.0" } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, "portfinder": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", @@ -9886,9 +10984,9 @@ "dev": true }, "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "promise": { @@ -10221,9 +11319,9 @@ } }, "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, "regexpu-core": { @@ -10357,16 +11455,6 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -10409,9 +11497,9 @@ } }, "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-url": { @@ -10502,21 +11590,6 @@ "aproba": "^1.1.1" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, "rxjs": { "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", @@ -10699,12 +11772,25 @@ "dev": true }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } } }, "slide": { @@ -11166,46 +12252,41 @@ "dev": true }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", + "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", "dev": true, "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, - "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "strip-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -12108,6 +13189,16 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, "uuid": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", @@ -13810,9 +14901,9 @@ "dev": true }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { "mkdirp": "^0.5.1" diff --git a/package.json b/package.json index 1a7d6a75..d04bd8f5 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "lint:js": "eslint src/js && eslint test/js", "lint:ts": "tslint -c tslint.json 'src/ts/**/*.ts' && tslint -c tslint.json 'test/ts/**/*.ts'", "lint": "npm run lint:js && npm run lint:ts", + "eslintFix": "eslint src/js --fix && eslint test/js --fix", "test:js": "mocha --compilers js:babel-core/register ./test/js --recursive --reporter mochawesome", "test:ts": "mocha -r ts-node/register ./test/ts/**/*.spec.ts ./test/ts/**/**/*.spec.ts --recursive", "test": "npm run test:js && npm run test:ts", @@ -58,15 +59,15 @@ "@types/mocha": "^5.0.0", "babel-cli": "^6.26.0", "babel-core": "^6.26.3", - "babel-eslint": "^8.2.2", - "babel-loader": "^7.1.4", - "babel-plugin-add-module-exports": "^0.2.1", + "babel-eslint": "^10.0.1", + "babel-loader": "^8.0.5", + "babel-plugin-add-module-exports": "^1.0.0", "babel-plugin-transform-es2015-modules-umd": "^6.24.1", "babel-preset-env": "^1.7.0", "chai": "^4.1.2", "codecov": "^3.2.0", - "eslint": "^4.18.2", - "eslint-config-airbnb-base": "^12.1.0", + "eslint": "^5.15.1", + "eslint-config-airbnb-base": "^13.1.0", "eslint-plugin-import": "^2.16.0", "istanbul": "^v1.1.0-alpha.1", "mocha": "^5.0.4", diff --git a/src/js/algorithms/backtracking/sudoku-solver.js b/src/js/algorithms/backtracking/sudoku-solver.js index 48d98bd5..6e1a76fc 100644 --- a/src/js/algorithms/backtracking/sudoku-solver.js +++ b/src/js/algorithms/backtracking/sudoku-solver.js @@ -31,9 +31,9 @@ function usedInBox(matrix, boxStartRow, boxStartCol, num) { function isSafe(matrix, row, col, num) { return ( - !usedInRow(matrix, row, num) && - !usedInCol(matrix, col, num) && - !usedInBox(matrix, row - (row % 3), col - (col % 3), num) + !usedInRow(matrix, row, num) + && !usedInCol(matrix, col, num) + && !usedInBox(matrix, row - (row % 3), col - (col % 3), num) ); } function solveSudoku(matrix) { diff --git a/src/js/algorithms/dynamic-programing/matrix-chain-multiplication.js b/src/js/algorithms/dynamic-programing/matrix-chain-multiplication.js index ae155cb3..143f5772 100644 --- a/src/js/algorithms/dynamic-programing/matrix-chain-multiplication.js +++ b/src/js/algorithms/dynamic-programing/matrix-chain-multiplication.js @@ -43,4 +43,3 @@ export function matrixChainOrder(p) { printOptimalParenthesis(s, 1, n - 1); return m[1][n - 1]; } - diff --git a/src/js/algorithms/dynamic-programing/min-coin-change.js b/src/js/algorithms/dynamic-programing/min-coin-change.js index 5456cd30..a477c804 100644 --- a/src/js/algorithms/dynamic-programing/min-coin-change.js +++ b/src/js/algorithms/dynamic-programing/min-coin-change.js @@ -18,9 +18,9 @@ export function minCoinChange(coins, amount) { newMin = makeChange(newAmount); } if ( - newAmount >= 0 && - (newMin.length < min.length - 1 || !min.length) && - (newMin.length || !newAmount) + newAmount >= 0 + && (newMin.length < min.length - 1 || !min.length) + && (newMin.length || !newAmount) ) { min = [coin].concat(newMin); // console.log('new Min ' + min + ' for ' + amount); diff --git a/src/js/algorithms/greedy/matrix-chain-multiplication.js b/src/js/algorithms/greedy/matrix-chain-multiplication.js index 9909eab2..63c5b4ae 100644 --- a/src/js/algorithms/greedy/matrix-chain-multiplication.js +++ b/src/js/algorithms/greedy/matrix-chain-multiplication.js @@ -4,8 +4,8 @@ export function matrixChainOrder(p, i = 1, j = p.length - 1) { } let min = Number.MAX_SAFE_INTEGER; for (let k = i; k < j; k++) { - const count = - matrixChainOrder(p, i, k) + matrixChainOrder(p, k + 1, j) + ((p[i - 1] * p[k]) * p[j]); + const count = matrixChainOrder(p, i, k) + + matrixChainOrder(p, k + 1, j) + ((p[i - 1] * p[k]) * p[j]); if (count < min) { min = count; } diff --git a/src/js/algorithms/search/interpolation-search.js b/src/js/algorithms/search/interpolation-search.js index e2153349..2f9f7278 100644 --- a/src/js/algorithms/search/interpolation-search.js +++ b/src/js/algorithms/search/interpolation-search.js @@ -21,9 +21,9 @@ export function interpolationSearch( let position = -1; let delta = -1; while ( - low <= high && - biggerEquals(value, array[low], compareFn) && - lesserEquals(value, array[high], compareFn) + low <= high + && biggerEquals(value, array[low], compareFn) + && lesserEquals(value, array[high], compareFn) ) { delta = diffFn(value, array[low]) / diffFn(array[high], array[low]); position = low + Math.floor((high - low) * delta); diff --git a/src/js/data-structures/avl-tree.js b/src/js/data-structures/avl-tree.js index 108716e5..8ea3cfb9 100644 --- a/src/js/data-structures/avl-tree.js +++ b/src/js/data-structures/avl-tree.js @@ -16,12 +16,14 @@ export default class AVLTree extends BinarySearchTree { this.compareFn = compareFn; this.root = null; } + getNodeHeight(node) { if (node == null) { return -1; } return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1; } + /** * Left left case: rotate right * @@ -39,6 +41,7 @@ export default class AVLTree extends BinarySearchTree { tmp.right = node; return tmp; } + /** * Right right case: rotate left * @@ -56,6 +59,7 @@ export default class AVLTree extends BinarySearchTree { tmp.left = node; return tmp; } + /** * Left right case: rotate left then right * @param node Node @@ -64,6 +68,7 @@ export default class AVLTree extends BinarySearchTree { node.left = this.rotationRR(node.left); return this.rotationLL(node); } + /** * Right left case: rotate right then left * @param node Node @@ -72,6 +77,7 @@ export default class AVLTree extends BinarySearchTree { node.right = this.rotationLL(node.right); return this.rotationRR(node); } + getBalanceFactor(node) { const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right); switch (heightDifference) { @@ -87,13 +93,15 @@ export default class AVLTree extends BinarySearchTree { return BalanceFactor.BALANCED; } } + insert(key) { this.root = this.insertNode(this.root, key); } + insertNode(node, key) { if (node == null) { return new Node(key); - } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + } if (this.compareFn(key, node.key) === Compare.LESS_THAN) { node.left = this.insertNode(node.left, key); } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { node.right = this.insertNode(node.right, key); @@ -122,6 +130,7 @@ export default class AVLTree extends BinarySearchTree { } return node; } + removeNode(node, key) { node = super.removeNode(node, key); // {1} if (node == null) { @@ -132,8 +141,8 @@ export default class AVLTree extends BinarySearchTree { if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) { // Left left case if ( - this.getBalanceFactor(node.left) === BalanceFactor.BALANCED || - this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT + this.getBalanceFactor(node.left) === BalanceFactor.BALANCED + || this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT ) { return this.rotationLL(node); } @@ -145,8 +154,8 @@ export default class AVLTree extends BinarySearchTree { if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) { // Right right case if ( - this.getBalanceFactor(node.right) === BalanceFactor.BALANCED || - this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT + this.getBalanceFactor(node.right) === BalanceFactor.BALANCED + || this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT ) { return this.rotationRR(node); } diff --git a/src/js/data-structures/binary-search-tree.js b/src/js/data-structures/binary-search-tree.js index 0dbe9519..98795a16 100644 --- a/src/js/data-structures/binary-search-tree.js +++ b/src/js/data-structures/binary-search-tree.js @@ -6,6 +6,7 @@ export default class BinarySearchTree { this.compareFn = compareFn; this.root = undefined; } + insert(key) { // special case: first key if (this.root == null) { @@ -14,6 +15,7 @@ export default class BinarySearchTree { this.insertNode(this.root, key); } } + insertNode(node, key) { if (this.compareFn(key, node.key) === Compare.LESS_THAN) { if (node.left == null) { @@ -27,26 +29,31 @@ export default class BinarySearchTree { this.insertNode(node.right, key); } } + getRoot() { return this.root; } + search(key) { return this.searchNode(this.root, key); } + searchNode(node, key) { if (node == null) { return false; } if (this.compareFn(key, node.key) === Compare.LESS_THAN) { return this.searchNode(node.left, key); - } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { + } if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { return this.searchNode(node.right, key); } return true; } + inOrderTraverse(callback) { this.inOrderTraverseNode(this.root, callback); } + inOrderTraverseNode(node, callback) { if (node != null) { this.inOrderTraverseNode(node.left, callback); @@ -54,9 +61,11 @@ export default class BinarySearchTree { this.inOrderTraverseNode(node.right, callback); } } + preOrderTraverse(callback) { this.preOrderTraverseNode(this.root, callback); } + preOrderTraverseNode(node, callback) { if (node != null) { callback(node.key); @@ -64,9 +73,11 @@ export default class BinarySearchTree { this.preOrderTraverseNode(node.right, callback); } } + postOrderTraverse(callback) { this.postOrderTraverseNode(this.root, callback); } + postOrderTraverseNode(node, callback) { if (node != null) { this.postOrderTraverseNode(node.left, callback); @@ -74,9 +85,11 @@ export default class BinarySearchTree { callback(node.key); } } + min() { return this.minNode(this.root); } + minNode(node) { let current = node; while (current != null && current.left != null) { @@ -84,9 +97,11 @@ export default class BinarySearchTree { } return current; } + max() { return this.maxNode(this.root); } + maxNode(node) { let current = node; while (current != null && current.right != null) { @@ -94,9 +109,11 @@ export default class BinarySearchTree { } return current; } + remove(key) { this.root = this.removeNode(this.root, key); } + removeNode(node, key) { if (node == null) { return undefined; @@ -104,7 +121,7 @@ export default class BinarySearchTree { if (this.compareFn(key, node.key) === Compare.LESS_THAN) { node.left = this.removeNode(node.left, key); return node; - } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { + } if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { node.right = this.removeNode(node.right, key); return node; } @@ -122,7 +139,7 @@ export default class BinarySearchTree { if (node.left == null) { node = node.right; return node; - } else if (node.right == null) { + } if (node.right == null) { node = node.left; return node; } diff --git a/src/js/data-structures/circular-linked-list.js b/src/js/data-structures/circular-linked-list.js index cc565558..4209087a 100644 --- a/src/js/data-structures/circular-linked-list.js +++ b/src/js/data-structures/circular-linked-list.js @@ -6,6 +6,7 @@ export default class CircularLinkedList extends LinkedList { constructor(equalsFn = defaultEquals) { super(equalsFn); } + push(element) { const node = new Node(element); let current; @@ -19,6 +20,7 @@ export default class CircularLinkedList extends LinkedList { node.next = this.head; this.count++; } + insert(element, index) { if (index >= 0 && index <= this.count) { const node = new Node(element); @@ -45,6 +47,7 @@ export default class CircularLinkedList extends LinkedList { } return false; } + removeAt(index) { if (index >= 0 && index < this.count) { let current = this.head; diff --git a/src/js/data-structures/dictionary.js b/src/js/data-structures/dictionary.js index 4ec6212a..2b0568bd 100644 --- a/src/js/data-structures/dictionary.js +++ b/src/js/data-structures/dictionary.js @@ -6,6 +6,7 @@ export default class Dictionary { this.toStrFn = toStrFn; this.table = {}; } + set(key, value) { if (key != null && value != null) { const tableKey = this.toStrFn(key); @@ -14,13 +15,16 @@ export default class Dictionary { } return false; } + get(key) { const valuePair = this.table[this.toStrFn(key)]; return valuePair == null ? undefined : valuePair.value; } + hasKey(key) { return this.table[this.toStrFn(key)] != null; } + remove(key) { if (this.hasKey(key)) { delete this.table[this.toStrFn(key)]; @@ -28,15 +32,19 @@ export default class Dictionary { } return false; } + values() { return this.keyValues().map(valuePair => valuePair.value); } + keys() { return this.keyValues().map(valuePair => valuePair.key); } + keyValues() { return Object.values(this.table); } + forEach(callbackFn) { const valuePairs = this.keyValues(); for (let i = 0; i < valuePairs.length; i++) { @@ -46,15 +54,19 @@ export default class Dictionary { } } } + isEmpty() { return this.size() === 0; } + size() { return Object.keys(this.table).length; } + clear() { this.table = {}; } + toString() { if (this.isEmpty()) { return ''; diff --git a/src/js/data-structures/doubly-linked-list.js b/src/js/data-structures/doubly-linked-list.js index 8960e173..e6547ec4 100644 --- a/src/js/data-structures/doubly-linked-list.js +++ b/src/js/data-structures/doubly-linked-list.js @@ -7,6 +7,7 @@ export default class DoublyLinkedList extends LinkedList { super(equalsFn); this.tail = undefined; } + push(element) { const node = new DoublyNode(element); if (this.head == null) { @@ -20,6 +21,7 @@ export default class DoublyLinkedList extends LinkedList { } this.count++; } + insert(element, index) { if (index >= 0 && index <= this.count) { const node = new DoublyNode(element); @@ -51,6 +53,7 @@ export default class DoublyLinkedList extends LinkedList { } return false; } + removeAt(index) { if (index >= 0 && index < this.count) { let current = this.head; @@ -80,6 +83,7 @@ export default class DoublyLinkedList extends LinkedList { } return undefined; } + indexOf(element) { let current = this.head; let index = 0; @@ -92,16 +96,20 @@ export default class DoublyLinkedList extends LinkedList { } return -1; } + getHead() { return this.head; } + getTail() { return this.tail; } + clear() { super.clear(); this.tail = undefined; } + toString() { if (this.head == null) { return ''; @@ -114,6 +122,7 @@ export default class DoublyLinkedList extends LinkedList { } return objString; } + inverseToString() { if (this.tail == null) { return ''; diff --git a/src/js/data-structures/graph.js b/src/js/data-structures/graph.js index d8c92044..f9bfbe51 100644 --- a/src/js/data-structures/graph.js +++ b/src/js/data-structures/graph.js @@ -6,12 +6,14 @@ export default class Graph { this.vertices = []; this.adjList = new Dictionary(); } + addVertex(v) { if (!this.vertices.includes(v)) { this.vertices.push(v); this.adjList.set(v, []); // initialize adjacency list with array as well; } } + addEdge(a, b) { if (!this.adjList.get(a)) { this.addVertex(a); @@ -24,12 +26,15 @@ export default class Graph { this.adjList.get(b).push(a); } } + getVertices() { return this.vertices; } + getAdjList() { return this.adjList; } + toString() { let s = ''; for (let i = 0; i < this.vertices.length; i++) { diff --git a/src/js/data-structures/hash-table-linear-probing-lazy.js b/src/js/data-structures/hash-table-linear-probing-lazy.js index 57038d0f..d7314f0e 100644 --- a/src/js/data-structures/hash-table-linear-probing-lazy.js +++ b/src/js/data-structures/hash-table-linear-probing-lazy.js @@ -6,6 +6,7 @@ export default class HashTableLinearProbingLazy { this.toStrFn = toStrFn; this.table = {}; } + loseloseHashCode(key) { if (typeof key === 'number') { return key; @@ -17,15 +18,17 @@ export default class HashTableLinearProbingLazy { } return hash % 37; } + hashCode(key) { return this.loseloseHashCode(key); } + put(key, value) { if (key != null && value != null) { const position = this.hashCode(key); if ( - this.table[position] == null || - (this.table[position] != null && this.table[position].isDeleted) + this.table[position] == null + || (this.table[position] != null && this.table[position].isDeleted) ) { this.table[position] = new ValuePairLazy(key, value); } else { @@ -39,6 +42,7 @@ export default class HashTableLinearProbingLazy { } return false; } + get(key) { const position = this.hashCode(key); if (this.table[position] != null) { @@ -47,8 +51,8 @@ export default class HashTableLinearProbingLazy { } let index = position + 1; while ( - this.table[index] != null && - (this.table[index].key !== key || this.table[index].isDeleted) + this.table[index] != null + && (this.table[index].key !== key || this.table[index].isDeleted) ) { if (this.table[index].key === key && this.table[index].isDeleted) { return undefined; @@ -56,15 +60,16 @@ export default class HashTableLinearProbingLazy { index++; } if ( - this.table[index] != null && - this.table[index].key === key && - !this.table[index].isDeleted + this.table[index] != null + && this.table[index].key === key + && !this.table[index].isDeleted ) { return this.table[position].value; } } return undefined; } + remove(key) { const position = this.hashCode(key); if (this.table[position] != null) { @@ -74,15 +79,15 @@ export default class HashTableLinearProbingLazy { } let index = position + 1; while ( - this.table[index] != null && - (this.table[index].key !== key || this.table[index].isDeleted) + this.table[index] != null + && (this.table[index].key !== key || this.table[index].isDeleted) ) { index++; } if ( - this.table[index] != null && - this.table[index].key === key && - !this.table[index].isDeleted + this.table[index] != null + && this.table[index].key === key + && !this.table[index].isDeleted ) { this.table[index].isDeleted = true; return true; @@ -90,9 +95,11 @@ export default class HashTableLinearProbingLazy { } return false; } + isEmpty() { return this.size() === 0; } + size() { let count = 0; Object.values(this.table).forEach(valuePair => { @@ -100,12 +107,15 @@ export default class HashTableLinearProbingLazy { }); return count; } + clear() { this.table = {}; } + getTable() { return this.table; } + toString() { if (this.isEmpty()) { return ''; diff --git a/src/js/data-structures/hash-table-linear-probing.js b/src/js/data-structures/hash-table-linear-probing.js index 940d764a..2b7af8b2 100644 --- a/src/js/data-structures/hash-table-linear-probing.js +++ b/src/js/data-structures/hash-table-linear-probing.js @@ -6,6 +6,7 @@ export default class HashTableLinearProbing { this.toStrFn = toStrFn; this.table = {}; } + loseloseHashCode(key) { if (typeof key === 'number') { return key; @@ -17,9 +18,11 @@ export default class HashTableLinearProbing { } return hash % 37; } + hashCode(key) { return this.loseloseHashCode(key); } + put(key, value) { if (key != null && value != null) { const position = this.hashCode(key); @@ -36,6 +39,7 @@ export default class HashTableLinearProbing { } return false; } + get(key) { const position = this.hashCode(key); if (this.table[position] != null) { @@ -52,6 +56,7 @@ export default class HashTableLinearProbing { } return undefined; } + remove(key) { const position = this.hashCode(key); if (this.table[position] != null) { @@ -72,6 +77,7 @@ export default class HashTableLinearProbing { } return false; } + verifyRemoveSideEffect(key, removedPosition) { const hash = this.hashCode(key); let index = removedPosition + 1; @@ -85,18 +91,23 @@ export default class HashTableLinearProbing { index++; } } + isEmpty() { return this.size() === 0; } + size() { return Object.keys(this.table).length; } + clear() { this.table = {}; } + getTable() { return this.table; } + toString() { if (this.isEmpty()) { return ''; diff --git a/src/js/data-structures/hash-table-separate-chaining.js b/src/js/data-structures/hash-table-separate-chaining.js index c00c277c..c8646ae9 100644 --- a/src/js/data-structures/hash-table-separate-chaining.js +++ b/src/js/data-structures/hash-table-separate-chaining.js @@ -7,6 +7,7 @@ export default class HashTableSeparateChaining { this.toStrFn = toStrFn; this.table = {}; } + loseloseHashCode(key) { if (typeof key === 'number') { return key; @@ -18,9 +19,11 @@ export default class HashTableSeparateChaining { } return hash % 37; } + hashCode(key) { return this.loseloseHashCode(key); } + put(key, value) { if (key != null && value != null) { const position = this.hashCode(key); @@ -32,6 +35,7 @@ export default class HashTableSeparateChaining { } return false; } + get(key) { const position = this.hashCode(key); const linkedList = this.table[position]; @@ -46,6 +50,7 @@ export default class HashTableSeparateChaining { } return undefined; } + remove(key) { const position = this.hashCode(key); const linkedList = this.table[position]; @@ -64,9 +69,11 @@ export default class HashTableSeparateChaining { } return false; } + isEmpty() { return this.size() === 0; } + size() { let count = 0; Object.values(this.table).forEach(linkedList => { @@ -74,12 +81,15 @@ export default class HashTableSeparateChaining { }); return count; } + clear() { this.table = {}; } + getTable() { return this.table; } + toString() { if (this.isEmpty()) { return ''; diff --git a/src/js/data-structures/hash-table.js b/src/js/data-structures/hash-table.js index 725ac0b5..79bc51fd 100644 --- a/src/js/data-structures/hash-table.js +++ b/src/js/data-structures/hash-table.js @@ -6,6 +6,7 @@ export default class HashTable { this.toStrFn = toStrFn; this.table = {}; } + loseloseHashCode(key) { if (typeof key === 'number') { return key; @@ -17,6 +18,7 @@ export default class HashTable { } return hash % 37; } + /* djb2HashCode(key) { const tableKey = this.toStrFn(key); let hash = 5381; @@ -28,6 +30,7 @@ export default class HashTable { hashCode(key) { return this.loseloseHashCode(key); } + put(key, value) { if (key != null && value != null) { const position = this.hashCode(key); @@ -36,10 +39,12 @@ export default class HashTable { } return false; } + get(key) { const valuePair = this.table[this.hashCode(key)]; return valuePair == null ? undefined : valuePair.value; } + remove(key) { const hash = this.hashCode(key); const valuePair = this.table[hash]; @@ -49,18 +54,23 @@ export default class HashTable { } return false; } + getTable() { return this.table; } + isEmpty() { return this.size() === 0; } + size() { return Object.keys(this.table).length; } + clear() { this.table = {}; } + toString() { if (this.isEmpty()) { return ''; diff --git a/src/js/data-structures/heap.js b/src/js/data-structures/heap.js index 044237e6..889e5957 100644 --- a/src/js/data-structures/heap.js +++ b/src/js/data-structures/heap.js @@ -1,34 +1,44 @@ -import { Compare, defaultCompare, reverseCompare, swap } from '../util'; +import { + Compare, defaultCompare, reverseCompare, swap +} from '../util'; export class MinHeap { constructor(compareFn = defaultCompare) { this.compareFn = compareFn; this.heap = []; } + getLeftIndex(index) { return (2 * index) + 1; } + getRightIndex(index) { return (2 * index) + 2; } + getParentIndex(index) { if (index === 0) { return undefined; } return Math.floor((index - 1) / 2); } + size() { return this.heap.length; } + isEmpty() { return this.size() <= 0; } + clear() { this.heap = []; } + findMinimum() { return this.isEmpty() ? undefined : this.heap[0]; } + insert(value) { if (value != null) { const index = this.heap.length; @@ -38,20 +48,21 @@ export class MinHeap { } return false; } + siftDown(index) { let element = index; const left = this.getLeftIndex(index); const right = this.getRightIndex(index); const size = this.size(); if ( - left < size && - this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN + left < size + && this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN ) { element = left; } if ( - right < size && - this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN + right < size + && this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN ) { element = right; } @@ -60,17 +71,19 @@ export class MinHeap { this.siftDown(element); } } + siftUp(index) { let parent = this.getParentIndex(index); while ( - index > 0 && - this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN + index > 0 + && this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN ) { swap(this.heap, parent, index); index = parent; parent = this.getParentIndex(index); } } + extract() { if (this.isEmpty()) { return undefined; @@ -83,6 +96,7 @@ export class MinHeap { this.siftDown(0); return removedValue; } + heapify(array) { if (array) { this.heap = array; @@ -93,6 +107,7 @@ export class MinHeap { } return this.heap; } + getAsArray() { return this.heap; } diff --git a/src/js/data-structures/linked-list.js b/src/js/data-structures/linked-list.js index e9b2e16b..fdd32d8b 100644 --- a/src/js/data-structures/linked-list.js +++ b/src/js/data-structures/linked-list.js @@ -7,6 +7,7 @@ export default class LinkedList { this.count = 0; this.head = undefined; } + push(element) { const node = new Node(element); let current; @@ -22,6 +23,7 @@ export default class LinkedList { } this.count++; } + getElementAt(index) { if (index >= 0 && index <= this.count) { let node = this.head; @@ -32,6 +34,7 @@ export default class LinkedList { } return undefined; } + insert(element, index) { if (index >= 0 && index <= this.count) { const node = new Node(element); @@ -49,6 +52,7 @@ export default class LinkedList { } return false; } + removeAt(index) { if (index >= 0 && index < this.count) { let current = this.head; @@ -64,10 +68,12 @@ export default class LinkedList { } return undefined; } + remove(element) { const index = this.indexOf(element); return this.removeAt(index); } + indexOf(element) { let current = this.head; for (let i = 0; i < this.size() && current != null; i++) { @@ -78,19 +84,24 @@ export default class LinkedList { } return -1; } + isEmpty() { return this.size() === 0; } + size() { return this.count; } + getHead() { return this.head; } + clear() { this.head = undefined; this.count = 0; } + toString() { if (this.head == null) { return ''; diff --git a/src/js/data-structures/models/node.js b/src/js/data-structures/models/node.js index 70339215..33b4f371 100644 --- a/src/js/data-structures/models/node.js +++ b/src/js/data-structures/models/node.js @@ -4,6 +4,7 @@ export class Node { this.left = undefined; this.right = undefined; } + toString() { return `${this.key}`; } diff --git a/src/js/data-structures/models/value-pair.js b/src/js/data-structures/models/value-pair.js index b35a936a..7aa20025 100644 --- a/src/js/data-structures/models/value-pair.js +++ b/src/js/data-structures/models/value-pair.js @@ -3,6 +3,7 @@ export class ValuePair { this.key = key; this.value = value; } + toString() { return `[#${this.key}: ${this.value}]`; } diff --git a/src/js/data-structures/set.js b/src/js/data-structures/set.js index 0203bb8b..0dc29a0c 100644 --- a/src/js/data-structures/set.js +++ b/src/js/data-structures/set.js @@ -2,6 +2,7 @@ export default class Set { constructor() { this.items = {}; } + add(element) { if (!this.has(element)) { this.items[element] = element; @@ -9,6 +10,7 @@ export default class Set { } return false; } + delete(element) { if (this.has(element)) { delete this.items[element]; @@ -16,18 +18,22 @@ export default class Set { } return false; } + has(element) { return Object.prototype.hasOwnProperty.call(this.items, element); } + values() { return Object.values(this.items); } + union(otherSet) { const unionSet = new Set(); this.values().forEach(value => unionSet.add(value)); otherSet.values().forEach(value => unionSet.add(value)); return unionSet; } + intersection(otherSet) { const intersectionSet = new Set(); const values = this.values(); @@ -45,6 +51,7 @@ export default class Set { }); return intersectionSet; } + difference(otherSet) { const differenceSet = new Set(); this.values().forEach(value => { @@ -54,6 +61,7 @@ export default class Set { }); return differenceSet; } + isSubsetOf(otherSet) { if (this.size() > otherSet.size()) { return false; @@ -68,15 +76,19 @@ export default class Set { }); return isSubset; } + isEmpty() { return this.size() === 0; } + size() { return Object.keys(this.items).length; } + clear() { this.items = {}; } + toString() { if (this.isEmpty()) { return ''; diff --git a/src/js/data-structures/sorted-linked-list.js b/src/js/data-structures/sorted-linked-list.js index 7b3bd468..6712f6a8 100644 --- a/src/js/data-structures/sorted-linked-list.js +++ b/src/js/data-structures/sorted-linked-list.js @@ -7,6 +7,7 @@ export default class SortedLinkedList extends LinkedList { this.equalsFn = equalsFn; this.compareFn = compareFn; } + push(element) { if (this.isEmpty()) { super.push(element); @@ -15,6 +16,7 @@ export default class SortedLinkedList extends LinkedList { super.insert(element, index); } } + insert(element, index = 0) { if (this.isEmpty()) { return super.insert(element, index === 0 ? index : 0); @@ -22,6 +24,7 @@ export default class SortedLinkedList extends LinkedList { const pos = this.getIndexNextSortedElement(element); return super.insert(element, pos); } + getIndexNextSortedElement(element) { let current = this.head; let i = 0; diff --git a/src/js/data-structures/stack-array.js b/src/js/data-structures/stack-array.js index ec8642ad..1491eb2c 100644 --- a/src/js/data-structures/stack-array.js +++ b/src/js/data-structures/stack-array.js @@ -4,6 +4,7 @@ export default class StackArray { constructor() { this.items = []; } + push(element) { this.items.push(element); } diff --git a/src/js/data-structures/stack-linked-list.js b/src/js/data-structures/stack-linked-list.js index cab8c5d5..902a5d78 100644 --- a/src/js/data-structures/stack-linked-list.js +++ b/src/js/data-structures/stack-linked-list.js @@ -4,9 +4,11 @@ export default class StackLinkedList { constructor() { this.items = new DoublyLinkedList(); } + push(element) { this.items.push(element); } + pop() { if (this.isEmpty()) { return undefined; @@ -14,21 +16,26 @@ export default class StackLinkedList { const result = this.items.removeAt(this.size() - 1); return result; } + peek() { if (this.isEmpty()) { return undefined; } return this.items.getElementAt(this.size() - 1).element; } + isEmpty() { return this.items.isEmpty(); } + size() { return this.items.size(); } + clear() { this.items.clear(); } + toString() { return this.items.toString(); } diff --git a/src/js/data-structures/stack.js b/src/js/data-structures/stack.js index 081bab33..af9b297b 100644 --- a/src/js/data-structures/stack.js +++ b/src/js/data-structures/stack.js @@ -5,10 +5,12 @@ export default class Stack { this.count = 0; this.items = {}; } + push(element) { this.items[this.count] = element; this.count++; } + pop() { if (this.isEmpty()) { return undefined; @@ -18,18 +20,22 @@ export default class Stack { delete this.items[this.count]; return result; } + peek() { if (this.isEmpty()) { return undefined; } return this.items[this.count - 1]; } + isEmpty() { return this.count === 0; } + size() { return this.count; } + clear() { /* while (!this.isEmpty()) { this.pop(); @@ -37,6 +43,7 @@ export default class Stack { this.items = {}; this.count = 0; } + toString() { if (this.isEmpty()) { return ''; diff --git a/src/js/index.js b/src/js/index.js index a79f2d30..fa359f81 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -36,11 +36,11 @@ export { default as HashTableLinearProbing } from './data-structures/hash-table- export { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy'; // chapter 08 -export { default as factorialIterative } from './others/factorial'; -export { default as factorial } from './others/factorial'; -export { default as fibonacci } from './others/fibonacci'; -export { default as fibonacciIterative } from './others/fibonacci'; -export { default as fibonacciMemoization } from './others/fibonacci'; +export { factorialIterative } from './others/factorial'; +export { factorial } from './others/factorial'; +export { fibonacci } from './others/fibonacci'; +export { fibonacciIterative } from './others/fibonacci'; +export { fibonacciMemoization } from './others/fibonacci'; // chapter 09 export { default as BinarySearchTree } from './data-structures/binary-search-tree'; diff --git a/src/js/others/palindrome-checker.js b/src/js/others/palindrome-checker.js index 54210c7b..1551e26a 100644 --- a/src/js/others/palindrome-checker.js +++ b/src/js/others/palindrome-checker.js @@ -2,9 +2,9 @@ import Deque from '../data-structures/deque'; export function palindromeChecker(aString) { if ( - aString === undefined || - aString === null || - (aString !== null && aString.length === 0) + aString === undefined + || aString === null + || (aString !== null && aString.length === 0) ) { return false; } diff --git a/src/js/util.js b/src/js/util.js index f88d7bcd..9e780fba 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -30,9 +30,9 @@ export function defaultEquals(a, b) { export function defaultToString(item) { if (item === null) { return 'NULL'; - } else if (item === undefined) { + } if (item === undefined) { return 'UNDEFINED'; - } else if (typeof item === 'string' || item instanceof String) { + } if (typeof item === 'string' || item instanceof String) { return `${item}`; } return item.toString(); diff --git a/test/js/algorithms/search/binary-search-recursive.spec.js b/test/js/algorithms/search/binary-search-recursive.spec.js index a93081e2..8aab4959 100644 --- a/test/js/algorithms/search/binary-search-recursive.spec.js +++ b/test/js/algorithms/search/binary-search-recursive.spec.js @@ -2,4 +2,3 @@ import { binarySearchRecursive } from '../../../../src/js/index'; import { testSearchAlgorithm } from './search-algorithms-tests'; testSearchAlgorithm(binarySearchRecursive, 'Binary Search Recursive'); - diff --git a/test/js/algorithms/sorting/bubble-sort.spec.js b/test/js/algorithms/sorting/bubble-sort.spec.js index fe3b31a2..b903df74 100644 --- a/test/js/algorithms/sorting/bubble-sort.spec.js +++ b/test/js/algorithms/sorting/bubble-sort.spec.js @@ -2,4 +2,3 @@ import { bubbleSort } from '../../../../src/js/index'; import { testSortAlgorithm } from './sort-algorithm-tests'; testSortAlgorithm(bubbleSort, 'Bubble Sort'); - diff --git a/test/js/algorithms/sorting/heap-sort.spec.js b/test/js/algorithms/sorting/heap-sort.spec.js index 75505e4e..ae3816dc 100644 --- a/test/js/algorithms/sorting/heap-sort.spec.js +++ b/test/js/algorithms/sorting/heap-sort.spec.js @@ -2,4 +2,3 @@ import { heapSort } from '../../../../src/js/index'; import { testSortAlgorithm } from './sort-algorithm-tests'; testSortAlgorithm(heapSort, 'Heap Sort'); - diff --git a/test/js/algorithms/sorting/insertion-sort.spec.js b/test/js/algorithms/sorting/insertion-sort.spec.js index 324e12c5..c28a69de 100644 --- a/test/js/algorithms/sorting/insertion-sort.spec.js +++ b/test/js/algorithms/sorting/insertion-sort.spec.js @@ -2,4 +2,3 @@ import { insertionSort } from '../../../../src/js/index'; import { testSortAlgorithm } from './sort-algorithm-tests'; testSortAlgorithm(insertionSort, 'Insertion Sort'); - diff --git a/test/js/algorithms/sorting/merge-sort.spec.js b/test/js/algorithms/sorting/merge-sort.spec.js index f46ca6bb..5b161785 100644 --- a/test/js/algorithms/sorting/merge-sort.spec.js +++ b/test/js/algorithms/sorting/merge-sort.spec.js @@ -2,4 +2,3 @@ import { mergeSort } from '../../../../src/js/index'; import { testSortAlgorithm } from './sort-algorithm-tests'; testSortAlgorithm(mergeSort, 'Merge Sort'); - diff --git a/test/js/algorithms/sorting/quicksort.spec.js b/test/js/algorithms/sorting/quicksort.spec.js index d23694db..0cbe027a 100644 --- a/test/js/algorithms/sorting/quicksort.spec.js +++ b/test/js/algorithms/sorting/quicksort.spec.js @@ -2,4 +2,3 @@ import { quickSort } from '../../../../src/js/index'; import { testSortAlgorithm } from './sort-algorithm-tests'; testSortAlgorithm(quickSort, 'Quick Sort'); - diff --git a/test/js/algorithms/sorting/radix-sort.spec.js b/test/js/algorithms/sorting/radix-sort.spec.js index b312af90..af6a5b07 100644 --- a/test/js/algorithms/sorting/radix-sort.spec.js +++ b/test/js/algorithms/sorting/radix-sort.spec.js @@ -2,4 +2,3 @@ import { radixSort } from '../../../../src/js/index'; import { testSortAlgorithm } from './sort-algorithm-tests'; testSortAlgorithm(radixSort, 'Radix Sort', { reverseCompare: false }); - diff --git a/test/js/algorithms/sorting/selection-sort.spec.js b/test/js/algorithms/sorting/selection-sort.spec.js index ad372942..3d6cd3cc 100644 --- a/test/js/algorithms/sorting/selection-sort.spec.js +++ b/test/js/algorithms/sorting/selection-sort.spec.js @@ -2,4 +2,3 @@ import { selectionSort } from '../../../../src/js/index'; import { testSortAlgorithm } from './sort-algorithm-tests'; testSortAlgorithm(selectionSort, 'Selection Sort'); - diff --git a/test/js/algorithms/sorting/shell-sort.spec.js b/test/js/algorithms/sorting/shell-sort.spec.js index eb9ba569..92aa33a5 100644 --- a/test/js/algorithms/sorting/shell-sort.spec.js +++ b/test/js/algorithms/sorting/shell-sort.spec.js @@ -2,4 +2,3 @@ import { shellSort } from '../../../../src/js/index'; import { testSortAlgorithm } from './sort-algorithm-tests'; testSortAlgorithm(shellSort, 'Shell Sort'); - diff --git a/test/js/data-structures/deque.spec.js b/test/js/data-structures/deque.spec.js index 69861377..49ab2dfa 100644 --- a/test/js/data-structures/deque.spec.js +++ b/test/js/data-structures/deque.spec.js @@ -191,6 +191,7 @@ describe('Deque', () => { this.el1 = el1; this.el2 = el2; } + toString() { return `${this.el1.toString()}|${this.el2.toString()}`; } diff --git a/test/js/data-structures/my-obj.js b/test/js/data-structures/my-obj.js index a4d2f5f3..ed407894 100644 --- a/test/js/data-structures/my-obj.js +++ b/test/js/data-structures/my-obj.js @@ -3,6 +3,7 @@ export default class MyObj { this.el1 = el1; this.el2 = el2; } + toString() { return `${this.el1.toString()}|${this.el2.toString()}`; } diff --git a/test/js/data-structures/queue.spec.js b/test/js/data-structures/queue.spec.js index ec113683..84587bc1 100644 --- a/test/js/data-structures/queue.spec.js +++ b/test/js/data-structures/queue.spec.js @@ -155,6 +155,7 @@ describe('Queue', () => { this.el1 = el1; this.el2 = el2; } + toString() { return `${this.el1.toString()}|${this.el2.toString()}`; } diff --git a/test/js/data-structures/stack-array.spec.js b/test/js/data-structures/stack-array.spec.js index 615fca68..0f5912ca 100644 --- a/test/js/data-structures/stack-array.spec.js +++ b/test/js/data-structures/stack-array.spec.js @@ -165,6 +165,7 @@ describe('StackArray', () => { this.el1 = el1; this.el2 = el2; } + toString() { return `${this.el1.toString()}|${this.el2.toString()}`; } diff --git a/test/js/data-structures/stack.spec.js b/test/js/data-structures/stack.spec.js index 7c77703b..55361a8a 100644 --- a/test/js/data-structures/stack.spec.js +++ b/test/js/data-structures/stack.spec.js @@ -148,6 +148,7 @@ describe('Stack', () => { this.el1 = el1; this.el2 = el2; } + toString() { return `${this.el1.toString()}|${this.el2.toString()}`; } diff --git a/test/js/others/factorial.spec.js b/test/js/others/factorial.spec.js index 975f6404..69341a7a 100644 --- a/test/js/others/factorial.spec.js +++ b/test/js/others/factorial.spec.js @@ -1,6 +1,6 @@ import 'mocha'; import { expect } from 'chai'; -import { factorialIterative, factorial } from './../../../src/js/others/factorial'; +import { factorialIterative, factorial } from '../../../src/js/others/factorial'; describe('Factorial', () => { it('Iterative Factorial', () => { From cf5596547f3b5a722ec2bd6343dc7d7aebefd0ce Mon Sep 17 00:00:00 2001 From: Loiane Date: Fri, 15 Mar 2019 12:13:09 -0400 Subject: [PATCH 144/188] updated readme: chinese + portuguese links 3rd ed --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 20227c07..df8c3da9 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,8 @@ Book link - second edition: Book link - third edition: - [Packt](https://www.packtpub.com/web-development/learning-javascript-data-structures-and-algorithms-third-edition) - [Amazon](http://a.co/cbMlYmJ) + - [Chinese version](http://www.ituring.com.cn/book/2653) + - [Brazilian Portuguese version](https://novatec.com.br/livros/estruturas-de-dados-algoritmos-em-javascript-2ed/) ### Found an issue or have a question? From 703767abb759d6514f159464ce119b342a7008d1 Mon Sep 17 00:00:00 2001 From: Loiane Date: Fri, 15 Mar 2019 12:16:56 -0400 Subject: [PATCH 145/188] tslint update + fixed new ts lint issues --- package-lock.json | 536 +++++++++++------- package.json | 8 +- .../graph/breadth-first-search.spec.ts | 6 +- .../graph/depth-first-search.spec.ts | 4 +- .../ts/algorithms/math/primality-test.spec.ts | 2 +- .../ts/data-structures/red-black-tree.spec.ts | 3 +- 6 files changed, 328 insertions(+), 231 deletions(-) diff --git a/package-lock.json b/package-lock.json index ff37798c..c2a947cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -460,24 +460,6 @@ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "dev": true }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", @@ -539,6 +521,12 @@ "readable-stream": "^2.0.6" } }, + "arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "dev": true + }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", @@ -3158,13 +3146,6 @@ "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", "dev": true }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, "caniuse-lite": { "version": "1.0.30000948", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000948.tgz", @@ -3178,17 +3159,6 @@ "dev": true, "optional": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chai": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", @@ -3376,27 +3346,6 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - } - } - }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -5754,24 +5703,19 @@ }, "handlebars": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "resolved": "", "dev": true, "requires": { "async": "^1.4.0", "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "source-map": "^0.4.4" }, "dependencies": { "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } + "dev": true } } }, @@ -6956,13 +6900,6 @@ "is-buffer": "^1.1.5" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -7268,13 +7205,6 @@ } } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true, - "optional": true - }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", @@ -7310,9 +7240,9 @@ } }, "make-error": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", - "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", "dev": true }, "mamacro": { @@ -7321,6 +7251,15 @@ "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", "dev": true }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -10659,6 +10598,12 @@ "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", "dev": true }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, "p-each-series": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", @@ -11543,16 +11488,6 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -12724,47 +12659,18 @@ "dev": true }, "ts-node": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-5.0.1.tgz", - "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.3.tgz", + "integrity": "sha512-2qayBA4vdtVRuDo11DEFSsD/SFsBXQBRZZhbRGSIkmYmVkWjULn/GGMdG10KVqkaGndljfaTD8dKjWgcejO8YA==", "dev": true, "requires": { - "arrify": "^1.0.0", - "chalk": "^2.3.0", + "arg": "^4.1.0", "diff": "^3.1.0", "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.3", - "yn": "^2.0.0" + "source-map-support": "^0.5.6", + "yn": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -12772,23 +12678,14 @@ "dev": true }, "source-map-support": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", - "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -12799,9 +12696,9 @@ "dev": true }, "tslint": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", - "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz", + "integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -12812,10 +12709,11 @@ "glob": "^7.1.1", "js-yaml": "^3.7.0", "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", - "tsutils": "^2.12.1" + "tsutils": "^2.29.0" }, "dependencies": { "ansi-styles": { @@ -12828,9 +12726,9 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -12839,15 +12737,15 @@ } }, "commander": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.0.tgz", - "integrity": "sha512-7B1ilBwtYSbetCgTY1NJFg+gVpestg0fdA1MhC1Vs4ssyfSXnCAjFr+QcQM9/RedXC0EaUx1sG8Smgw2VfgKEg==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", "dev": true }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -12856,9 +12754,9 @@ } }, "tsutils": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.22.2.tgz", - "integrity": "sha512-u06FUSulCJ+Y8a2ftuqZN6kIGqdP2yJjUPEngXqmdPND4UQfb04igcotH+dw+IFr417yP6muCLE8/5/Qlfnx0w==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -12909,9 +12807,9 @@ "dev": true }, "typescript": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", - "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==", + "version": "3.3.3333", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3333.tgz", + "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==", "dev": true }, "ua-parser-js": { @@ -12920,40 +12818,6 @@ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", "dev": true }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, "uid-number": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", @@ -14714,6 +14578,12 @@ "color-convert": "^1.9.0" } }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -14725,6 +14595,17 @@ "supports-color": "^5.3.0" } }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -14788,6 +14669,35 @@ "requires": { "has-flag": "^3.0.0" } + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } } } }, @@ -14840,13 +14750,6 @@ "string-width": "^1.0.2 || 2" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -14939,23 +14842,22 @@ "dev": true }, "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", + "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", "dev": true, "requires": { "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" }, "dependencies": { "ansi-regex": { @@ -14965,9 +14867,9 @@ "dev": true }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", + "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", "dev": true }, "cliui": { @@ -14979,6 +14881,193 @@ "string-width": "^2.1.1", "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", + "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", + "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-is-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "strip-ansi": { @@ -14990,13 +15079,20 @@ "ansi-regex": "^3.0.0" } }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -15395,9 +15491,9 @@ } }, "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", + "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", "dev": true } } diff --git a/package.json b/package.json index d04bd8f5..2f824693 100644 --- a/package.json +++ b/package.json @@ -73,12 +73,12 @@ "mocha": "^5.0.4", "mochawesome": "^3.0.2", "nyc": "11.7.2", - "ts-node": "^5.0.1", - "tslint": "^5.9.1", - "typescript": "^2.7.2", + "ts-node": "8.0.3", + "tslint": "5.14.0", + "typescript": "3.3.3333", "webpack": "^4.29.6", "webpack-cli": "2.1.1", - "yargs": "^11.0.0" + "yargs": "13.2.2" }, "dependencies": { "http-server": "^0.11.1" diff --git a/test/ts/algorithms/graph/breadth-first-search.spec.ts b/test/ts/algorithms/graph/breadth-first-search.spec.ts index e528ea54..db5f929f 100644 --- a/test/ts/algorithms/graph/breadth-first-search.spec.ts +++ b/test/ts/algorithms/graph/breadth-first-search.spec.ts @@ -1,10 +1,10 @@ import 'mocha'; import { expect } from 'chai'; -import { BFS, breadthFirstSearch, Graph, Stack } from '../../../../src/ts/index'; +import { BFS, breadthFirstSearch, Graph } from '../../../../src/ts'; describe('Breadth First Search', () => { - let count; + let count: number; const vertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; let graph: Graph; @@ -32,7 +32,7 @@ describe('Breadth First Search', () => { breadthFirstSearch(graph, vertices[0], assertCallback); }); - function assertCallback(value) { + function assertCallback(value: string) { expect(value).to.equal(vertices[count]); count++; } diff --git a/test/ts/algorithms/graph/depth-first-search.spec.ts b/test/ts/algorithms/graph/depth-first-search.spec.ts index 60e2921c..763284a7 100644 --- a/test/ts/algorithms/graph/depth-first-search.spec.ts +++ b/test/ts/algorithms/graph/depth-first-search.spec.ts @@ -3,7 +3,7 @@ import { expect } from 'chai'; import { DFS, depthFirstSearch, Graph } from '../../../../src/ts/index'; describe('Depth First Search', () => { - let count; + let count: number; const vertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; const dfsCallBack = ['A', 'B', 'E', 'I', 'F', 'C', 'D', 'G', 'H']; let graph: Graph; @@ -32,7 +32,7 @@ describe('Depth First Search', () => { depthFirstSearch(graph, assertCallback); }); - function assertCallback(value) { + function assertCallback(value: string) { expect(value).to.equal(dfsCallBack[count]); count++; } diff --git a/test/ts/algorithms/math/primality-test.spec.ts b/test/ts/algorithms/math/primality-test.spec.ts index b62610df..36680623 100644 --- a/test/ts/algorithms/math/primality-test.spec.ts +++ b/test/ts/algorithms/math/primality-test.spec.ts @@ -16,7 +16,7 @@ describe('Primality Tests', () => { testIsPrime(isPrime2); }); - function testIsPrime(primeFunction) { + function testIsPrime(primeFunction: Function) { expect(primeFunction(-1)).to.equal(false); expect(primeFunction(0)).to.equal(false); expect(primeFunction(1)).to.equal(false); diff --git a/test/ts/data-structures/red-black-tree.spec.ts b/test/ts/data-structures/red-black-tree.spec.ts index 8fefc0f5..d5091f86 100644 --- a/test/ts/data-structures/red-black-tree.spec.ts +++ b/test/ts/data-structures/red-black-tree.spec.ts @@ -2,6 +2,7 @@ import { Colors } from './../../../src/ts/data-structures/models/red-black-node' import 'mocha'; import { expect } from 'chai'; import { RedBlackTree } from '../../../src/ts/index'; +import { RedBlackNode } from '../../../src/ts/data-structures/models/red-black-node'; describe('RedBlackTree', () => { let tree: RedBlackTree; @@ -105,7 +106,7 @@ describe('RedBlackTree', () => { }); - function assertNode(node, key, color) { + function assertNode(node: RedBlackNode, key: number, color: Colors) { expect(node.color).to.equal(color); expect(node.key).to.equal(key); } From c843462d897c3141ec30b8ea658a49ad8fd50449 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sat, 16 Mar 2019 02:06:33 +0000 Subject: [PATCH 146/188] chore(package): update webpack-cli to version 3.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2f824693..632d4d2d 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "tslint": "5.14.0", "typescript": "3.3.3333", "webpack": "^4.29.6", - "webpack-cli": "2.1.1", + "webpack-cli": "3.3.0", "yargs": "13.2.2" }, "dependencies": { From 706f36da44468312fc3e5a71bc1f5b114ce55832 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sat, 16 Mar 2019 02:06:36 +0000 Subject: [PATCH 147/188] chore(package): update lockfile package-lock.json --- package-lock.json | 3315 ++++++++++----------------------------------- 1 file changed, 695 insertions(+), 2620 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2a947cc..445495cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -187,28 +187,6 @@ } } }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true - }, "@types/chai": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.3.tgz", @@ -460,11 +438,16 @@ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "dev": true }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } }, "ansi-regex": { "version": "2.1.1", @@ -478,12 +461,6 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, - "any-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", - "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", - "dev": true - }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", @@ -547,6 +524,7 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, + "optional": true, "requires": { "arr-flatten": "^1.0.1" } @@ -563,38 +541,12 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "dev": true, + "optional": true }, "asap": { "version": "2.0.6", @@ -668,12 +620,6 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "ast-types": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.5.tgz", - "integrity": "sha512-oJjo+5e7/vEc2FBK8gUalV0pba4L3VdBIs2EKhOLHLcOd2FgQIVQN9xb0eZ9IjEWyAL7vq6fGJxOvVvdCHNyMw==", - "dev": true - }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -826,17 +772,6 @@ "trim-right": "^1.0.1" } }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, "babel-helper-builder-binary-assignment-operator-visitor": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", @@ -908,41 +843,6 @@ "babel-types": "^6.24.1" } }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true, - "requires": { - "babel-helper-bindify-decorators": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", @@ -2041,77 +1941,18 @@ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "dev": true }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-constructor-call": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", - "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "dev": true }, - "babel-plugin-syntax-export-extensions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", - "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, "babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", "dev": true }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.22.0" - } - }, "babel-plugin-transform-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", @@ -2123,42 +1964,6 @@ "babel-runtime": "^6.22.0" } }, - "babel-plugin-transform-class-constructor-call": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", - "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", - "dev": true, - "requires": { - "babel-plugin-syntax-class-constructor-call": "^6.18.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "^6.24.1", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" - } - }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", @@ -2466,36 +2271,6 @@ "babel-runtime": "^6.22.0" } }, - "babel-plugin-transform-export-extensions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", - "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", - "dev": true, - "requires": { - "babel-plugin-syntax-export-extensions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true, - "requires": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, "babel-plugin-transform-regenerator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", @@ -2572,74 +2347,6 @@ "semver": "^5.3.0" } }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.24.1", - "babel-plugin-transform-es2015-classes": "^6.24.1", - "babel-plugin-transform-es2015-computed-properties": "^6.24.1", - "babel-plugin-transform-es2015-destructuring": "^6.22.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", - "babel-plugin-transform-es2015-for-of": "^6.22.0", - "babel-plugin-transform-es2015-function-name": "^6.24.1", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-umd": "^6.24.1", - "babel-plugin-transform-es2015-object-super": "^6.24.1", - "babel-plugin-transform-es2015-parameters": "^6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", - "babel-plugin-transform-regenerator": "^6.24.1" - } - }, - "babel-preset-stage-1": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", - "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", - "dev": true, - "requires": { - "babel-plugin-transform-class-constructor-call": "^6.24.1", - "babel-plugin-transform-export-extensions": "^6.22.0", - "babel-preset-stage-2": "^6.24.1" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators": "^6.24.1", - "babel-preset-stage-3": "^6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.22.0" - } - }, "babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", @@ -2814,12 +2521,6 @@ "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", "dev": true }, - "binaryextensions": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.2.tgz", - "integrity": "sha512-xVNN69YGDghOqCCtA6FI7avYrr02mTJjOgB0/f1VPD3pJC8QEvjTKWc4epDx8AqxxA75NI0QpVM2gPJXUbE4Tg==", - "dev": true - }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", @@ -2857,6 +2558,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, + "optional": true, "requires": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -2975,28 +2677,6 @@ "isarray": "^1.0.0" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "buffer-from": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", @@ -3111,41 +2791,19 @@ } } }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - } - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, "callsites": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", "dev": true }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, "caniuse-lite": { "version": "1.0.30000948", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000948.tgz", @@ -3159,6 +2817,17 @@ "dev": true, "optional": true }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, "chai": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", @@ -3186,12 +2855,6 @@ "supports-color": "^2.0.0" } }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -3279,170 +2942,60 @@ "restore-cursor": "^2.0.0" } }, - "cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, + "optional": true, "requires": { - "colors": "1.0.3" + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" }, "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true } } }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codecov": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.2.0.tgz", + "integrity": "sha512-3NJvNARXxilqnqVfgzDHyVrF4oeVgaYW1c1O6Oi5mn93exE7HTSSFNiYdwojWW6IwrCZABJ8crpNbKoo9aUHQw==", "dev": true, "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" + "argv": "^0.0.2", + "ignore-walk": "^3.0.1", + "js-yaml": "^3.12.0", + "teeny-request": "^3.7.0", + "urlgrey": "^0.4.4" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "js-yaml": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" - } - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "codecov": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.2.0.tgz", - "integrity": "sha512-3NJvNARXxilqnqVfgzDHyVrF4oeVgaYW1c1O6Oi5mn93exE7HTSSFNiYdwojWW6IwrCZABJ8crpNbKoo9aUHQw==", - "dev": true, - "requires": { - "argv": "^0.0.2", - "ignore-walk": "^3.0.1", - "js-yaml": "^3.12.0", - "teeny-request": "^3.7.0", - "urlgrey": "^0.4.4" - }, - "dependencies": { - "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } } } @@ -3472,12 +3025,6 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true - }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", @@ -3668,12 +3215,6 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, - "dargs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", - "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", - "dev": true - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -3684,12 +3225,6 @@ "assert-plus": "^1.0.0" } }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -3722,15 +3257,6 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -3751,7 +3277,8 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "dev": true, + "optional": true }, "deep-is": { "version": "0.1.3", @@ -3872,10 +3399,10 @@ "minimalistic-assert": "^1.0.0" } }, - "detect-conflict": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", - "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=", + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, "detect-indent": { @@ -3904,27 +3431,6 @@ "randombytes": "^2.0.0" } }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - } - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3940,12 +3446,6 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -3987,42 +3487,12 @@ } } }, - "editions": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/editions/-/editions-2.1.3.tgz", - "integrity": "sha512-xDZyVm0A4nLgMNWVVLJvcwMjI80ShiH/27RyLiCnW1L273TcJIA25C4pwJ33AWV01OX6UriP35Xu+lH4S7HWQw==", - "dev": true, - "requires": { - "errlop": "^1.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } - } - }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", - "dev": true - }, "electron-to-chromium": { "version": "1.3.116", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz", "integrity": "sha512-NKwKAXzur5vFCZYBHpdWjTMO8QptNLNP80nItkSIgUOapPAo9Uia+RvkCaZJtO7fhQaVElSvBPWEc2ku6cKsPA==", "dev": true }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true - }, "elliptic": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", @@ -4069,9 +3539,9 @@ } }, "enhanced-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", - "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -4079,21 +3549,6 @@ "tapable": "^1.0.0" } }, - "envinfo": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-4.4.2.tgz", - "integrity": "sha512-5rfRs+m+6pwoKRCFqpsA5+qsLngFms1aWPrxfKbrObCzQaPc3M3yPloZx+BL9UE3dK58cxw36XVQbFRSCCfGSQ==", - "dev": true - }, - "errlop": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.1.tgz", - "integrity": "sha512-WX7QjiPHhsny7/PQvrhS5VMizXXKoKCS3udaBp8gjlARdbn+XmK300eKBAAN0hGyRaTCtRpOaxK+xFVPUJ3zkw==", - "dev": true, - "requires": { - "editions": "^2.1.2" - } - }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -4103,16 +3558,6 @@ "prr": "~1.0.1" } }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "dev": true, - "requires": { - "string-template": "~0.2.1", - "xtend": "~4.0.0" - } - }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", @@ -4511,17 +3956,12 @@ "strip-eof": "^1.0.0" } }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, + "optional": true, "requires": { "is-posix-bracket": "^0.1.0" } @@ -4531,6 +3971,7 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, + "optional": true, "requires": { "fill-range": "^2.1.0" } @@ -4572,22 +4013,12 @@ } } }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, + "optional": true, "requires": { "is-extglob": "^1.0.0" } @@ -4605,73 +4036,287 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, - "fast-glob": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", - "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fbjs": { + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.9" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", + } + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true, + "optional": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true, + "optional": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "optional": true + } + } + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, "dependencies": { @@ -4811,31 +4456,10 @@ } } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -4868,12 +4492,12 @@ "dev": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "^2.1.0" } }, "is-number": { @@ -4931,226 +4555,6 @@ } } }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fbjs": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", - "dev": true, - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.9" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - } - } - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "dev": true, - "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" - } - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "first-chunk-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", - "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -5193,12 +4597,6 @@ "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", "dev": true }, - "flow-parser": { - "version": "0.95.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.95.1.tgz", - "integrity": "sha512-HKkivrDpJduju6PfvnTdycPp5U8jemBDBwT/PlqiiW4TNOqmlSIbgniMcssl0h7vpoCUrQ/LX3CCIc/QSIDJWA==", - "dev": true - }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", @@ -5280,6 +4678,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, + "optional": true, "requires": { "for-in": "^1.0.1" } @@ -5486,83 +4885,10 @@ "assert-plus": "^1.0.0" } }, - "gh-got": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", - "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", - "dev": true, - "requires": { - "got": "^7.0.0", - "is-plain-obj": "^1.1.0" - }, - "dependencies": { - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "github-username": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", - "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", - "dev": true, - "requires": { - "gh-got": "^6.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -5573,38 +4899,12 @@ "path-is-absolute": "^1.0.0" } }, - "glob-all": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", - "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", - "dev": true, - "requires": { - "glob": "^7.0.5", - "yargs": "~1.2.6" - }, - "dependencies": { - "minimist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", - "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", - "dev": true - }, - "yargs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", - "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", - "dev": true, - "requires": { - "minimist": "^0.1.0" - } - } - } - }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, + "optional": true, "requires": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" @@ -5615,16 +4915,11 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, + "optional": true, "requires": { "is-glob": "^2.0.0" } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -5655,46 +4950,12 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - } - }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, - "grouped-queue": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", - "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", - "dev": true, - "requires": { - "lodash": "^4.17.2" - } - }, "growl": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", @@ -5703,12 +4964,14 @@ }, "handlebars": { "version": "4.0.10", - "resolved": "", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", "dev": true, "requires": { "async": "^1.4.0", "optimist": "^0.6.1", - "source-map": "^0.4.4" + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "source-map": { @@ -5784,39 +5047,18 @@ "ansi-regex": "^2.0.0" } }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -5945,12 +5187,6 @@ "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "dev": true }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, "http-proxy": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", @@ -6046,12 +5282,6 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, - "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", - "dev": true - }, "ignore-walk": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", @@ -6072,13 +5302,67 @@ } }, "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "^2.0.0", + "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } } }, "imurmurhash": { @@ -6087,15 +5371,6 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -6238,16 +5513,6 @@ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, "invariant": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", @@ -6346,13 +5611,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true + "dev": true, + "optional": true }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, + "optional": true, "requires": { "is-primitive": "^2.0.0" } @@ -6398,33 +5665,11 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" } }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", - "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", - "dev": true, - "requires": { - "symbol-observable": "^0.2.2" - }, - "dependencies": { - "symbol-observable": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", - "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", - "dev": true - } - } - }, "is-odd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", @@ -6442,12 +5687,6 @@ } } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -6469,13 +5708,15 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true + "dev": true, + "optional": true }, "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true + "dev": true, + "optional": true }, "is-promise": { "version": "2.1.0", @@ -6492,21 +5733,6 @@ "has": "^1.0.1" } }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-scoped": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", - "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", - "dev": true, - "requires": { - "scoped-regex": "^1.0.0" - } - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -6547,15 +5773,6 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6567,6 +5784,7 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, + "optional": true, "requires": { "isarray": "1.0.0" } @@ -6736,27 +5954,6 @@ } } }, - "istextorbinary": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.5.1.tgz", - "integrity": "sha512-pv/JNPWnfpwGjPx7JrtWTwsWsxkrK3fNzcEVnt92YKEIErps4Fsk49+qzCe9iQF2hjqK8Naqf8P9kzoeCuQI1g==", - "dev": true, - "requires": { - "binaryextensions": "^2.1.2", - "editions": "^2.1.3", - "textextensions": "^2.4.0" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -6780,49 +5977,12 @@ "dev": true, "optional": true }, - "jscodeshift": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.1.tgz", - "integrity": "sha512-sRMollbhbmSDrR79JMAnhEjyZJlQQVozeeY9A6/KNuV26DNcuB3mGSCWXp0hks9dcwRNOELbNOiwraZaXXRk5Q==", - "dev": true, - "requires": { - "babel-plugin-transform-flow-strip-types": "^6.8.0", - "babel-preset-es2015": "^6.9.0", - "babel-preset-stage-1": "^6.5.0", - "babel-register": "^6.9.0", - "babylon": "^7.0.0-beta.47", - "colors": "^1.1.2", - "flow-parser": "^0.*", - "lodash": "^4.13.1", - "micromatch": "^2.3.7", - "neo-async": "^2.5.0", - "node-dir": "0.1.8", - "nomnom": "^1.8.1", - "recast": "^0.15.0", - "temp": "^0.8.1", - "write-file-atomic": "^1.2.0" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.47", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.47.tgz", - "integrity": "sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==", - "dev": true - } - } - }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -6882,15 +6042,6 @@ "verror": "1.10.0" } }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -6900,6 +6051,13 @@ "is-buffer": "^1.1.5" } }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -6919,180 +6077,36 @@ "type-check": "~0.3.2" } }, - "listr": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", - "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "figures": "^1.7.0", - "indent-string": "^2.1.0", - "is-observable": "^0.2.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.4.0", - "listr-verbose-renderer": "^0.4.0", - "log-symbols": "^1.0.2", - "log-update": "^1.0.2", - "ora": "^0.2.3", - "p-map": "^1.1.1", - "rxjs": "^5.4.2", - "stream-to-observable": "^0.2.0", - "strip-ansi": "^3.0.1" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" }, "dependencies": { - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true } } }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, - "listr-update-renderer": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", - "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^1.0.2", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - } - } - }, - "listr-verbose-renderer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", - "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-cursor": "^1.0.2", - "date-fns": "^1.27.2", - "figures": "^1.7.0" - }, - "dependencies": { - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - } - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { "big.js": "^3.1.3", @@ -7122,88 +6136,11 @@ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", "dev": true }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "log-update": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", - "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", - "dev": true, - "requires": { - "ansi-escapes": "^1.0.0", - "cli-cursor": "^1.0.2" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - } - } + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true }, "loose-envify": { "version": "1.3.1", @@ -7214,12 +6151,6 @@ "js-tokens": "^3.0.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, "lru-cache": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", @@ -7230,15 +6161,6 @@ "yallist": "^2.1.2" } }, - "make-dir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", - "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, "make-error": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", @@ -7279,7 +6201,8 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true + "dev": true, + "optional": true }, "md5.js": { "version": "1.3.5", @@ -7309,84 +6232,6 @@ "mimic-fn": "^1.0.0" } }, - "mem-fs": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", - "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", - "dev": true, - "requires": { - "through2": "^2.0.0", - "vinyl": "^1.1.0", - "vinyl-file": "^2.0.0" - } - }, - "mem-fs-editor": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.3.tgz", - "integrity": "sha512-tgWmwI/+6vwu6POan82dTjxEpwAoaj0NAFnghtVo/FcLK2/7IhPUtFUUYlwou4MOY6OtjTUJtwpfH1h+eSUziw==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "deep-extend": "^0.6.0", - "ejs": "^2.5.9", - "glob": "^7.0.3", - "globby": "^7.1.1", - "isbinaryfile": "^3.0.2", - "mkdirp": "^0.5.0", - "multimatch": "^2.0.0", - "rimraf": "^2.2.8", - "through2": "^2.0.0", - "vinyl": "^2.0.1" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -7397,17 +6242,12 @@ "readable-stream": "^2.0.1" } }, - "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", - "dev": true - }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, + "optional": true, "requires": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -7462,12 +6302,6 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -7765,18 +6599,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - } - }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -7848,12 +6670,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node-dir": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.8.tgz", - "integrity": "sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=", - "dev": true - }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -7935,41 +6751,6 @@ } } }, - "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", - "dev": true, - "requires": { - "chalk": "~0.4.0", - "underscore": "~1.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", - "dev": true - } - } - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -8000,17 +6781,6 @@ "remove-trailing-separator": "^1.0.1" } }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -10427,6 +9197,7 @@ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, + "optional": true, "requires": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" @@ -10502,45 +9273,6 @@ "wordwrap": "~1.0.0" } }, - "ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "^0.1.2", - "object-assign": "^4.0.1" - }, - "dependencies": { - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - } - } - }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -10592,27 +9324,12 @@ "object-assign": "^4.1.0" } }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -10620,15 +9337,9 @@ "dev": true }, "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, - "p-lazy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-1.0.0.tgz", - "integrity": "sha1-7FPIAvLuOsKPFmzILQsrAt4nqDU=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", "dev": true }, "p-limit": { @@ -10649,27 +9360,6 @@ "p-limit": "^1.1.0" } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", @@ -10721,6 +9411,7 @@ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, + "optional": true, "requires": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", @@ -10834,27 +9525,6 @@ "dev": true, "optional": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -10886,29 +9556,12 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "prettier": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", - "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", - "dev": true - }, - "pretty-bytes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", - "dev": true + "dev": true, + "optional": true }, "private": { "version": "0.1.7", @@ -11045,17 +9698,6 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=" }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -11133,16 +9775,6 @@ "prop-types": "^15.6.0" } }, - "read-chunk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", - "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", - "dev": true, - "requires": { - "pify": "^3.0.0", - "safe-buffer": "^5.1.1" - } - }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -11192,35 +9824,6 @@ "set-immediate-shim": "^1.0.1" } }, - "recast": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.15.5.tgz", - "integrity": "sha512-nkAYNqarh73cMWRKFiPQ8I9dOLFvFk6SnG8u/LUlOYfArDOD/EjsVRAs860TlBLrpxqAXHGET/AUAVjdEymL5w==", - "dev": true, - "requires": { - "ast-types": "0.11.5", - "esprima": "~4.0.0", - "private": "~0.1.5", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, "regenerate": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", @@ -11249,6 +9852,7 @@ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, + "optional": true, "requires": { "is-equal-shallow": "^0.1.3" } @@ -11330,12 +9934,6 @@ "is-finite": "^1.0.0" } }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -11453,15 +10051,6 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -11488,6 +10077,16 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.1" + } + }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -11525,15 +10124,6 @@ "aproba": "^1.1.1" } }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - } - }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", @@ -11598,12 +10188,6 @@ } } }, - "scoped-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", - "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=", - "dev": true - }, "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", @@ -11683,17 +10267,6 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -11728,12 +10301,6 @@ } } }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -11842,15 +10409,6 @@ "kind-of": "^3.2.0" } }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -12057,27 +10615,6 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "stream-to-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", - "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", - "dev": true, - "requires": { - "any-observable": "^0.2.0" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", - "dev": true - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -12141,27 +10678,6 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-bom-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", - "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", - "dev": true, - "requires": { - "first-chunk-stream": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -12180,12 +10696,6 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - }, "table": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", @@ -12227,9 +10737,9 @@ } }, "tapable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", - "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", "dev": true }, "tape": { @@ -12364,24 +10874,6 @@ } } }, - "temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", - "dev": true, - "requires": { - "os-tmpdir": "^1.0.0", - "rimraf": "~2.2.6" - }, - "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } - } - }, "terser": { "version": "3.17.0", "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", @@ -12532,12 +11024,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "textextensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.4.0.tgz", - "integrity": "sha512-qftQXnX1DzpSV8EddtHIT0eDDEiBF8ywhFYR2lI9xrGtxqKN+CvLXhACeCIGbCpQfxxERbrkZEFb8cZcDKbVZA==", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -12554,12 +11040,6 @@ "xtend": "~4.0.1" } }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -12818,6 +11298,40 @@ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", "dev": true }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, "uid-number": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", @@ -12825,12 +11339,6 @@ "dev": true, "optional": true }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - }, "union": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", @@ -12944,12 +11452,6 @@ } } }, - "untildify": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", - "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", - "dev": true - }, "upath": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", @@ -12994,21 +11496,6 @@ "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=" }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, "urlgrey": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", @@ -13070,9 +11557,9 @@ "dev": true }, "v8-compile-cache": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", - "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", + "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", "dev": true }, "v8flags": { @@ -13112,48 +11599,6 @@ "extsprintf": "^1.2.0" } }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", - "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.3.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0", - "strip-bom-stream": "^2.0.0", - "vinyl": "^1.1.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -14470,97 +12915,23 @@ } } }, - "webpack-addons": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/webpack-addons/-/webpack-addons-1.1.5.tgz", - "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", - "dev": true, - "requires": { - "jscodeshift": "^0.4.0" - }, - "dependencies": { - "ast-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", - "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", - "dev": true - }, - "jscodeshift": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", - "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", - "dev": true, - "requires": { - "async": "^1.5.0", - "babel-plugin-transform-flow-strip-types": "^6.8.0", - "babel-preset-es2015": "^6.9.0", - "babel-preset-stage-1": "^6.5.0", - "babel-register": "^6.9.0", - "babylon": "^6.17.3", - "colors": "^1.1.2", - "flow-parser": "^0.*", - "lodash": "^4.13.1", - "micromatch": "^2.3.7", - "node-dir": "0.1.8", - "nomnom": "^1.8.1", - "recast": "^0.12.5", - "temp": "^0.8.1", - "write-file-atomic": "^1.2.0" - } - }, - "recast": { - "version": "0.12.9", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", - "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", - "dev": true, - "requires": { - "ast-types": "0.10.1", - "core-js": "^2.4.1", - "esprima": "~4.0.0", - "private": "~0.1.5", - "source-map": "~0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "webpack-cli": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.1.1.tgz", - "integrity": "sha512-zoUeCfRkNnME0JdYNTnmmxRdJIcmFfCGdnUlHSLiS9U0E5CCp4MY31ESB3ivOmZ3ewZ18WofH6IRNmU5Oae56g==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.0.tgz", + "integrity": "sha512-t1M7G4z5FhHKJ92WRKwZ1rtvi7rHc0NZoZRbSkol0YKl4HvcC8+DsmGDmK7MmZxHSAetHagiOsjOB6MmzC2TUw==", "dev": true, "requires": { - "chalk": "^2.3.2", + "chalk": "^2.4.1", "cross-spawn": "^6.0.5", - "diff": "^3.5.0", - "enhanced-resolve": "^4.0.0", - "envinfo": "^4.4.2", - "glob-all": "^3.1.0", + "enhanced-resolve": "^4.1.0", + "findup-sync": "^2.0.0", "global-modules": "^1.0.0", - "got": "^8.2.0", - "import-local": "^1.0.0", - "inquirer": "^5.1.0", - "interpret": "^1.0.4", - "jscodeshift": "^0.5.0", - "listr": "^0.13.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", "loader-utils": "^1.1.0", - "lodash": "^4.17.5", - "log-symbols": "^2.2.0", - "mkdirp": "^0.5.1", - "p-each-series": "^1.0.0", - "p-lazy": "^1.0.0", - "prettier": "^1.5.3", - "supports-color": "^5.3.0", - "v8-compile-cache": "^1.1.2", - "webpack-addons": "^1.1.5", - "yargs": "^11.1.0", - "yeoman-environment": "^2.0.0", - "yeoman-generator": "^2.0.4" + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.5" }, "dependencies": { "ansi-regex": { @@ -14579,9 +12950,9 @@ } }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", + "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", "dev": true }, "chalk": { @@ -14619,49 +12990,132 @@ "which": "^1.2.9" } }, - "inquirer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", - "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.1.0", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^5.5.2", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, - "supports-color": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", + "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", + "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", @@ -14671,32 +13125,33 @@ } }, "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", + "os-locale": "^3.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", "string-width": "^2.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" } }, "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -14750,6 +13205,13 @@ "string-width": "^1.0.2 || 2" } }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -14812,17 +13274,6 @@ "mkdirp": "^0.5.1" } }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -15114,382 +13565,6 @@ } } }, - "yeoman-environment": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.4.tgz", - "integrity": "sha512-KLxE5ft/74Qj7h3AsQZv8G6MEEHYJwmD5F99nfOVaep3rBzCtbrJKkdqWc7bDV141Nr8UZZsIXmzc3IcCm6E2w==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "debug": "^3.1.0", - "diff": "^3.5.0", - "escape-string-regexp": "^1.0.2", - "globby": "^8.0.1", - "grouped-queue": "^0.3.3", - "inquirer": "^6.0.0", - "is-scoped": "^1.0.0", - "lodash": "^4.17.10", - "log-symbols": "^2.2.0", - "mem-fs": "^1.1.0", - "strip-ansi": "^4.0.0", - "text-table": "^0.2.0", - "untildify": "^3.0.3" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "strip-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", - "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "yeoman-generator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.5.tgz", - "integrity": "sha512-rV6tJ8oYzm4mmdF2T3wjY+Q42jKF2YiiD0VKfJ8/0ZYwmhCKC9Xs2346HVLPj/xE13i68psnFJv7iS6gWRkeAg==", - "dev": true, - "requires": { - "async": "^2.6.0", - "chalk": "^2.3.0", - "cli-table": "^0.3.1", - "cross-spawn": "^6.0.5", - "dargs": "^5.1.0", - "dateformat": "^3.0.3", - "debug": "^3.1.0", - "detect-conflict": "^1.0.0", - "error": "^7.0.2", - "find-up": "^2.1.0", - "github-username": "^4.0.0", - "istextorbinary": "^2.2.1", - "lodash": "^4.17.10", - "make-dir": "^1.1.0", - "mem-fs-editor": "^4.0.0", - "minimist": "^1.2.0", - "pretty-bytes": "^4.0.2", - "read-chunk": "^2.1.0", - "read-pkg-up": "^3.0.0", - "rimraf": "^2.6.2", - "run-async": "^2.0.0", - "shelljs": "^0.8.0", - "text-table": "^0.2.0", - "through2": "^2.0.0", - "yeoman-environment": "^2.0.5" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "yn": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", From f64d9d867731050014a462e100ed16c0c9cc3804 Mon Sep 17 00:00:00 2001 From: Melverton Hunter Date: Mon, 1 Apr 2019 16:11:08 -0400 Subject: [PATCH 148/188] Update README.md typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index df8c3da9..efd4e6e3 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Source code of **Learning JavaScript Data Structures and Algorithms** book, thir ## Installing and running the book examples With Node * Install [Node](https://nodejs.org) -* Open terminal/cmd and change directoty to this project folder: `cd /Users/.../javascript-datastructures-algorithms` (Linux/Max) or `cd C:/.../javascript-datastructures-algorithms` +* Open terminal/cmd and change directory to this project folder: `cd /Users/.../javascript-datastructures-algorithms` (Linux/Max) or `cd C:/.../javascript-datastructures-algorithms` * run `npm install` to install all depencies * To see the examples, run `http-server html` or `npm run serve`. Open your browser `http:\\localhost:8080` to see the book examples * Or `cd html/chapter01` and run each javascript file with node: `node 02-Variables` From 0e0ba5708d7962e699c0fab1c56348a8872bda10 Mon Sep 17 00:00:00 2001 From: Luan Henrique Moraes dos Santos Date: Wed, 8 May 2019 11:32:38 -0300 Subject: [PATCH 149/188] grammar correction --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index df8c3da9..96845564 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,8 @@ Source code of **Learning JavaScript Data Structures and Algorithms** book, thir ## Installing and running the book examples With Node * Install [Node](https://nodejs.org) -* Open terminal/cmd and change directoty to this project folder: `cd /Users/.../javascript-datastructures-algorithms` (Linux/Max) or `cd C:/.../javascript-datastructures-algorithms` -* run `npm install` to install all depencies +* Open terminal/cmd and change directory to this project folder: `cd /Users/.../javascript-datastructures-algorithms` (Linux/Max) or `cd C:/.../javascript-datastructures-algorithms` +* run `npm install` to install all dependencies * To see the examples, run `http-server html` or `npm run serve`. Open your browser `http:\\localhost:8080` to see the book examples * Or `cd html/chapter01` and run each javascript file with node: `node 02-Variables` @@ -70,7 +70,7 @@ Source code of **Learning JavaScript Data Structures and Algorithms** book, thir * Right click on the html file you would like to see the examples, right click and 'Open with Chrome (or any other browser)' -* Or open the `examples/index.html` file to easily nagivate through all examples: +* Or open the `examples/index.html` file to easily navigate through all examples: * Demo: [https://javascript-ds-algorithms-book.firebaseapp.com](https://javascript-ds-algorithms-book.firebaseapp.com) From 01e35d41508b5539763982858b72e43486e926b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2019 14:10:01 +0000 Subject: [PATCH 150/188] Bump mixin-deep from 1.3.1 to 1.3.2 Bumps [mixin-deep](https://github.com/jonschlinkert/mixin-deep) from 1.3.1 to 1.3.2. - [Release notes](https://github.com/jonschlinkert/mixin-deep/releases) - [Commits](https://github.com/jonschlinkert/mixin-deep/compare/1.3.1...1.3.2) Signed-off-by: dependabot[bot] --- package-lock.json | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 445495cd..0a31be64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -443,6 +443,7 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -5634,7 +5635,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "dev": true, + "optional": true }, "is-finite": { "version": "1.0.2", @@ -5656,6 +5658,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, + "optional": true, "requires": { "is-extglob": "^1.0.0" } @@ -6140,7 +6143,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "dev": true, + "optional": true }, "loose-envify": { "version": "1.3.1", @@ -6347,9 +6351,9 @@ } }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { "for-in": "^1.0.2", @@ -6777,6 +6781,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, + "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -7538,8 +7543,7 @@ }, "for-in": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": true }, "foreground-child": { "version": "1.5.6", @@ -8091,25 +8095,6 @@ "bundled": true, "dev": true }, - "mixin-deep": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.1", "bundled": true, From 32362698a6ef90cb348a173cef7c66df7e69ac56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Mar 2020 22:06:51 +0000 Subject: [PATCH 151/188] Bump acorn from 6.1.1 to 6.4.1 Bumps [acorn](https://github.com/acornjs/acorn) from 6.1.1 to 6.4.1. - [Release notes](https://github.com/acornjs/acorn/releases) - [Commits](https://github.com/acornjs/acorn/compare/6.1.1...6.4.1) Signed-off-by: dependabot[bot] --- package-lock.json | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 445495cd..cb8fdf7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -394,9 +394,9 @@ "dev": true }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, "acorn-dynamic-import": { @@ -443,6 +443,7 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -5634,7 +5635,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "dev": true, + "optional": true }, "is-finite": { "version": "1.0.2", @@ -5656,6 +5658,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, + "optional": true, "requires": { "is-extglob": "^1.0.0" } @@ -6140,7 +6143,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "dev": true, + "optional": true }, "loose-envify": { "version": "1.3.1", @@ -6777,6 +6781,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, + "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -12576,12 +12581,6 @@ "webpack-sources": "^1.3.0" }, "dependencies": { - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - }, "ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", From 0a606fd8939c00c350c2fdd8045fda7e1c06e4e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Apr 2020 12:06:00 +0000 Subject: [PATCH 152/188] Bump https-proxy-agent from 2.2.1 to 2.2.4 Bumps [https-proxy-agent](https://github.com/TooTallNate/node-https-proxy-agent) from 2.2.1 to 2.2.4. - [Release notes](https://github.com/TooTallNate/node-https-proxy-agent/releases) - [Commits](https://github.com/TooTallNate/node-https-proxy-agent/compare/2.2.1...2.2.4) Signed-off-by: dependabot[bot] --- package-lock.json | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 445495cd..d55c189f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -411,15 +411,6 @@ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", "dev": true }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, "ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", @@ -443,6 +434,7 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -5238,15 +5230,24 @@ "dev": true }, "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, "requires": { - "agent-base": "^4.1.0", + "agent-base": "^4.3.0", "debug": "^3.1.0" }, "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -5257,9 +5258,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -5634,7 +5635,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "dev": true, + "optional": true }, "is-finite": { "version": "1.0.2", @@ -5656,6 +5658,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, + "optional": true, "requires": { "is-extglob": "^1.0.0" } @@ -6140,7 +6143,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "dev": true, + "optional": true }, "loose-envify": { "version": "1.3.1", @@ -6777,6 +6781,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, + "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" } From ae6c563880988a4e79fb46976f9a6de39b5c3413 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jul 2020 03:56:38 +0000 Subject: [PATCH 153/188] Bump lodash from 4.17.10 to 4.17.19 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.10 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.10...4.17.19) Signed-off-by: dependabot[bot] --- package-lock.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 445495cd..06782121 100644 --- a/package-lock.json +++ b/package-lock.json @@ -443,6 +443,7 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -5634,7 +5635,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "dev": true, + "optional": true }, "is-finite": { "version": "1.0.2", @@ -5656,6 +5658,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, + "optional": true, "requires": { "is-extglob": "^1.0.0" } @@ -6125,9 +6128,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", "dev": true }, "lodash.isfunction": { @@ -6140,7 +6143,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "dev": true, + "optional": true }, "loose-envify": { "version": "1.3.1", @@ -6777,6 +6781,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, + "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -7969,11 +7974,6 @@ } } }, - "lodash": { - "version": "4.17.10", - "bundled": true, - "dev": true - }, "longest": { "version": "1.0.1", "bundled": true, From a23fcdbff9f9cb12ac523bdaa8bf4ba2a2cfcae6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jul 2020 16:34:44 +0000 Subject: [PATCH 154/188] Bump eslint-utils from 1.3.1 to 1.4.3 Bumps [eslint-utils](https://github.com/mysticatea/eslint-utils) from 1.3.1 to 1.4.3. - [Release notes](https://github.com/mysticatea/eslint-utils/releases) - [Commits](https://github.com/mysticatea/eslint-utils/compare/v1.3.1...v1.4.3) Signed-off-by: dependabot[bot] --- package-lock.json | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06782121..dbe1e4a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3863,10 +3863,21 @@ } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } }, "eslint-visitor-keys": { "version": "1.0.0", From 25be7be1e763f79f67c9a53976f4ce665fc12db8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jul 2020 16:35:08 +0000 Subject: [PATCH 155/188] Bump codecov from 3.2.0 to 3.6.5 Bumps [codecov](https://github.com/codecov/codecov-node) from 3.2.0 to 3.6.5. - [Release notes](https://github.com/codecov/codecov-node/releases) - [Commits](https://github.com/codecov/codecov-node/commits) Signed-off-by: dependabot[bot] --- package-lock.json | 167 +++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 114 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index f7fbee42..f592e0f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -187,6 +187,12 @@ } } }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, "@types/chai": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.3.tgz", @@ -411,6 +417,32 @@ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", "dev": true }, + "agent-base": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", + "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "dev": true, + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", @@ -2968,22 +3000,22 @@ "dev": true }, "codecov": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.2.0.tgz", - "integrity": "sha512-3NJvNARXxilqnqVfgzDHyVrF4oeVgaYW1c1O6Oi5mn93exE7HTSSFNiYdwojWW6IwrCZABJ8crpNbKoo9aUHQw==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.6.5.tgz", + "integrity": "sha512-v48WuDMUug6JXwmmfsMzhCHRnhUf8O3duqXvltaYJKrO1OekZWpB/eH6iIoaxMl8Qli0+u3OxptdsBOYiD7VAQ==", "dev": true, "requires": { - "argv": "^0.0.2", - "ignore-walk": "^3.0.1", - "js-yaml": "^3.12.0", - "teeny-request": "^3.7.0", - "urlgrey": "^0.4.4" + "argv": "0.0.2", + "ignore-walk": "3.0.3", + "js-yaml": "3.13.1", + "teeny-request": "6.0.1", + "urlgrey": "0.4.4" }, "dependencies": { "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -3584,21 +3616,6 @@ "is-symbol": "^1.0.2" } }, - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -5189,6 +5206,34 @@ "requires-port": "^1.0.0" } }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "http-server": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz", @@ -5230,28 +5275,25 @@ "dev": true }, "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", "dev": true, "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" + "agent-base": "5", + "debug": "4" }, "dependencies": { "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" @@ -5284,9 +5326,9 @@ "dev": true }, "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "dev": true, "requires": { "minimatch": "^3.0.4" @@ -10564,6 +10606,15 @@ "stream-shift": "^1.0.0" } }, + "stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "dev": true, + "requires": { + "stubs": "^3.0.0" + } + }, "stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", @@ -10690,6 +10741,12 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", + "dev": true + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -10850,26 +10907,28 @@ } }, "teeny-request": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-3.11.3.tgz", - "integrity": "sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz", + "integrity": "sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g==", "dev": true, "requires": { - "https-proxy-agent": "^2.2.1", + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^4.0.0", "node-fetch": "^2.2.0", + "stream-events": "^1.0.5", "uuid": "^3.3.2" }, "dependencies": { "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true } } diff --git a/package.json b/package.json index 632d4d2d..4581750c 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "babel-plugin-transform-es2015-modules-umd": "^6.24.1", "babel-preset-env": "^1.7.0", "chai": "^4.1.2", - "codecov": "^3.2.0", + "codecov": "^3.6.5", "eslint": "^5.15.1", "eslint-config-airbnb-base": "^13.1.0", "eslint-plugin-import": "^2.16.0", From d326a23a9503c751becb9a5b44a9238df5c29354 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jul 2020 16:35:11 +0000 Subject: [PATCH 156/188] Bump handlebars from 4.0.10 to 4.7.6 Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.0.10 to 4.7.6. - [Release notes](https://github.com/wycats/handlebars.js/releases) - [Changelog](https://github.com/handlebars-lang/handlebars.js/blob/master/release-notes.md) - [Commits](https://github.com/wycats/handlebars.js/compare/v4.0.10...v4.7.6) Signed-off-by: dependabot[bot] --- package-lock.json | 216 ++++++++-------------------------------------- 1 file changed, 38 insertions(+), 178 deletions(-) diff --git a/package-lock.json b/package-lock.json index f7fbee42..ec533528 100644 --- a/package-lock.json +++ b/package-lock.json @@ -429,18 +429,6 @@ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "dev": true }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -2789,13 +2777,6 @@ "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", "dev": true }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, "caniuse-lite": { "version": "1.0.30000948", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000948.tgz", @@ -2809,17 +2790,6 @@ "dev": true, "optional": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chai": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", @@ -2940,27 +2910,6 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - } - } - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -4955,22 +4904,42 @@ "dev": true }, "handlebars": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", "dev": true, "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" }, "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "uglify-js": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.0.tgz", + "integrity": "sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA==", + "dev": true, + "optional": true } } }, @@ -6054,13 +6023,6 @@ "is-buffer": "^1.1.5" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -6139,13 +6101,6 @@ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", "dev": true }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true, - "optional": true - }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", @@ -6852,7 +6807,6 @@ "align-text": { "version": "0.1.4", "bundled": true, - "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2", @@ -6862,8 +6816,7 @@ }, "amdefine": { "version": "1.0.1", - "bundled": true, - "dev": true + "bundled": true }, "ansi-regex": { "version": "2.1.1", @@ -6920,8 +6873,7 @@ }, "async": { "version": "1.5.2", - "bundled": true, - "dev": true + "bundled": true }, "atob": { "version": "2.1.1", @@ -7144,13 +7096,11 @@ "camelcase": { "version": "1.2.1", "bundled": true, - "dev": true, "optional": true }, "center-align": { "version": "0.1.3", "bundled": true, - "dev": true, "optional": true, "requires": { "align-text": "^0.1.3", @@ -7193,7 +7143,6 @@ "cliui": { "version": "2.1.0", "bundled": true, - "dev": true, "optional": true, "requires": { "center-align": "^0.1.1", @@ -7204,7 +7153,6 @@ "wordwrap": { "version": "0.0.2", "bundled": true, - "dev": true, "optional": true } } @@ -7277,8 +7225,7 @@ }, "decamelize": { "version": "1.2.0", - "bundled": true, - "dev": true + "bundled": true }, "decode-uri-component": { "version": "0.2.0", @@ -7606,27 +7553,6 @@ "bundled": true, "dev": true }, - "handlebars": { - "version": "4.0.11", - "bundled": true, - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "bundled": true, - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "has-ansi": { "version": "2.0.0", "bundled": true, @@ -7721,8 +7647,7 @@ }, "is-buffer": { "version": "1.1.6", - "bundled": true, - "dev": true + "bundled": true }, "is-builtin-module": { "version": "1.0.0", @@ -7927,7 +7852,6 @@ "kind-of": { "version": "3.2.2", "bundled": true, - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -7935,7 +7859,6 @@ "lazy-cache": { "version": "1.0.4", "bundled": true, - "dev": true, "optional": true }, "lcid": { @@ -7977,7 +7900,6 @@ "longest": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true }, "loose-envify": { @@ -8088,8 +8010,7 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, - "dev": true + "bundled": true }, "mixin-deep": { "version": "1.3.1", @@ -8225,7 +8146,6 @@ "optimist": { "version": "0.6.1", "bundled": true, - "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -8416,8 +8336,7 @@ }, "repeat-string": { "version": "1.6.1", - "bundled": true, - "dev": true + "bundled": true }, "repeating": { "version": "2.0.1", @@ -8455,7 +8374,6 @@ "right-align": { "version": "0.1.3", "bundled": true, - "dev": true, "optional": true, "requires": { "align-text": "^0.1.1" @@ -8625,8 +8543,7 @@ }, "source-map": { "version": "0.5.7", - "bundled": true, - "dev": true + "bundled": true }, "source-map-resolve": { "version": "0.5.1", @@ -8816,8 +8733,6 @@ "uglify-js": { "version": "2.8.29", "bundled": true, - "dev": true, - "optional": true, "requires": { "source-map": "~0.5.1", "uglify-to-browserify": "~1.0.0", @@ -8827,7 +8742,6 @@ "yargs": { "version": "3.10.0", "bundled": true, - "dev": true, "optional": true, "requires": { "camelcase": "^1.0.2", @@ -8841,7 +8755,6 @@ "uglify-to-browserify": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "union-value": { @@ -8957,13 +8870,11 @@ "window-size": { "version": "0.1.0", "bundled": true, - "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "bundled": true, - "dev": true + "bundled": true }, "wrap-ansi": { "version": "2.1.0", @@ -10077,16 +9988,6 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -11298,40 +11199,6 @@ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", "dev": true }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, "uid-number": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", @@ -13205,13 +13072,6 @@ "string-width": "^1.0.2 || 2" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", From a0d4200b6ab04714c610db39db0341089581634c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jul 2020 17:50:31 +0000 Subject: [PATCH 157/188] Bump fstream from 1.0.11 to 1.0.12 Bumps [fstream](https://github.com/npm/fstream) from 1.0.11 to 1.0.12. - [Release notes](https://github.com/npm/fstream/releases) - [Commits](https://github.com/npm/fstream/compare/v1.0.11...v1.0.12) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 49a4e2d4..3047e6c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4737,9 +4737,9 @@ } }, "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "optional": true, "requires": { From 22eb236fcb461076198b47c8c37f8f34b31c6e82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jul 2020 17:50:33 +0000 Subject: [PATCH 158/188] Bump js-yaml from 3.10.0 to 3.13.1 Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.10.0 to 3.13.1. - [Release notes](https://github.com/nodeca/js-yaml/releases) - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/3.10.0...3.13.1) Signed-off-by: dependabot[bot] --- package-lock.json | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 49a4e2d4..531f4552 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2959,18 +2959,6 @@ "js-yaml": "3.13.1", "teeny-request": "6.0.1", "urlgrey": "0.4.4" - }, - "dependencies": { - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } } }, "collection-visit": { @@ -3685,16 +3673,6 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -5986,9 +5964,9 @@ "dev": true }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", From 39ac47367413a3cfbfba100dca7ef95b4d537b12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2020 12:36:09 +0000 Subject: [PATCH 159/188] Bump codecov from 3.6.5 to 3.7.1 Bumps [codecov](https://github.com/codecov/codecov-node) from 3.6.5 to 3.7.1. - [Release notes](https://github.com/codecov/codecov-node/releases) - [Commits](https://github.com/codecov/codecov-node/compare/v3.6.5...v3.7.1) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 49a4e2d4..0c8cc611 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2949,9 +2949,9 @@ "dev": true }, "codecov": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.6.5.tgz", - "integrity": "sha512-v48WuDMUug6JXwmmfsMzhCHRnhUf8O3duqXvltaYJKrO1OekZWpB/eH6iIoaxMl8Qli0+u3OxptdsBOYiD7VAQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.7.1.tgz", + "integrity": "sha512-JHWxyPTkMLLJn9SmKJnwAnvY09kg2Os2+Ux+GG7LwZ9g8gzDDISpIN5wAsH1UBaafA/yGcd3KofMaorE8qd6Lw==", "dev": true, "requires": { "argv": "0.0.2", diff --git a/package.json b/package.json index 4581750c..1083baa5 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "babel-plugin-transform-es2015-modules-umd": "^6.24.1", "babel-preset-env": "^1.7.0", "chai": "^4.1.2", - "codecov": "^3.6.5", + "codecov": "^3.7.1", "eslint": "^5.15.1", "eslint-config-airbnb-base": "^13.1.0", "eslint-plugin-import": "^2.16.0", From ebe7e382e5f893dd5460eeceb0c2789039e173c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2020 00:56:11 +0000 Subject: [PATCH 160/188] Bump elliptic from 6.4.1 to 6.5.3 Bumps [elliptic](https://github.com/indutny/elliptic) from 6.4.1 to 6.5.3. - [Release notes](https://github.com/indutny/elliptic/releases) - [Commits](https://github.com/indutny/elliptic/compare/v6.4.1...v6.5.3) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 49a4e2d4..cf50baf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3467,9 +3467,9 @@ "dev": true }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "dev": true, "requires": { "bn.js": "^4.4.0", From ec961299b2e34d4e1346585e5cf9492a8eae258b Mon Sep 17 00:00:00 2001 From: Loiane Groner <> Date: Mon, 2 Nov 2020 09:32:29 -0500 Subject: [PATCH 161/188] restored chapter 10 examples --- examples/chapter10/01-UsingMinHeap.html | 11 ++++++++++ examples/chapter10/01-UsingMinHeap.js | 27 +++++++++++++++++++++++++ examples/chapter10/02-UsingMaxHeap.html | 11 ++++++++++ examples/chapter10/02-UsingMaxHeap.js | 27 +++++++++++++++++++++++++ examples/chapter10/03-HeapSort.html | 11 ++++++++++ examples/chapter10/03-HeapSort.js | 7 +++++++ examples/index.html | 17 +++++++++------- 7 files changed, 104 insertions(+), 7 deletions(-) create mode 100644 examples/chapter10/01-UsingMinHeap.html create mode 100644 examples/chapter10/01-UsingMinHeap.js create mode 100644 examples/chapter10/02-UsingMaxHeap.html create mode 100644 examples/chapter10/02-UsingMaxHeap.js create mode 100644 examples/chapter10/03-HeapSort.html create mode 100644 examples/chapter10/03-HeapSort.js diff --git a/examples/chapter10/01-UsingMinHeap.html b/examples/chapter10/01-UsingMinHeap.html new file mode 100644 index 00000000..83814ba1 --- /dev/null +++ b/examples/chapter10/01-UsingMinHeap.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter10/01-UsingMinHeap.js b/examples/chapter10/01-UsingMinHeap.js new file mode 100644 index 00000000..59b7753b --- /dev/null +++ b/examples/chapter10/01-UsingMinHeap.js @@ -0,0 +1,27 @@ +const { MinHeap } = PacktDataStructuresAlgorithms; + +let heap = new MinHeap(); + +heap.insert(2); +heap.insert(3); +heap.insert(4); +heap.insert(5); + +heap.insert(2); + +console.log(heap.getAsArray()); + +console.log('Heap size: ', heap.size()); // 5 +console.log('Heap is empty: ', heap.isEmpty()); // false +console.log('Heap min value: ', heap.findMinimum()); // 1 + +heap = new MinHeap(); +for (let i = 1; i < 10; i++) { + heap.insert(i); +} + +console.log(heap.getAsArray()); + +console.log('Extract minimum: ', heap.extract()); // 1 +console.log(heap.getAsArray()); // [2, 4, 3, 8, 5, 6, 7, 9] + diff --git a/examples/chapter10/02-UsingMaxHeap.html b/examples/chapter10/02-UsingMaxHeap.html new file mode 100644 index 00000000..9d573bda --- /dev/null +++ b/examples/chapter10/02-UsingMaxHeap.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter10/02-UsingMaxHeap.js b/examples/chapter10/02-UsingMaxHeap.js new file mode 100644 index 00000000..f1a5b97d --- /dev/null +++ b/examples/chapter10/02-UsingMaxHeap.js @@ -0,0 +1,27 @@ +const { MaxHeap } = PacktDataStructuresAlgorithms; + +const maxHeap = new MaxHeap(); + +maxHeap.insert(2); +maxHeap.insert(3); +maxHeap.insert(4); +maxHeap.insert(5); + +maxHeap.insert(1); + +console.log(maxHeap.getAsArray()); + +console.log('Heap size: ', maxHeap.size()); // 5 +console.log('Heap is empty: ', maxHeap.isEmpty()); // false +console.log('Heap min value: ', maxHeap.findMinimum()); // 5 + +maxHeap.insert(6); +maxHeap.insert(9); +maxHeap.insert(10); +maxHeap.insert(14); + +console.log(maxHeap.getAsArray()); + +console.log('Extract minimum: ', maxHeap.extract()); +console.log(maxHeap.getAsArray()); + diff --git a/examples/chapter10/03-HeapSort.html b/examples/chapter10/03-HeapSort.html new file mode 100644 index 00000000..e52c43f4 --- /dev/null +++ b/examples/chapter10/03-HeapSort.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/chapter10/03-HeapSort.js b/examples/chapter10/03-HeapSort.js new file mode 100644 index 00000000..9d9b1ac0 --- /dev/null +++ b/examples/chapter10/03-HeapSort.js @@ -0,0 +1,7 @@ +const { heapSort } = PacktDataStructuresAlgorithms; + +console.log('********** Heap Sort **********'); +const array = [7, 6, 3, 5, 4, 1, 2]; + +console.log('Before sorting: ', array); +console.log('After sorting: ', heapSort(array)); diff --git a/examples/index.html b/examples/index.html index f0fb0263..7e3e6629 100644 --- a/examples/index.html +++ b/examples/index.html @@ -194,15 +194,18 @@
-
-
-
- -
+
+ +
From 814a24d11fb013c89661ca5561b05defb56fd61c Mon Sep 17 00:00:00 2001 From: Loiane Groner <> Date: Mon, 2 Nov 2020 09:38:43 -0500 Subject: [PATCH 162/188] updated http-server --- package-lock.json | 7658 +++++++++++++++++---------------------------- package.json | 2 +- 2 files changed, 2812 insertions(+), 4848 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc15231d..5a227f07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,25 +5,23 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.10.4" } }, "@babel/generator": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", - "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", "dev": true, "requires": { - "@babel/types": "^7.3.4", + "@babel/types": "^7.12.1", "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "source-map": "^0.5.0" }, "dependencies": { "jsesc": { @@ -35,42 +33,48 @@ } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.11.0" } }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -112,70 +116,64 @@ } }, "@babel/parser": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", - "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", "dev": true }, "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", - "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", + "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.3.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.3.4", - "@babel/types": "^7.3.4", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.1", + "@babel/types": "^7.12.1", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.19" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true } } }, "@babel/types": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", - "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" }, "dependencies": { @@ -194,190 +192,201 @@ "dev": true }, "@types/chai": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.3.tgz", - "integrity": "sha512-f5dXGzOJycyzSMdaXVhiBhauL4dYydXwVpavfQ1mVCaGjR56a9QfklXObUxlIY9bGTmCPHEEZ04I16BZ/8w5ww==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.14.tgz", + "integrity": "sha512-G+ITQPXkwTrslfG5L/BksmbLUA0M1iybEsmCWPqzSxsRRhJZimBKJkoMi8fr/CPygPTj4zO5pJH7I2/cm9M7SQ==", + "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 + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, "@types/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-YeDiSEzznwZwwp766SJ6QlrTyBYUGPSIwmREHVTmktUYiT/WADdWtpt9iH0KuUSf8lZLdI4lP0X6PBzPo5//JQ==", + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", "dev": true }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -400,56 +409,44 @@ "dev": true }, "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -461,6 +458,18 @@ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "dev": true }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -499,27 +508,16 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, "arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -553,6 +551,17 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + } + }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", @@ -560,39 +569,43 @@ "dev": true, "optional": true }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", "dev": true, - "optional": true, "requires": { - "safer-buffer": "~2.1.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -613,17 +626,10 @@ } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - }, "assertion-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", - "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "assign-symbols": { @@ -639,43 +645,26 @@ "dev": true }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true, "optional": true }, "atob": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", - "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==", + "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, - "optional": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true, - "optional": true - }, "babel-cli": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", @@ -737,41 +726,41 @@ "source-map": "^0.5.7" }, "dependencies": { - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "ms": "2.0.0" } }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" } }, "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { "babel-messages": "^6.23.0", @@ -780,7 +769,7 @@ "detect-indent": "^4.0.0", "jsesc": "^1.3.0", "lodash": "^4.17.4", - "source-map": "^0.5.6", + "source-map": "^0.5.7", "trim-right": "^1.0.1" } }, @@ -817,31 +806,6 @@ "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "lodash": "^4.17.4" - }, - "dependencies": { - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - } } }, "babel-helper-explode-assignable-expression": { @@ -855,6 +819,29 @@ "babel-types": "^6.24.1" } }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", @@ -897,31 +884,6 @@ "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" - }, - "dependencies": { - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - } } }, "babel-helper-replace-supers": { @@ -949,15 +911,16 @@ } }, "babel-loader": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", - "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", + "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.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "util.promisify": "^1.0.0" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" } }, "babel-messages": { @@ -970,978 +933,15 @@ } }, "babel-plugin-add-module-exports": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.0.tgz", - "integrity": "sha512-m0sMxPL4FaN2K69GQgaRJa4Ny15qKSdoknIcpN+gz+NaJlAW9pge/povs13tPYsKDboflrEQC+/3kfIsONBTaw==", - "dev": true, - "requires": { - "chokidar": "^2.0.4" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "optional": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", - "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "optional": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "optional": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "nan": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.1.tgz", - "integrity": "sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==", - "dev": true, - "optional": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "optional": true - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - } - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz", + "integrity": "sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==", + "dev": true + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { "babel-runtime": "^6.22.0" @@ -2022,31 +1022,6 @@ "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" - }, - "dependencies": { - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - } } }, "babel-plugin-transform-es2015-computed-properties": { @@ -2096,31 +1071,6 @@ "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" - }, - "dependencies": { - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - } } }, "babel-plugin-transform-es2015-literals": { @@ -2199,18 +1149,6 @@ "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" - }, - "dependencies": { - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - } } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -2412,6 +1350,23 @@ "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "babel-types": { @@ -2498,67 +1453,63 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "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 } } }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "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, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } + "basic-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", + "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=" }, "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", - "dev": true + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, "optional": true, "requires": { - "inherits": "~2.0.0" + "file-uri-to-path": "1.0.0" } }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", "dev": true }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -2624,14 +1575,6 @@ "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } } }, "browserify-rsa": { @@ -2642,21 +1585,50 @@ "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "browserify-zlib": { @@ -2679,9 +1651,9 @@ } }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -2690,9 +1662,9 @@ } }, "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "buffer-xor": { @@ -2714,47 +1686,28 @@ "dev": true }, "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { - "bluebird": "^3.5.3", + "bluebird": "^3.5.5", "chownr": "^1.1.1", "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", + "glob": "^7.1.4", "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", + "rimraf": "^2.6.3", "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" }, "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -2771,9 +1724,9 @@ "dev": true }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } @@ -2803,37 +1756,46 @@ } } }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "caniuse-lite": { - "version": "1.0.30000948", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000948.tgz", - "integrity": "sha512-Lw4y7oz1X5MOMZm+2IFaSISqVVQvUuD+ZUSfeYK/SlYiMjkHN/eJ2PDfJehW5NA6JjrxYSSnIWfwjeObQMEjFQ==", + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true + "caniuse-lite": { + "version": "1.0.30001154", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001154.tgz", + "integrity": "sha512-y9DvdSti8NnYB9Be92ddMZQrcOe04kcQtcxtBx4NkB04+qZ+JUWotnXBJTmxlKudhxNTQ3RRknMwNU2YQl/Org==", + "dev": true }, "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", "dev": true, "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" + "pathval": "^1.1.0", + "type-detect": "^4.0.5" } }, "chalk": { @@ -2849,6 +1811,12 @@ "supports-color": "^2.0.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -2874,15 +1842,15 @@ } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -2937,11 +1905,39 @@ } }, "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -2949,15 +1945,15 @@ "dev": true }, "codecov": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.7.1.tgz", - "integrity": "sha512-JHWxyPTkMLLJn9SmKJnwAnvY09kg2Os2+Ux+GG7LwZ9g8gzDDISpIN5wAsH1UBaafA/yGcd3KofMaorE8qd6Lw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.8.0.tgz", + "integrity": "sha512-7E/S7hmq2CJvCMBMu+aRACO9jxQX1HJug/M3ub8+t84R+5Ai2T5sFMxS3W8P41m2A63+VSAAL4U0aBlqZXkJPw==", "dev": true, "requires": { "argv": "0.0.2", "ignore-walk": "3.0.3", - "js-yaml": "3.13.1", - "teeny-request": "6.0.1", + "js-yaml": "3.14.0", + "teeny-request": "7.0.1", "urlgrey": "0.4.4" } }, @@ -2972,12 +1968,12 @@ } }, "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "color-name": "^1.1.1" + "color-name": "1.1.3" } }, "color-name": { @@ -2986,20 +1982,15 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "dev": true, - "optional": true, - "requires": { - "delayed-stream": "~1.0.0" - } + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "commondir": { @@ -3009,9 +2000,9 @@ "dev": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "concat-map": { @@ -3032,21 +2023,17 @@ "typedarray": "^0.0.6" } }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true }, "constants-browserify": { "version": "1.0.0", @@ -3061,10 +2048,13 @@ "dev": true }, "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", - "dev": true + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } }, "copy-concurrently": { "version": "1.0.5", @@ -3087,9 +2077,9 @@ "dev": true }, "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", "dev": true }, "core-util-is": { @@ -3104,13 +2094,21 @@ "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=" }, "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "create-hash": { @@ -3141,12 +2139,14 @@ } }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "lru-cache": "^4.0.1", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } @@ -3171,25 +2171,9 @@ } }, "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "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, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, "dateformat": { @@ -3199,11 +2183,11 @@ "dev": true }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "decamelize": { @@ -3227,20 +2211,6 @@ "type-detect": "^4.0.0" } }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true, - "optional": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "optional": true - }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -3322,38 +2292,17 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "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 } } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true, - "optional": true - }, - "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, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true - }, "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -3390,6 +2339,14 @@ "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "doctrine": { @@ -3419,39 +2376,21 @@ "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, - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "ecstatic": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.2.0.tgz", - "integrity": "sha512-Goilx/2cfU9vvfQjgtNgc2VmJAD8CasQ6rZDqCd2u4Hsyd/qFET6nBf60jiHodevR3nl3IGzNKtrzPXWP88utQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", + "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", "requires": { "he": "^1.1.1", - "mime": "^1.4.1", + "mime": "^1.6.0", "minimist": "^1.1.0", - "url-join": "^2.0.2" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } + "url-join": "^2.0.5" } }, "electron-to-chromium": { - "version": "1.3.116", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz", - "integrity": "sha512-NKwKAXzur5vFCZYBHpdWjTMO8QptNLNP80nItkSIgUOapPAo9Uia+RvkCaZJtO7fhQaVElSvBPWEc2ku6cKsPA==", + "version": "1.3.585", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.585.tgz", + "integrity": "sha512-xoeqjMQhgHDZM7FiglJAb2aeOxHZWFruUc3MbAGTgE7GB8rr5fTn1Sdh5THGuQtndU3GuXlu91ZKqRivxoCZ/A==", "dev": true }, "elliptic": { @@ -3467,6 +2406,14 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "emoji-regex": { @@ -3476,38 +2423,41 @@ "dev": true }, "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" } }, "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", + "memory-fs": "^0.5.0", "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } } }, "errno": { @@ -3520,32 +2470,37 @@ } }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -3560,9 +2515,9 @@ "dev": true }, "eslint": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.1.tgz", - "integrity": "sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -3571,7 +2526,7 @@ "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.2", + "eslint-scope": "^4.0.3", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", "espree": "^5.0.1", @@ -3585,7 +2540,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "inquirer": "^6.2.2", - "js-yaml": "^3.12.0", + "js-yaml": "^3.13.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", "lodash": "^4.17.11", @@ -3629,60 +2584,19 @@ "supports-color": "^5.3.0" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint-scope": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", - "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "ms": "2.1.2" } }, "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "strip-ansi": { @@ -3706,54 +2620,152 @@ } }, "eslint-config-airbnb-base": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", - "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz", + "integrity": "sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w==", "dev": true, "requires": { - "eslint-restricted-globals": "^0.1.1", + "confusing-browser-globals": "^1.0.5", "object.assign": "^4.1.0", - "object.entries": "^1.0.4" + "object.entries": "^1.1.0" } }, "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, "requires": { "debug": "^2.6.9", - "resolve": "^1.5.0" + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "eslint-module-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", - "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "dev": true, "requires": { - "debug": "^2.6.8", + "debug": "^2.6.9", "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } } }, "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", "dev": true, "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.3.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", "has": "^1.0.3", - "lodash": "^4.17.11", "minimatch": "^3.0.4", + "object.values": "^1.1.1", "read-pkg-up": "^2.0.0", - "resolve": "^1.9.0" + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", @@ -3764,33 +2776,18 @@ "isarray": "^1.0.0" } }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } } } }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true - }, "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -3804,20 +2801,12 @@ "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, "espree": { @@ -3832,50 +2821,66 @@ } }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "eventemitter3": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.0.1.tgz", - "integrity": "sha512-QOCPu979MMWX9XNlfRZoin+Wm+bK1SP7vv3NGUniYwuSJK/+cPA10blMaeRgzg31RvoSFk6FsCDVa4vNryBTGA==" + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", "dev": true }, "evp_bytestokey": { @@ -3901,6 +2906,19 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } } }, "expand-brackets": { @@ -3932,13 +2950,6 @@ "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, - "optional": true - }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -3960,6 +2971,17 @@ } } }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", @@ -3970,23 +2992,16 @@ "is-extglob": "^1.0.0" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "optional": true - }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { @@ -3995,33 +3010,10 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fbjs": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", - "dev": true, - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.9" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - } - } - }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, "figures": { @@ -4042,6 +3034,13 @@ "flat-cache": "^2.0.1" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -4059,48 +3058,18 @@ "minimatch": "^3.0.3" } }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true - }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "optional": true - } - } - } + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "find-cache-dir": { @@ -4112,91 +3081,15 @@ "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "^3.0.0" } }, "findup-sync": { @@ -4252,6 +3145,15 @@ } } }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -4474,9 +3376,9 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "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 }, "micromatch": { @@ -4499,6 +3401,12 @@ "snapdragon": "^0.8.1", "to-regex": "^3.0.2" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -4511,37 +3419,12 @@ "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, "flush-write-stream": { @@ -4552,67 +3435,12 @@ "requires": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "follow-redirects": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", - "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", - "requires": { - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "optional": true, - "requires": { - "is-callable": "^1.1.3" - } + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" }, "for-in": { "version": "1.0.2", @@ -4630,25 +3458,6 @@ "for-in": "^1.0.1" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": 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, - "optional": 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", @@ -4680,9 +3489,9 @@ } }, "fs-readdir-recursive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", - "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, "fs-write-stream-atomic": { @@ -4704,45 +3513,20 @@ "dev": true }, "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.3.0", - "node-pre-gyp": "^0.6.36" - } - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, "optional": true, "requires": { - "fstream": "^1.0.0", - "inherits": "2", - "minimatch": "^3.0.0" + "bindings": "^1.5.0", + "nan": "^2.12.1" } }, "fsu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.0.4.tgz", - "integrity": "sha512-T8DGjqL3DNJsA/uHWUTIZhJ/VuEqi3QdNsQBAWpKtoIPS/8rK4HWG79ae2+HEw+Cz9e5lIsWghpoXCcNsrDPFA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", "dev": true }, "function-bind": { @@ -4757,51 +3541,10 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "get-func-name": { @@ -4810,6 +3553,17 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -4822,20 +3576,10 @@ "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, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4898,15 +3642,15 @@ "dev": true }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "handlebars": { @@ -4922,77 +3666,11 @@ "wordwrap": "^1.0.0" }, "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "uglify-js": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.0.tgz", - "integrity": "sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA==", - "dev": true, - "optional": 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, - "optional": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "optional": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "optional": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true, - "optional": 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, - "optional": true } } }, @@ -5021,18 +3699,11 @@ "dev": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -5094,13 +3765,33 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "hash.js": { @@ -5114,9 +3805,9 @@ } }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "hmac-drbg": { "version": "1.0.1", @@ -5149,17 +3840,17 @@ } }, "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } @@ -5176,54 +3867,31 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "http-server": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz", - "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==", - "requires": { - "colors": "1.0.3", - "corser": "~2.0.0", - "ecstatic": "^3.0.0", - "http-proxy": "^1.8.1", - "opener": "~1.4.0", - "optimist": "0.6.x", - "portfinder": "^1.0.13", - "union": "~0.4.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", + "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", + "requires": { + "basic-auth": "^1.0.3", + "colors": "^1.4.0", + "corser": "^2.0.1", + "ecstatic": "^3.3.2", + "http-proxy": "^1.18.0", + "minimist": "^1.2.5", + "opener": "^1.5.1", + "portfinder": "^1.0.25", + "secure-compare": "3.0.1", + "union": "~0.5.0" } }, "https-browserify": { @@ -5233,48 +3901,39 @@ "dev": true }, "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { - "agent-base": "5", + "agent-base": "6", "debug": "4" }, "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "iferr": { @@ -5283,6 +3942,12 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, "ignore-walk": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", @@ -5293,9 +3958,9 @@ } }, "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -5310,60 +3975,6 @@ "requires": { "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } } }, "imurmurhash": { @@ -5372,10 +3983,10 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, "inflight": { @@ -5389,9 +4000,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "ini": { @@ -5401,9 +4012,9 @@ "dev": true }, "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -5412,21 +4023,15 @@ "cli-width": "^2.0.0", "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.12", "mute-stream": "0.0.7", "run-async": "^2.2.0", "rxjs": "^6.4.0", "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" }, "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", @@ -5453,45 +4058,10 @@ "supports-color": "^5.3.0" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "strip-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", - "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" @@ -5509,15 +4079,15 @@ } }, "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { "loose-envify": "^1.0.0" @@ -5549,31 +4119,32 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, + "optional": true, "requires": { "binary-extensions": "^1.0.0" } }, "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-core-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", + "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", "dev": true, "requires": { - "builtin-modules": "^1.0.0" + "has": "^1.0.3" } }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -5584,9 +4155,9 @@ } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, "is-descriptor": { @@ -5639,13 +4210,10 @@ "optional": true }, "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -5663,6 +4231,12 @@ "is-extglob": "^1.0.0" } }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", @@ -5673,23 +4247,6 @@ "kind-of": "^3.0.2" } }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -5721,19 +4278,13 @@ "dev": true, "optional": true }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "requires": { - "has": "^1.0.1" + "has-symbols": "^1.0.1" } }, "is-stream": { @@ -5742,22 +4293,21 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true - }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -5770,6 +4320,12 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -5792,23 +4348,6 @@ "isarray": "1.0.0" } }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "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, - "optional": true - }, "istanbul": { "version": "1.1.0-alpha.1", "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-1.1.0-alpha.1.tgz", @@ -5823,6 +4362,14 @@ "nopt": "3.x", "which": "^1.1.1", "wordwrap": "^1.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } } }, "istanbul-api": { @@ -5842,87 +4389,56 @@ "js-yaml": "^3.7.0", "mkdirp": "^0.5.1", "once": "^1.4.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", + "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", + "dev": true, + "requires": { + "append-transform": "^0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" }, "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, - "istanbul-lib-coverage": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", - "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", - "dev": true, - "requires": { - "append-transform": "^0.4.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", - "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^1.2.1", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", - "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.1", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - } - }, - "istanbul-reports": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", - "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", - "dev": true, - "requires": { - "handlebars": "^4.0.3" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -5934,27 +4450,26 @@ } } }, - "istanbul-lib-instrument": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", - "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "istanbul-lib-source-maps": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + } + }, + "istanbul-reports": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", "dev": true, "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.1", - "semver": "^5.3.0" - }, - "dependencies": { - "istanbul-lib-coverage": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", - "dev": true - } + "handlebars": "^4.0.3" } }, "js-tokens": { @@ -5964,22 +4479,15 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "dev": true, "requires": { "argparse": "^1.0.7", "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, - "optional": true - }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", @@ -5992,13 +4500,6 @@ "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, - "optional": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6032,19 +4533,6 @@ "graceful-fs": "^4.1.6" } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -6100,31 +4588,41 @@ "dev": true }, "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^2.0.0", + "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "dev": true + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, "lodash.isfunction": { "version": "3.0.9", @@ -6133,34 +4631,38 @@ "dev": true }, "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "^3.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "lru-cache": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "map-age-cleaner": { @@ -6203,14 +4705,6 @@ "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } } }, "mem": { @@ -6262,6 +4756,14 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "mime": { @@ -6269,23 +4771,6 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, - "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", - "dev": true, - "optional": true - }, - "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", - "dev": true, - "optional": true, - "requires": { - "mime-db": "~1.38.0" - } - }, "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", @@ -6314,9 +4799,9 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mississippi": { "version": "3.0.0", @@ -6358,32 +4843,38 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "mocha": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", - "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, "requires": { "browser-stdout": "1.3.1", - "commander": "2.11.0", + "commander": "2.15.1", "debug": "3.1.0", "diff": "3.5.0", "escape-string-regexp": "1.0.5", "glob": "7.1.2", - "growl": "1.10.3", + "growl": "1.10.5", "he": "1.1.1", "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "4.4.0" + "supports-color": "5.4.0" }, "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -6393,27 +4884,62 @@ "ms": "2.0.0" } }, - "has-flag": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } } } }, "mochawesome": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-3.0.2.tgz", - "integrity": "sha512-2fdl+Y5rSPlslVmuBRjT3829GYj/hh7Cyber+EkIubD60W44EkMR58jPHeopG5eBGgk3HWRl6Rm/g2knDeSbEA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-3.1.2.tgz", + "integrity": "sha512-w+9QRJNdcOoS4GGj2rJkNl/8KQ34cYyjQfwbFr8tBwjIi2X/jVioAIHUU0gPII5/XpFZd5X24k+IG2DKtdViiQ==", "dev": true, "requires": { "babel-runtime": "^6.20.0", @@ -6442,9 +4968,9 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6462,20 +4988,26 @@ } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true } } }, "mochawesome-report-generator": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-3.1.1.tgz", - "integrity": "sha512-dzhYGBkmzKLwbO1hvSHkXcG5Q0PiUpstBH5viIePD9VYkBkFpFyDcK5Jyu9JP28qg+H7fAxKZo59aHepowdiuQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-3.1.5.tgz", + "integrity": "sha512-/lFmlpY1cPfLXmV/Qb7kprbQS5VYExEaJGRR86rCLYUdLQM5uivIwvulUEt5VV9mbK/GttN2XPb8al7/5VgtOw==", "dev": true, "requires": { "chalk": "^2.3.0", @@ -6493,12 +5025,6 @@ "yargs": "^10.0.3" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -6509,9 +5035,9 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6519,30 +5045,53 @@ "supports-color": "^5.3.0" } }, - "cliui": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", - "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "locate-path": "^2.0.0" } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" } }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -6585,9 +5134,9 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mute-stream": { "version": "0.0.7", @@ -6596,16 +5145,16 @@ "dev": true }, "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "dev": true, "optional": true }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -6613,7 +5162,6 @@ "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", @@ -6635,9 +5183,9 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "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 } } @@ -6649,9 +5197,9 @@ "dev": true }, "neo-async": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", - "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "nice-try": { @@ -6661,19 +5209,15 @@ "dev": true }, "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true }, "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { "assert": "^1.1.1", @@ -6686,7 +5230,7 @@ "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", + "path-browserify": "0.0.1", "process": "^0.11.10", "punycode": "^1.2.4", "querystring-es3": "^0.2.0", @@ -6698,7 +5242,7 @@ "tty-browserify": "0.0.0", "url": "^0.11.0", "util": "^0.11.0", - "vm-browserify": "0.0.4" + "vm-browserify": "^1.0.1" }, "dependencies": { "punycode": { @@ -6709,38 +5253,6 @@ } } }, - "node-pre-gyp": { - "version": "0.6.37", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.37.tgz", - "integrity": "sha1-PIcrI2suJm5BQFeP4e6I9pMyOgU=", - "dev": true, - "optional": true, - "requires": { - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "request": "^2.81.0", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tape": "^4.6.3", - "tar": "^2.2.1", - "tar-pack": "^3.4.0" - }, - "dependencies": { - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - } - } - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -6751,13 +5263,13 @@ } }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } @@ -6781,19 +5293,6 @@ "path-key": "^2.0.0" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -6838,6 +5337,7 @@ "align-text": { "version": "0.1.4", "bundled": true, + "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2", @@ -6847,7 +5347,8 @@ }, "amdefine": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "ansi-regex": { "version": "2.1.1", @@ -6904,7 +5405,8 @@ }, "async": { "version": "1.5.2", - "bundled": true + "bundled": true, + "dev": true }, "atob": { "version": "2.1.1", @@ -7127,11 +5629,13 @@ "camelcase": { "version": "1.2.1", "bundled": true, + "dev": true, "optional": true }, "center-align": { "version": "0.1.3", "bundled": true, + "dev": true, "optional": true, "requires": { "align-text": "^0.1.3", @@ -7174,6 +5678,7 @@ "cliui": { "version": "2.1.0", "bundled": true, + "dev": true, "optional": true, "requires": { "center-align": "^0.1.1", @@ -7184,6 +5689,7 @@ "wordwrap": { "version": "0.0.2", "bundled": true, + "dev": true, "optional": true } } @@ -7256,7 +5762,8 @@ }, "decamelize": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "decode-uri-component": { "version": "0.2.0", @@ -7521,7 +6028,8 @@ }, "for-in": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "foreground-child": { "version": "1.5.6", @@ -7583,6 +6091,27 @@ "bundled": true, "dev": true }, + "handlebars": { + "version": "4.0.11", + "bundled": true, + "dev": true, + "requires": { + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, "has-ansi": { "version": "2.0.0", "bundled": true, @@ -7677,7 +6206,8 @@ }, "is-buffer": { "version": "1.1.6", - "bundled": true + "bundled": true, + "dev": true }, "is-builtin-module": { "version": "1.0.0", @@ -7882,6 +6412,7 @@ "kind-of": { "version": "3.2.2", "bundled": true, + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -7889,6 +6420,7 @@ "lazy-cache": { "version": "1.0.4", "bundled": true, + "dev": true, "optional": true }, "lcid": { @@ -7927,9 +6459,15 @@ } } }, + "lodash": { + "version": "4.17.10", + "bundled": true, + "dev": true + }, "longest": { "version": "1.0.1", "bundled": true, + "dev": true, "optional": true }, "loose-envify": { @@ -8040,7 +6578,27 @@ }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } }, "mkdirp": { "version": "0.5.1", @@ -8157,6 +6715,7 @@ "optimist": { "version": "0.6.1", "bundled": true, + "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -8347,7 +6906,8 @@ }, "repeat-string": { "version": "1.6.1", - "bundled": true + "bundled": true, + "dev": true }, "repeating": { "version": "2.0.1", @@ -8385,6 +6945,7 @@ "right-align": { "version": "0.1.3", "bundled": true, + "dev": true, "optional": true, "requires": { "align-text": "^0.1.1" @@ -8554,7 +7115,8 @@ }, "source-map": { "version": "0.5.7", - "bundled": true + "bundled": true, + "dev": true }, "source-map-resolve": { "version": "0.5.1", @@ -8744,6 +7306,8 @@ "uglify-js": { "version": "2.8.29", "bundled": true, + "dev": true, + "optional": true, "requires": { "source-map": "~0.5.1", "uglify-to-browserify": "~1.0.0", @@ -8753,6 +7317,7 @@ "yargs": { "version": "3.10.0", "bundled": true, + "dev": true, "optional": true, "requires": { "camelcase": "^1.0.2", @@ -8766,6 +7331,7 @@ "uglify-to-browserify": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, "union-value": { @@ -8881,11 +7447,13 @@ "window-size": { "version": "0.1.0", "bundled": true, + "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "bundled": true + "bundled": true, + "dev": true }, "wrap-ansi": { "version": "2.1.0", @@ -9015,13 +7583,6 @@ } } }, - "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, - "optional": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -9051,16 +7612,15 @@ } }, "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", - "dev": true, - "optional": true + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true }, "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object-visit": { @@ -9081,39 +7641,28 @@ } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, "object.entries": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", - "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", + "es-abstract": "^1.17.5", "has": "^1.0.3" } }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", @@ -9142,6 +7691,18 @@ } } }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -9161,38 +7722,22 @@ } }, "opener": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", - "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=" - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - } - } + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, "os-browserify": { @@ -9224,17 +7769,6 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "output-file-sync": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", @@ -9259,70 +7793,69 @@ "dev": true }, "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.0.0" } }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "requires": { - "cyclist": "~0.2.2", + "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" } }, "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" } }, "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "asn1.js": "^4.0.0", + "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" @@ -9363,16 +7896,17 @@ "dev": true }, "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "dev": true, + "optional": true }, "path-exists": { "version": "3.0.0", @@ -9399,9 +7933,9 @@ "dev": true }, "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "path-type": { @@ -9428,9 +7962,9 @@ "dev": true }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -9440,30 +7974,36 @@ "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=", + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true, "optional": true }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "^3.0.0" } }, "portfinder": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", - "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" } }, "posix-character-classes": { @@ -9486,9 +8026,9 @@ "optional": true }, "private": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", - "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, "process": { @@ -9498,9 +8038,9 @@ "dev": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "progress": { @@ -9509,15 +8049,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "requires": { - "asap": "~2.0.3" - } - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -9525,14 +8056,14 @@ "dev": true }, "prop-types": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", - "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, "prr": { @@ -9547,13 +8078,6 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "dev": true, - "optional": true - }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -9568,10 +8092,10 @@ "safe-buffer": "^5.1.2" }, "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", "dev": true } } @@ -9597,165 +8121,539 @@ "pump": "^2.0.0" }, "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "optional": true + }, + "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, + "optional": true + } + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "optional": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", - "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + }, + "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, + "optional": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true } } }, - "react": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.2.0.tgz", - "integrity": "sha512-ZmIomM7EE1DvPEnSFAHZn9Vs9zJl5A9H7el0EGTE6ZbW9FKe/14IYAlPbC8iH25YarEQxZL+E8VW7Mi7kfQrDQ==", - "dev": true, - "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0" - } - }, - "react-dom": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.2.0.tgz", - "integrity": "sha512-zpGAdwHVn9K0091d+hr+R0qrjoJ84cIBFL2uU60KvWBPfZ7LPSrfqviTxGHWN0sjPZb2hxWzMexwrvJdKePvjg==", - "dev": true, - "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" - } - }, "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, "regenerator-transform": { @@ -9833,12 +8731,13 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "dev": true, + "optional": true }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -9856,58 +8755,6 @@ "is-finite": "^1.0.0" } }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "optional": 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.0", - "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.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "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, - "optional": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, - "optional": true - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -9926,12 +8773,13 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" } }, "resolve-cwd": { @@ -9983,16 +8831,6 @@ "signal-exit": "^3.0.2" } }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "dev": true, - "optional": true, - "requires": { - "through": "~2.3.4" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -10000,12 +8838,12 @@ "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "ripemd160": { @@ -10019,13 +8857,10 @@ } }, "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true }, "run-queue": { "version": "1.0.3", @@ -10036,10 +8871,19 @@ "aproba": "^1.1.1" } }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safe-regex": { @@ -10057,60 +8901,46 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "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": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "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 - } + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, + "secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=" + }, "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "serialize-javascript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", - "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "set-blocking": { "version": "2.0.0", @@ -10118,17 +8948,10 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true, - "optional": true - }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -10180,9 +9003,9 @@ "dev": true }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "slash": { @@ -10229,6 +9052,15 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -10246,6 +9078,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -10305,9 +9143,9 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "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 } } @@ -10334,12 +9172,12 @@ "dev": true }, "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { - "atob": "^2.0.0", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -10362,9 +9200,9 @@ "dev": true }, "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -10372,15 +9210,15 @@ } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -10388,9 +9226,9 @@ } }, "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", "dev": true }, "split-string": { @@ -10408,24 +9246,6 @@ "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, - "optional": 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", @@ -10496,44 +9316,12 @@ "readable-stream": "^2.3.6", "to-arraybuffer": "^1.0.0", "xtend": "^4.0.0" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "string-width": { @@ -10563,22 +9351,74 @@ } } }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "string.prototype.trimend": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", + "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", + "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", "dev": true, - "optional": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -10624,13 +9464,13 @@ "dev": true }, "table": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", - "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", + "ajv": "^6.10.2", + "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" }, @@ -10653,9 +9493,9 @@ } }, "strip-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", - "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" @@ -10664,107 +9504,15 @@ } }, "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, - "tape": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.10.1.tgz", - "integrity": "sha512-G0DywYV1jQeY3axeYnXUOt6ktnxS9OPJh97FGR3nrua8lhWi1zPflLxcAHavZ7Jf3qUfY7cxcVIVFa4mY2IY1w==", - "dev": true, - "optional": true, - "requires": { - "deep-equal": "~1.0.1", - "defined": "~1.0.0", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.3", - "has": "~1.0.3", - "inherits": "~2.0.3", - "minimist": "~1.2.0", - "object-inspect": "~1.6.0", - "resolve": "~1.10.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.1.2", - "through": "~2.3.8" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true, - "optional": true - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "optional": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "optional": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "tar-pack": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.1.tgz", - "integrity": "sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.2.0", - "fstream": "^1.0.10", - "fstream-ignore": "^1.0.5", - "once": "^1.3.3", - "readable-stream": "^2.1.4", - "rimraf": "^2.5.1", - "tar": "^2.2.1", - "uid-number": "^0.0.6" - } - }, "tcomb": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.25.tgz", - "integrity": "sha512-eywfhynigULV4SzNfvcXF7Ow77W0UBniQ1/9x8sNNo10al5s3PjRHShOb5OoVL8DQvLcatYRN3boviNcqb7Pkw==", + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", "dev": true }, "tcomb-validation": { @@ -10777,49 +9525,29 @@ } }, "teeny-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz", - "integrity": "sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.0.1.tgz", + "integrity": "sha512-sasJmQ37klOlplL4Ia/786M5YlOcoLGQyq2TE4WHSRupbAuDaQW0PfVxV4MtdBtRJ4ngzS+1qim8zP6Zp35qCw==", "dev": true, "requires": { "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^4.0.0", - "node-fetch": "^2.2.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", "stream-events": "^1.0.5", - "uuid": "^3.3.2" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } + "uuid": "^8.0.0" } }, "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, "requires": { - "commander": "^2.19.0", + "commander": "^2.20.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "source-map-support": "~0.5.12" }, "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10827,9 +9555,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", - "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -10839,106 +9567,33 @@ } }, "terser-webpack-plugin": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", - "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", "dev": true, "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", + "serialize-javascript": "^4.0.0", "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" }, "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "find-up": "^3.0.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10960,19 +9615,19 @@ "dev": true }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "^2.1.5", + "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -11041,26 +9696,6 @@ } } }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "optional": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - } - } - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -11087,9 +9722,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", - "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -11098,10 +9733,33 @@ } } }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, "tslib": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", - "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tslint": { @@ -11145,12 +9803,6 @@ "supports-color": "^5.3.0" } }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -11177,23 +9829,6 @@ "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, - "optional": 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, - "optional": true - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -11204,9 +9839,9 @@ } }, "type-detect": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz", - "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "typedarray": { @@ -11221,60 +9856,31 @@ "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==", "dev": true }, - "ua-parser-js": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", - "dev": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "uglify-js": { + "version": "3.11.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.4.tgz", + "integrity": "sha512-FyYnoxVL1D6+jDGQpbK5jW6y/2JlVfRfEeQ67BPCUg5wfCjaKOpr2XeceE4QL+MkhxliLtf5EbrMDZgzpt2CNw==", "dev": true, "optional": true }, "union": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", - "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "requires": { - "qs": "~2.3.3" + "qs": "^6.4.0" } }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "unique-filename": { @@ -11287,18 +9893,18 @@ } }, "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { "imurmurhash": "^0.1.4" } }, "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unset-value": { @@ -11348,15 +9954,16 @@ } }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -11398,21 +10005,10 @@ "dev": true }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "user-home": { "version": "1.1.1", @@ -11427,6 +10023,14 @@ "dev": true, "requires": { "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, "util-deprecate": { @@ -11435,26 +10039,16 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", "dev": true }, "v8-compile-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", - "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, "v8flags": { @@ -11467,9 +10061,9 @@ } }, "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -11482,816 +10076,430 @@ "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", "dev": true, "requires": { - "chokidar": "^2.0.2", + "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" }, "dependencies": { "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, + "optional": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, + "optional": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "fill-range": "^7.0.1" } }, "chokidar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", - "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", "dev": true, + "optional": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.0" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "optional": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "to-regex-range": "^5.0.1" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dev": true, + "optional": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "optional": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.1" } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "optional": true + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, + "optional": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "picomatch": "^2.2.1" } }, - "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { + "normalize-path": { "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "remove-trailing-separator": "^1.0.1" } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "is-extendable": "^0.1.0" } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "requires": { - "wrappy": "1" + "is-descriptor": "^0.1.0" } }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "is-extendable": "^0.1.0" } }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "optional": true, "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "kind-of": "^3.0.2" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, - "optional": true + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "rimraf": { - "version": "2.6.3", - "bundled": true, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "optional": true, "requires": { - "glob": "^7.1.3" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "optional": true, "requires": { - "ansi-regex": "^2.0.0" + "is-descriptor": "^1.0.0" } }, - "strip-json-comments": { + "extend-shallow": { "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "is-extendable": "^0.1.0" } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2 || 2" + "is-extendable": "^0.1.0" } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true } } }, @@ -12300,6 +10508,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, + "optional": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -12310,6 +10519,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, + "optional": true, "requires": { "is-extglob": "^2.1.0" } @@ -12321,6 +10531,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -12330,6 +10541,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -12339,6 +10551,7 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, + "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -12349,13 +10562,15 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "dev": true, + "optional": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, + "optional": true, "requires": { "is-extglob": "^2.1.1" } @@ -12365,6 +10580,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -12374,6 +10590,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -12384,19 +10601,22 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "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, + "optional": true }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "optional": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -12413,10 +10633,10 @@ "to-regex": "^3.0.2" } }, - "nan": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.1.tgz", - "integrity": "sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true }, @@ -12424,71 +10644,42 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } + "optional": true } } }, "webpack": { - "version": "4.29.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.6.tgz", - "integrity": "sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.0.5", - "acorn-dynamic-import": "^4.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" }, "dependencies": { - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true - }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -12530,25 +10721,13 @@ } } }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "eslint-scope": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", - "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "ms": "2.0.0" } }, "expand-brackets": { @@ -12679,12 +10858,6 @@ } } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -12763,16 +10936,10 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "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 - }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "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 }, "micromatch": { @@ -12796,11 +10963,22 @@ "to-regex": "^3.0.2" } }, - "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } } } }, @@ -12823,12 +11001,6 @@ "yargs": "^12.0.5" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -12839,9 +11011,9 @@ } }, "camelcase": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", - "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "chalk": { @@ -12855,30 +11027,6 @@ "supports-color": "^5.3.0" } }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -12894,15 +11042,6 @@ "strip-eof": "^1.0.0" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -12927,20 +11066,10 @@ "invert-kv": "^2.0.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "mem": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", - "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", @@ -12949,9 +11078,9 @@ } }, "mimic-fn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", - "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "os-locale": { @@ -12965,45 +11094,6 @@ "mem": "^4.0.0" } }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -13046,9 +11136,9 @@ } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -13063,16 +11153,10 @@ } } }, - "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=", - "dev": true - }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -13084,15 +11168,11 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true }, "wordwrap": { "version": "1.0.0", @@ -13101,9 +11181,9 @@ "dev": true }, "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { "errno": "~0.1.7" @@ -13157,9 +11237,9 @@ } }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { @@ -13194,53 +11274,17 @@ }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "camelcase": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", - "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -13256,15 +11300,6 @@ "strip-eof": "^1.0.0" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -13295,20 +11330,10 @@ "invert-kv": "^2.0.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "mem": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", - "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", @@ -13317,9 +11342,9 @@ } }, "mimic-fn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", - "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "os-locale": { @@ -13333,48 +11358,12 @@ "mem": "^4.0.0" } }, - "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", - "dev": true - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -13384,32 +11373,15 @@ "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", - "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "y18n": { @@ -13419,9 +11391,9 @@ "dev": true }, "yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -13437,20 +11409,12 @@ "dev": true, "requires": { "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } } }, "yn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", - "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true } } diff --git a/package.json b/package.json index 1083baa5..99a00f6a 100644 --- a/package.json +++ b/package.json @@ -81,6 +81,6 @@ "yargs": "13.2.2" }, "dependencies": { - "http-server": "^0.11.1" + "http-server": "^0.12.3" } } From f979034482ea32467338fdd2308f70df478d99bc Mon Sep 17 00:00:00 2001 From: Loiane Groner <> Date: Mon, 2 Nov 2020 09:45:22 -0500 Subject: [PATCH 163/188] updated yargs --- package-lock.json | 185 ++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 82 insertions(+), 105 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a227f07..0d6fc8d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2508,6 +2508,12 @@ "is-symbol": "^1.0.2" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -11255,150 +11261,121 @@ "dev": true }, "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", + "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", "dev": true, "requires": { - "cliui": "^4.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.0.0" + "string-width": "^4.2.0", + "y18n": "^5.0.2", + "yargs-parser": "^20.2.2" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "color-convert": "^2.0.1" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "cliui": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.3.tgz", + "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==", "dev": true, "requires": { - "pump": "^3.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "color-name": "~1.1.4" } }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", "dev": true }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.3.tgz", + "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==", + "dev": true } } }, diff --git a/package.json b/package.json index 99a00f6a..d0ec6c91 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "typescript": "3.3.3333", "webpack": "^4.29.6", "webpack-cli": "3.3.0", - "yargs": "13.2.2" + "yargs": "^16.1.0" }, "dependencies": { "http-server": "^0.12.3" From 99bca3bd11e34e56b9694341b87c04f980d71828 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Dec 2020 20:36:34 +0000 Subject: [PATCH 164/188] Bump ini from 1.3.5 to 1.3.7 Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d6fc8d2..2688dabd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4012,9 +4012,9 @@ "dev": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", "dev": true }, "inquirer": { From 6f1d371cfa488c0ca37b5cbb6944a204c1e03f0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Apr 2021 16:04:01 +0000 Subject: [PATCH 165/188] Bump ssri from 6.0.1 to 6.0.2 Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/npm/ssri/releases) - [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md) - [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2688dabd..d0f788c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9253,9 +9253,9 @@ "dev": true }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" From 2b8810cb11178f13e4e857750bf11acd9411b5c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 May 2021 18:57:11 +0000 Subject: [PATCH 166/188] Bump handlebars from 4.0.11 to 4.7.7 Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.0.11 to 4.7.7. - [Release notes](https://github.com/wycats/handlebars.js/releases) - [Changelog](https://github.com/handlebars-lang/handlebars.js/blob/master/release-notes.md) - [Commits](https://github.com/wycats/handlebars.js/compare/v4.0.11...v4.7.7) Signed-off-by: dependabot[bot] --- package-lock.json | 66 ++++++++--------------------------------------- 1 file changed, 11 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2688dabd..f203ab8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3660,9 +3660,9 @@ "dev": true }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -5343,7 +5343,6 @@ "align-text": { "version": "0.1.4", "bundled": true, - "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2", @@ -5353,8 +5352,7 @@ }, "amdefine": { "version": "1.0.1", - "bundled": true, - "dev": true + "bundled": true }, "ansi-regex": { "version": "2.1.1", @@ -5411,8 +5409,7 @@ }, "async": { "version": "1.5.2", - "bundled": true, - "dev": true + "bundled": true }, "atob": { "version": "2.1.1", @@ -5635,13 +5632,11 @@ "camelcase": { "version": "1.2.1", "bundled": true, - "dev": true, "optional": true }, "center-align": { "version": "0.1.3", "bundled": true, - "dev": true, "optional": true, "requires": { "align-text": "^0.1.3", @@ -5684,7 +5679,6 @@ "cliui": { "version": "2.1.0", "bundled": true, - "dev": true, "optional": true, "requires": { "center-align": "^0.1.1", @@ -5695,7 +5689,6 @@ "wordwrap": { "version": "0.0.2", "bundled": true, - "dev": true, "optional": true } } @@ -5768,8 +5761,7 @@ }, "decamelize": { "version": "1.2.0", - "bundled": true, - "dev": true + "bundled": true }, "decode-uri-component": { "version": "0.2.0", @@ -6097,27 +6089,6 @@ "bundled": true, "dev": true }, - "handlebars": { - "version": "4.0.11", - "bundled": true, - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "bundled": true, - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "has-ansi": { "version": "2.0.0", "bundled": true, @@ -6212,8 +6183,7 @@ }, "is-buffer": { "version": "1.1.6", - "bundled": true, - "dev": true + "bundled": true }, "is-builtin-module": { "version": "1.0.0", @@ -6418,7 +6388,6 @@ "kind-of": { "version": "3.2.2", "bundled": true, - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -6426,7 +6395,6 @@ "lazy-cache": { "version": "1.0.4", "bundled": true, - "dev": true, "optional": true }, "lcid": { @@ -6473,7 +6441,6 @@ "longest": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true }, "loose-envify": { @@ -6584,8 +6551,7 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, - "dev": true + "bundled": true }, "mixin-deep": { "version": "1.3.1", @@ -6721,7 +6687,6 @@ "optimist": { "version": "0.6.1", "bundled": true, - "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -6912,8 +6877,7 @@ }, "repeat-string": { "version": "1.6.1", - "bundled": true, - "dev": true + "bundled": true }, "repeating": { "version": "2.0.1", @@ -6951,7 +6915,6 @@ "right-align": { "version": "0.1.3", "bundled": true, - "dev": true, "optional": true, "requires": { "align-text": "^0.1.1" @@ -7121,8 +7084,7 @@ }, "source-map": { "version": "0.5.7", - "bundled": true, - "dev": true + "bundled": true }, "source-map-resolve": { "version": "0.5.1", @@ -7312,8 +7274,6 @@ "uglify-js": { "version": "2.8.29", "bundled": true, - "dev": true, - "optional": true, "requires": { "source-map": "~0.5.1", "uglify-to-browserify": "~1.0.0", @@ -7323,7 +7283,6 @@ "yargs": { "version": "3.10.0", "bundled": true, - "dev": true, "optional": true, "requires": { "camelcase": "^1.0.2", @@ -7337,7 +7296,6 @@ "uglify-to-browserify": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "union-value": { @@ -7453,13 +7411,11 @@ "window-size": { "version": "0.1.0", "bundled": true, - "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "bundled": true, - "dev": true + "bundled": true }, "wrap-ansi": { "version": "2.1.0", From f66914c952a4cadc6468848db7ec069d37e8076d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 May 2021 02:23:43 +0000 Subject: [PATCH 167/188] Bump lodash from 4.17.10 to 4.17.21 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.10 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.10...4.17.21) Signed-off-by: dependabot[bot] --- package-lock.json | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2688dabd..01f787bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4626,9 +4626,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.isfunction": { "version": "3.0.9", @@ -6465,11 +6465,6 @@ } } }, - "lodash": { - "version": "4.17.10", - "bundled": true, - "dev": true - }, "longest": { "version": "1.0.1", "bundled": true, From b2dffee2d6ca80a41cca7389cef93094dde60025 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 9 May 2021 12:18:34 +0000 Subject: [PATCH 168/188] Bump hosted-git-info from 2.6.0 to 2.8.9 Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.6.0 to 2.8.9. - [Release notes](https://github.com/npm/hosted-git-info/releases) - [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md) - [Commits](https://github.com/npm/hosted-git-info/compare/v2.6.0...v2.8.9) Signed-off-by: dependabot[bot] --- package-lock.json | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2688dabd..79584d7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3846,9 +3846,9 @@ } }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "http-proxy": { @@ -6160,11 +6160,6 @@ } } }, - "hosted-git-info": { - "version": "2.6.0", - "bundled": true, - "dev": true - }, "imurmurhash": { "version": "0.1.4", "bundled": true, From 57d29f61e9945abf0b93be65eaf3a43043b52d3c Mon Sep 17 00:00:00 2001 From: anthonycampbell Date: Sat, 25 Sep 2021 23:05:27 -0700 Subject: [PATCH 169/188] Adding gale-shapley algorithm --- src/js/algorithms/graph/gale-shapley.js | 77 +++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/js/algorithms/graph/gale-shapley.js diff --git a/src/js/algorithms/graph/gale-shapley.js b/src/js/algorithms/graph/gale-shapley.js new file mode 100644 index 00000000..b0d52689 --- /dev/null +++ b/src/js/algorithms/graph/gale-shapley.js @@ -0,0 +1,77 @@ +class Person { + constructor(id, gender, ranks, rankIndex, status = "single") { + this.id = id + this.gender = gender + this.ranks = ranks + this.i = rankIndex + this.status = status + this.partner = null + } +} + +function galeShapley(proposers, reviewers) { + let perfectMatching = new Map() + for (let [pid, p] of proposers) { + while (p.i < p.ranks.length) { + let rid = p.ranks[p.i] + let r = reviewers.get(rid) + p.i++ + if (r.status === "single") { + r.status = "engaged" + r.partner = p + p.partner = r + perfectMatching.set(pid, rid) + proposers.delete(pid) + break + } else if (r.status === "engaged" && r.ranks.get(pid) < r.ranks.get(r.partner.id)) { + perfectMatching.delete(r.partner.id) + proposers.set(r.partner.id, r.partner) + proposers.delete(pid) + r.partner.partner = null + r.partner = p + p.partner = r + perfectMatching.set(pid, rid) + break + } + } + } + return perfectMatching +} + +let men = new Map() +let women = new Map() +//O(n^2) +function createPeople(n, gender, set) { + for (let i = 0; i < n; i++) { + let id = i + let rankIndex = 0 + let g = gender + let ranks = new Array(n) + let p + for (let i = 0; i < n; i++) ranks[i] = i + shuffle(ranks) + if (gender == 'w') { + let wRanks = new Map() + for (let i = 0; i < n; i++) wRanks.set(i, ranks[i]) + p = new Person(id, g, wRanks, null) + } else { + p = new Person(id, g, ranks, rankIndex) + } + set.set(i, p) + } +} + +//fisher-yates shuffle O(n) +function shuffle(array) { + for (let i = array.length - 1; i >= 0; i--) { + let j = Math.floor(Math.random() * (i + 1)) + let temp = array[i] + array[i] = array[j] + array[j] = temp + } +} + +createPeople(4, 'm', men) +createPeople(4, 'w', women) +let stableMatching = galeShapley(men, women) +console.log(stableMatching) From 4fb2b45fbf4dd2db92f3ad2c278055cf4c4fe735 Mon Sep 17 00:00:00 2001 From: Jeff Zhang <72734421+jeff-zhenz@users.noreply.github.com> Date: Wed, 11 May 2022 21:44:56 +0800 Subject: [PATCH 170/188] fix: CircularLinkedList insert function --- src/js/data-structures/circular-linked-list.js | 2 +- src/ts/data-structures/circular-linked-list.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/data-structures/circular-linked-list.js b/src/js/data-structures/circular-linked-list.js index 4209087a..865fcb70 100644 --- a/src/js/data-structures/circular-linked-list.js +++ b/src/js/data-structures/circular-linked-list.js @@ -32,7 +32,7 @@ export default class CircularLinkedList extends LinkedList { node.next = this.head; } else { node.next = current; - current = this.getElementAt(this.size()); + current = this.getElementAt(this.size() - 1); // update last element this.head = node; current.next = this.head; diff --git a/src/ts/data-structures/circular-linked-list.ts b/src/ts/data-structures/circular-linked-list.ts index f422d276..802f6138 100644 --- a/src/ts/data-structures/circular-linked-list.ts +++ b/src/ts/data-structures/circular-linked-list.ts @@ -36,7 +36,7 @@ export default class CircularLinkedList extends LinkedList { node.next = this.head; } else { node.next = current; - current = this.getElementAt(this.size()); + current = this.getElementAt(this.size() - 1); // update last element this.head = node; current.next = this.head; From 91887bc2d54de67cb8a0ed1f6e70ded4d56015ea Mon Sep 17 00:00:00 2001 From: Jeff Zhang <72734421+jeff-zhenz@users.noreply.github.com> Date: Thu, 12 May 2022 07:52:56 +0800 Subject: [PATCH 171/188] improvements: isSubsetOf function of Set --- src/js/data-structures/set.js | 14 ++------------ src/ts/data-structures/set.ts | 16 ++-------------- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/src/js/data-structures/set.js b/src/js/data-structures/set.js index 0dc29a0c..996316ac 100644 --- a/src/js/data-structures/set.js +++ b/src/js/data-structures/set.js @@ -63,18 +63,8 @@ export default class Set { } isSubsetOf(otherSet) { - if (this.size() > otherSet.size()) { - return false; - } - let isSubset = true; - this.values().every(value => { - if (!otherSet.has(value)) { - isSubset = false; - return false; - } - return true; - }); - return isSubset; + const values = this.values(); + return values.every((value) => otherSet.has(value)); } isEmpty() { diff --git a/src/ts/data-structures/set.ts b/src/ts/data-structures/set.ts index c67faf75..a6d37373 100644 --- a/src/ts/data-structures/set.ts +++ b/src/ts/data-structures/set.ts @@ -75,20 +75,8 @@ export default class Set { } isSubsetOf(otherSet: Set) { - if (this.size() > otherSet.size()) { - return false; - } - - let isSubset = true; - this.values().every(value => { - if (!otherSet.has(value)) { - isSubset = false; - return false; - } - return true; - }); - - return isSubset; + const values = this.values(); + return values.every((value) => otherSet.has(value)); } isEmpty() { From f0fa8e52646200cb026831aefcf0390dcae41a26 Mon Sep 17 00:00:00 2001 From: Jeff Zhang <72734421+jeff-zhenz@users.noreply.github.com> Date: Tue, 17 May 2022 18:16:35 +0800 Subject: [PATCH 172/188] fix: AVL tree insertNode and removeNode functions --- src/js/data-structures/avl-tree.js | 45 +++++------- src/ts/data-structures/avl-tree.ts | 108 +++++++++-------------------- 2 files changed, 53 insertions(+), 100 deletions(-) diff --git a/src/js/data-structures/avl-tree.js b/src/js/data-structures/avl-tree.js index 8ea3cfb9..6b4ee7c0 100644 --- a/src/js/data-structures/avl-tree.js +++ b/src/js/data-structures/avl-tree.js @@ -101,13 +101,13 @@ export default class AVLTree extends BinarySearchTree { insertNode(node, key) { if (node == null) { return new Node(key); - } if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + } + if (this.compareFn(key, node.key) === Compare.LESS_THAN) { node.left = this.insertNode(node.left, key); - } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { - node.right = this.insertNode(node.right, key); } else { - return node; // duplicated key + node.right = this.insertNode(node.right, key); } + // verify if tree is balanced const balanceFactor = this.getBalanceFactor(node); if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) { @@ -116,7 +116,7 @@ export default class AVLTree extends BinarySearchTree { node = this.rotationLL(node); } else { // Left right case - return this.rotationLR(node); + node = this.rotationLR(node); } } if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) { @@ -125,7 +125,7 @@ export default class AVLTree extends BinarySearchTree { node = this.rotationRR(node); } else { // Right left case - return this.rotationRL(node); + node = this.rotationRL(node); } } return node; @@ -136,32 +136,25 @@ export default class AVLTree extends BinarySearchTree { if (node == null) { return node; } + // verify if tree is balanced const balanceFactor = this.getBalanceFactor(node); if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) { - // Left left case - if ( - this.getBalanceFactor(node.left) === BalanceFactor.BALANCED - || this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT - ) { - return this.rotationLL(node); - } - // Left right case - if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) { - return this.rotationLR(node.left); + if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) { + // Left left case + node = this.rotationLL(node); + } else { + // Left right case + node = this.rotationLR(node); } } if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) { - // Right right case - if ( - this.getBalanceFactor(node.right) === BalanceFactor.BALANCED - || this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT - ) { - return this.rotationRR(node); - } - // Right left case - if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) { - return this.rotationRL(node.right); + if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) { + // Right right case + node = this.rotationRR(node); + } else { + // Right left case + node = this.rotationRL(node); } } return node; diff --git a/src/ts/data-structures/avl-tree.ts b/src/ts/data-structures/avl-tree.ts index feb44a19..266e204a 100644 --- a/src/ts/data-structures/avl-tree.ts +++ b/src/ts/data-structures/avl-tree.ts @@ -100,102 +100,62 @@ export default class AVLTree extends BinarySearchTree { protected insertNode(node: Node, key: T) { if (node == null) { return new Node(key); - } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) { + } + if (this.compareFn(key, node.key) === Compare.LESS_THAN) { node.left = this.insertNode(node.left, key); - } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { - node.right = this.insertNode(node.right, key); } else { - return node; // duplicated key + node.right = this.insertNode(node.right, key); } // verify if tree is balanced - const balanceState = this.getBalanceFactor(node); - - if (balanceState === BalanceFactor.UNBALANCED_LEFT) { + const balanceFactor = this.getBalanceFactor(node); + if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) { if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) { // Left left case node = this.rotationLL(node); } else { // Left right case - return this.rotationLR(node); + node = this.rotationLR(node); } } - - if (balanceState === BalanceFactor.UNBALANCED_RIGHT) { + if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) { if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) { // Right right case node = this.rotationRR(node); } else { // Right left case - return this.rotationRL(node); + node = this.rotationRL(node); } } - return node; } protected removeNode(node: Node, key: T) { - if (node == null) { - return null; - } - - if (this.compareFn(key, node.key) === Compare.LESS_THAN) { - // The key to be deleted is in the left sub-tree - node.left = this.removeNode(node.left, key); - } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) { - // The key to be deleted is in the right sub-tree - node.right = this.removeNode(node.right, key); - } else { - // node is the node to be deleted - if (node.left == null && node.right == null) { - node = null; - } else if (node.left == null && node.right != null) { - node = node.right; - } else if (node.left != null && node.right == null) { - node = node.left; - } else { - // node has 2 children, get the in-order successor - const inOrderSuccessor = this.minNode(node.right); - node.key = inOrderSuccessor.key; - node.right = this.removeNode(node.right, inOrderSuccessor.key); - } - } - - if (node == null) { - return node; - } - - // verify if tree is balanced - const balanceState = this.getBalanceFactor(node); - - if (balanceState === BalanceFactor.UNBALANCED_LEFT) { - // Left left case - if ( - this.getBalanceFactor(node.left) === BalanceFactor.BALANCED || - this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT - ) { - return this.rotationLL(node); - } - // Left right case - if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) { - return this.rotationLR(node.left); - } - } - - if (balanceState === BalanceFactor.UNBALANCED_RIGHT) { - // Right right case - if ( - this.getBalanceFactor(node.right) === BalanceFactor.BALANCED || - this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT - ) { - return this.rotationRR(node); - } - // Right left case - if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) { - return this.rotationRL(node.right); - } - } - - return node; + node = super.removeNode(node, key); // {1} + if (node == null) { + return node; + } + + // verify if tree is balanced + const balanceFactor = this.getBalanceFactor(node); + if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) { + if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) { + // Left left case + node = this.rotationLL(node); + } else { + // Left right case + node = this.rotationLR(node); + } + } + if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) { + if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) { + // Right right case + node = this.rotationRR(node); + } else { + // Right left case + node = this.rotationRL(node); + } + } + return node; } } From d079c26c6c229e91f796556521b723bd954925a5 Mon Sep 17 00:00:00 2001 From: NMTuan Date: Mon, 23 May 2022 03:23:17 +0700 Subject: [PATCH 173/188] BinarySearchMCCTesting BinarySearchMCCTesting --- test/js/algorithms/search/binary-search.spec.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/js/algorithms/search/binary-search.spec.js b/test/js/algorithms/search/binary-search.spec.js index 220c1b28..4e4014ce 100644 --- a/test/js/algorithms/search/binary-search.spec.js +++ b/test/js/algorithms/search/binary-search.spec.js @@ -1,4 +1,20 @@ +import { expect } from 'chai'; import { binarySearch } from '../../../../src/js/index'; import { testSearchAlgorithm } from './search-algorithms-tests'; testSearchAlgorithm(binarySearch, 'Binary Search'); + +describe('binarySearch', () => { + it('search elements in array of numbers', () => { + expect(binarySearch([0, 5, 3], 1)).to.equal(-1); + expect(binarySearch([2, 64, 33, 40, 100], 40)).to.equal(2); + expect(binarySearch([1, 2], 2)).to.equal(1); + expect(binarySearch([10, 20, 15, 40, 65], 40)).to.equal(3); + expect(binarySearch([1, 6, 7, 8, 12, 13, 14, 19, 21, 23, 24, 24, 24, 300], 24)).to.equal(10); + expect(binarySearch([1, 2, 3, 610, 800, 1250, 1360, 1400, 1905], 600)).to.equal(-1); + expect(binarySearch([1, 2, 3, 742, 800, 1250, 1360, 1400, 19550], 2)).to.equal(1); + expect(binarySearch([1, 2, 3, 743, 800, 1000, 1335, 1490, 1800], 743)).to.equal(3); + expect(binarySearch([1, 2, 3, 700, 800, 1233, 1380, 1400, 19678], 800)).to.equal(4); + expect(binarySearch([0, 10, 11, 12, 13, 14, 15], 10)).to.equal(1); + }); +}); From 39a439d09caa8295487cc5903601bca894fa0f3c Mon Sep 17 00:00:00 2001 From: VictorAugDB Date: Wed, 25 May 2022 11:10:09 -0300 Subject: [PATCH 174/188] Change URL path where application is running to debug The URL must be http://127.0.0.1:8080/examples instead of http://127.0.0.1:8887/examples --- .vscode/launch.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 8b53d61d..85c3207b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,7 +8,7 @@ "type": "chrome", "request": "launch", "name": "Chrome", - "url": "http://127.0.0.1:8887/examples", + "url": "http://127.0.0.1:8080/examples", "webRoot": "${workspaceRoot}" }, { From 5c21cead6bb1e2ec83e239b5662aee3d05f1ec5e Mon Sep 17 00:00:00 2001 From: VictorAugDB Date: Thu, 26 May 2022 15:58:36 -0300 Subject: [PATCH 175/188] run http-server without cache --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d0ec6c91..db66f5b6 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "generate-report2": "nyc --report-dir coverage npm run test", "go": "npm run clean && npm run lint && npm run build && npm run test", "webpack": "webpack --env build", - "serve": "http-server" + "serve": "http-server -c-1" }, "nyc": { "include": [ From 2904130ea5ed741a4432198219faede6a6282397 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 19:39:42 +0000 Subject: [PATCH 176/188] Bump node-fetch from 2.6.1 to 2.6.7 Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.1 to 2.6.7. - [Release notes](https://github.com/node-fetch/node-fetch/releases) - [Commits](https://github.com/node-fetch/node-fetch/compare/v2.6.1...v2.6.7) --- updated-dependencies: - dependency-name: node-fetch dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3eefb3e9..0182e367 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5215,10 +5215,13 @@ "dev": true }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } }, "node-libs-browser": { "version": "2.2.1", @@ -9648,6 +9651,12 @@ } } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -10601,6 +10610,12 @@ } } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, "webpack": { "version": "4.44.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", @@ -11105,6 +11120,16 @@ } } }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", From f1ff66f48b07b27544f5f0030df706b1c621d0f2 Mon Sep 17 00:00:00 2001 From: Sojin <77185816+SojinSamuel@users.noreply.github.com> Date: Tue, 2 Aug 2022 16:48:25 +0530 Subject: [PATCH 177/188] Found Typographical Error in Documentation Typos Found directoty, depencies, nagivate. Found Literal errors were updated. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index df8c3da9..96845564 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,8 @@ Source code of **Learning JavaScript Data Structures and Algorithms** book, thir ## Installing and running the book examples With Node * Install [Node](https://nodejs.org) -* Open terminal/cmd and change directoty to this project folder: `cd /Users/.../javascript-datastructures-algorithms` (Linux/Max) or `cd C:/.../javascript-datastructures-algorithms` -* run `npm install` to install all depencies +* Open terminal/cmd and change directory to this project folder: `cd /Users/.../javascript-datastructures-algorithms` (Linux/Max) or `cd C:/.../javascript-datastructures-algorithms` +* run `npm install` to install all dependencies * To see the examples, run `http-server html` or `npm run serve`. Open your browser `http:\\localhost:8080` to see the book examples * Or `cd html/chapter01` and run each javascript file with node: `node 02-Variables` @@ -70,7 +70,7 @@ Source code of **Learning JavaScript Data Structures and Algorithms** book, thir * Right click on the html file you would like to see the examples, right click and 'Open with Chrome (or any other browser)' -* Or open the `examples/index.html` file to easily nagivate through all examples: +* Or open the `examples/index.html` file to easily navigate through all examples: * Demo: [https://javascript-ds-algorithms-book.firebaseapp.com](https://javascript-ds-algorithms-book.firebaseapp.com) From a9ba9d84b3798deab8a93d6851852348b0ad2368 Mon Sep 17 00:00:00 2001 From: Yamiqu Date: Thu, 4 Aug 2022 01:46:07 +0800 Subject: [PATCH 178/188] fix: hash-table-linear-probing get function --- src/js/data-structures/hash-table-linear-probing.js | 2 +- src/ts/data-structures/hash-table-linear-probing.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/data-structures/hash-table-linear-probing.js b/src/js/data-structures/hash-table-linear-probing.js index 2b7af8b2..73f70374 100644 --- a/src/js/data-structures/hash-table-linear-probing.js +++ b/src/js/data-structures/hash-table-linear-probing.js @@ -51,7 +51,7 @@ export default class HashTableLinearProbing { index++; } if (this.table[index] != null && this.table[index].key === key) { - return this.table[position].value; + return this.table[index].value; } } return undefined; diff --git a/src/ts/data-structures/hash-table-linear-probing.ts b/src/ts/data-structures/hash-table-linear-probing.ts index 872b4421..fb82d20a 100644 --- a/src/ts/data-structures/hash-table-linear-probing.ts +++ b/src/ts/data-structures/hash-table-linear-probing.ts @@ -54,7 +54,7 @@ export default class HashTableLinearProbing { index++; } if (this.table[index] != null && this.table[index].key === key) { - return this.table[position].value; + return this.table[index].value; } } return undefined; From 0da564facd6edd6c0508e0232fda50cdc34a9a75 Mon Sep 17 00:00:00 2001 From: Lin Jinzhang Date: Sun, 21 Aug 2022 00:09:31 +0800 Subject: [PATCH 179/188] fix: remove useless argument --- examples/chapter09/04-Fibonacci.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/chapter09/04-Fibonacci.js b/examples/chapter09/04-Fibonacci.js index 3b395774..67eae205 100644 --- a/examples/chapter09/04-Fibonacci.js +++ b/examples/chapter09/04-Fibonacci.js @@ -30,7 +30,7 @@ function fibonacciMemoization(n) { const memo = [0, 1]; const fibonacci = (n) => { if (memo[n] != null) return memo[n]; - return memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo); + return memo[n] = fibonacci(n - 1) + fibonacci(n - 2); }; return fibonacci(n); } From 83958762e47fc6d89d870eced0ed83e48253ccae Mon Sep 17 00:00:00 2001 From: bolsonitro Date: Sun, 4 Dec 2022 15:31:13 -0300 Subject: [PATCH 180/188] Change line endings to LF in github --- .gitattributes | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..cdaaeff1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,40 @@ +# Handle line endings automatically for files detected as text +# and leave all files detected as binary untouched. +* text=auto + +# +# The above will handle all files NOT found below +# +# These files are text and should be normalized (Convert crlf => lf) +*.css eol=lf +*.df eol=lf +*.htm eol=lf +*.html eol=lf +*.java eol=lf +*.js eol=lf +*.json eol=lf +*.jsp eol=lf +*.jspf eol=lf +*.jspx eol=lf +*.properties eol=lf +*.sh eol=lf +*.tld eol=lf +*.txt eol=lf +*.tag eol=lf +*.tagx eol=lf +*.xml eol=lf +*.yml eol=lf + +# These files are binary and should be left untouched +# (binary is a macro for -text -diff) +*.class binary +*.dll binary +*.ear binary +*.gif binary +*.ico binary +*.jar binary +*.jpg binary +*.jpeg binary +*.png binary +*.so binary +*.war binary From 29031f0bacc6496407d7bdde31c494a4952d5db0 Mon Sep 17 00:00:00 2001 From: Fernanda Freitas Date: Mon, 10 Apr 2023 10:17:26 -0300 Subject: [PATCH 181/188] Specified the value of 'false' and 'age' within the comment --- examples/chapter01_02/04-TruthyFalsy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/chapter01_02/04-TruthyFalsy.js b/examples/chapter01_02/04-TruthyFalsy.js index c64fa3e1..0090ee74 100644 --- a/examples/chapter01_02/04-TruthyFalsy.js +++ b/examples/chapter01_02/04-TruthyFalsy.js @@ -24,4 +24,4 @@ testTruthy({}); // true (object is always true) var obj = { name: 'John' }; testTruthy(obj); // true testTruthy(obj.name); // true -testTruthy(obj.age); // age (property does not exist) +testTruthy(obj.age); // false (property age does not exist) From eef66c91d347ee17ac5c935627ffa4029cdf3559 Mon Sep 17 00:00:00 2001 From: Oussama Moussaoui Date: Sat, 9 Dec 2023 14:51:29 +0100 Subject: [PATCH 182/188] fix & optimize gcd function - handle gcd of negative numbers - fix the case when one of the numbers is equal to zero, gcd(0, x) = absolute value of x - optimize using modulo instead of repeated subtractions --- src/ts/algorithms/math/gcd.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/ts/algorithms/math/gcd.ts b/src/ts/algorithms/math/gcd.ts index 35818deb..02a6fbbc 100644 --- a/src/ts/algorithms/math/gcd.ts +++ b/src/ts/algorithms/math/gcd.ts @@ -1,14 +1,17 @@ export const gcd = (num1: number, num2: number): number => { - if (num1 === 0 || num2 === 0) { - return 0; + if (num1 < 0 || num2 < 0) { + return gcd(Math.abs(num1), Math.abs(num2)); } - if (num1 === num2) { + if (num1 === 0) { + return num2; + } + if (num2 === 0) { return num1; } if (num1 > num2) { - return gcd(num1 - num2, num2); + return gcd(num1 % num2, num2); } - return gcd(num1, num2 - num1); + return gcd(num1, num2 % num1); }; export const gcdArray = (num: number[]) => { From adaaaf4122a891c3b26f670e09cb593d7491eecd Mon Sep 17 00:00:00 2001 From: Oussama Moussaoui Date: Sat, 9 Dec 2023 15:02:56 +0100 Subject: [PATCH 183/188] update unit tests for gcd function - add more tests to cover edge cases and different scenarios - delete incorrect test (gcd(1, 0) = 0) --- test/ts/algorithms/math/gcd.spec.ts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/test/ts/algorithms/math/gcd.spec.ts b/test/ts/algorithms/math/gcd.spec.ts index fd565a33..75a66ae6 100644 --- a/test/ts/algorithms/math/gcd.spec.ts +++ b/test/ts/algorithms/math/gcd.spec.ts @@ -3,14 +3,26 @@ import { expect } from 'chai'; import { gcd } from '../../../../src/ts/index'; describe('GCD', () => { + it('returns the correct GCD for positive numbers', () => { + expect(gcd(8, 12)).to.equal(4); + expect(gcd(15, 25)).to.equal(5); + expect(gcd(21, 28)).to.equal(7); + }); + + it('returns the correct GCD for negative numbers', () => { + expect(gcd(-8, 12)).to.equal(4); + expect(gcd(15, -25)).to.equal(5); + expect(gcd(-21, -28)).to.equal(7); + }); - it('returns the gcd between two numbers', () => { + it('returns the correct GCD when one of the numbers is 0', () => { + expect(gcd(0, -12)).to.equal(12); + expect(gcd(15, 0)).to.equal(15); + }); - expect(gcd(1, 0)).to.equal(0); - expect(gcd(1, 1)).to.equal(1); - expect(gcd(2, 2)).to.equal(2); - expect(gcd(2, 4)).to.equal(2); - expect(gcd(2, 3)).to.equal(1); - expect(gcd(10, 1000)).to.equal(10); + it('returns 1 for co-prime numbers', () => { + expect(gcd(7, 22)).to.equal(1); + expect(gcd(11, 28)).to.equal(1); + expect(gcd(9, 16)).to.equal(1); }); }); From 60e526994daf1c5d7e2c21fada8bd6b9f13d4faa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 01:42:18 +0000 Subject: [PATCH 184/188] Bump follow-redirects from 1.13.0 to 1.15.4 Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.13.0 to 1.15.4. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.13.0...v1.15.4) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0182e367..172fd2b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3444,9 +3444,9 @@ } }, "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" }, "for-in": { "version": "1.0.2", From cc1ce5de1a90395f4161c0442a67f588ac5a34d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 22:14:58 +0000 Subject: [PATCH 185/188] Bump browserify-sign from 4.2.1 to 4.2.2 Bumps [browserify-sign](https://github.com/crypto-browserify/browserify-sign) from 4.2.1 to 4.2.2. - [Changelog](https://github.com/browserify/browserify-sign/blob/main/CHANGELOG.md) - [Commits](https://github.com/crypto-browserify/browserify-sign/compare/v4.2.1...v4.2.2) --- updated-dependencies: - dependency-name: browserify-sign dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 69 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 172fd2b4..7cc1b011 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1500,12 +1500,6 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1596,26 +1590,65 @@ } }, "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "dev": true, "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.4", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" }, "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "requires": { "inherits": "^2.0.3", From 084212758c3cb25929221e23c59ef1369c85fc9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 22:15:01 +0000 Subject: [PATCH 186/188] Bump @babel/traverse from 7.12.1 to 7.23.9 Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.12.1 to 7.23.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.9/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 294 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 227 insertions(+), 67 deletions(-) diff --git a/package-lock.json b/package-lock.json index 172fd2b4..0619de3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,53 +13,51 @@ "@babel/highlight": "^7.10.4" } }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.22.5" }, "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/types": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true } } }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true }, "@babel/helper-validator-identifier": { "version": "7.10.4", @@ -121,38 +119,134 @@ "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", "dev": true }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + } + }, + "@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "requires": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "dev": true + }, + "@babel/template": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" + } + }, + "@babel/types": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -163,6 +257,33 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true } } }, @@ -185,6 +306,45 @@ } } }, + "@jridgewell/gen-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", + "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", From dcf995f74f7494c2cf5241db0ad0a66601b2d998 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 22:15:25 +0000 Subject: [PATCH 187/188] Bump async from 2.6.3 to 2.6.4 Bumps [async](https://github.com/caolan/async) from 2.6.3 to 2.6.4. - [Release notes](https://github.com/caolan/async/releases) - [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md) - [Commits](https://github.com/caolan/async/compare/v2.6.3...v2.6.4) --- updated-dependencies: - dependency-name: async dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 172fd2b4..3cee72e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -645,9 +645,9 @@ "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { "lodash": "^4.17.14" } @@ -4373,7 +4373,7 @@ "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", "dev": true } } @@ -5410,10 +5410,6 @@ "bundled": true, "dev": true }, - "async": { - "version": "1.5.2", - "bundled": true - }, "atob": { "version": "2.1.1", "bundled": true, From fa69786b3832a2956c9634d7f0e2913d1b323ffe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 16 Mar 2024 23:28:45 +0000 Subject: [PATCH 188/188] Bump follow-redirects from 1.15.4 to 1.15.6 Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 03715898..afb891a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3637,9 +3637,9 @@ } }, "follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, "for-in": { "version": "1.0.2",