diff --git a/JavaScript/chapter01/1.1 - Is Unique/solution.js b/JavaScript/chapter01/1.1 - Is Unique/solution.js index fd26591..ec83850 100644 --- a/JavaScript/chapter01/1.1 - Is Unique/solution.js +++ b/JavaScript/chapter01/1.1 - Is Unique/solution.js @@ -3,8 +3,14 @@ Input: takes an array of integers Output: returns a deduped array of integers */ -// Solution using Set +// Solution using Set const isUnique = (arr) => [...new Set(arr)]; // Test Cases -console.log(isUnique([1,1,1,2,2,2,2,3,3,3,3]) === [1,2,3]); \ No newline at end of file +const assert = require('assert'); + +describe(module.filename, () => { + it('should deduplicate array', () => { + assert.deepEqual(isUnique([1,1,1,2,2,2,2,3,3,3,3]), [1,2,3]); + }); +}); diff --git a/JavaScript/chapter01/1.2 - Check Perm/rroque98_sol.js b/JavaScript/chapter01/1.2 - Check Perm/rroque98_sol.js index 3ea7c7f..2bf3d7a 100644 --- a/JavaScript/chapter01/1.2 - Check Perm/rroque98_sol.js +++ b/JavaScript/chapter01/1.2 - Check Perm/rroque98_sol.js @@ -25,10 +25,19 @@ const isPermutation = (str1, str2) => { }; // Tests: -console.log(isPermutation('abc', 'abb') === false); -console.log(isPermutation('abb', 'abc') === false); -console.log(isPermutation('aaa', 'abc') === false); -console.log(isPermutation('abc', 'abcd') === false); -console.log(isPermutation('abc', 'bac') === true); -console.log(isPermutation('', '') === true); -console.log(isPermutation('12', '21') === true); +const assert = require('assert'); + +describe(module.filename, () => { + it('should handle positive cases', () => { + assert.equal(isPermutation('abc', 'bac'), true); + assert.equal(isPermutation('', ''), true); + assert.equal(isPermutation('12', '21'), true); + }); + + it('should handle negative cases', () => { + assert.equal(isPermutation('abc', 'abb'), false); + assert.equal(isPermutation('abb', 'abc'), false); + assert.equal(isPermutation('aaa', 'abc'), false); + assert.equal(isPermutation('abc', 'abcd'), false); + }); +}); diff --git a/JavaScript/chapter01/1.3 - URLify/rroque98_sol.js b/JavaScript/chapter01/1.3 - URLify/rroque98_sol.js index 4e54494..14556ac 100644 --- a/JavaScript/chapter01/1.3 - URLify/rroque98_sol.js +++ b/JavaScript/chapter01/1.3 - URLify/rroque98_sol.js @@ -3,6 +3,12 @@ const encodeSpaces = (string) => string.replace(/ /g, '%20'); // Tests: -console.log(encodeSpaces('Hello World') === 'Hello%20World'); -console.log(encodeSpaces('') === ''); -console.log(encodeSpaces('This is an example') === 'This%20is%20an%20example'); +const assert = require('assert'); + +describe(module.filename, () => { + it('should replace spaces with %20', () => { + assert.equal(encodeSpaces('Hello World'), 'Hello%20World'); + assert.equal(encodeSpaces(''), ''); + assert.equal(encodeSpaces('This is an example'), 'This%20is%20an%20example'); + }); +}); diff --git a/JavaScript/chapter01/1.3 - URLify/solution.js b/JavaScript/chapter01/1.3 - URLify/solution.js index bba89b9..46cb56f 100644 --- a/JavaScript/chapter01/1.3 - URLify/solution.js +++ b/JavaScript/chapter01/1.3 - URLify/solution.js @@ -2,31 +2,32 @@ function URLify(arr, len) { let spaces = 0; for(let i = 0; i < len; i++) { - if(arr[i] === ' ') spaces++; - } + if(arr[i] === ' ') spaces++; + } //last index let index = len + spaces * 2 - 1; for(let i = len - 1; i >= 0; i--) { if(arr[i] === ' ') { - arr[index] = '0'; + arr[index] = '0'; arr[index - 1] = '2'; arr[index - 2] = '%'; index -= 3 } else { arr[index] = arr[i]; index--; - } + } } return arr; } //testing -let arr = ['M', 'r', ' ', 'J', 'o', 'h', 'n', ' ', 'S', 'm', 'i', 't', 'h', ' ', ' ', ' ', ' ']; - -//before -console.log(arr); -let ans = URLify(arr, 13); +const assert = require('assert'); -//after -console.log(ans); +describe(module.filename, () => { + it('should correctly URLify', () => { + let arr = ['M', 'r', ' ', 'J', 'o', 'h', 'n', ' ', 'S', 'm', 'i', 't', 'h', ' ', ' ', ' ', ' ']; + let expected = ['M', 'r', '%', '2', '0', 'J', 'o', 'h', 'n', '%', '2', '0', 'S', 'm', 'i', 't', 'h']; + assert.deepEqual(URLify(arr, 13), expected); + }); +}); diff --git a/JavaScript/chapter01/1.4 - PalinPerm/rroque98_sol.js b/JavaScript/chapter01/1.4 - PalinPerm/rroque98_sol.js index 1a1e2e4..4c44915 100644 --- a/JavaScript/chapter01/1.4 - PalinPerm/rroque98_sol.js +++ b/JavaScript/chapter01/1.4 - PalinPerm/rroque98_sol.js @@ -19,7 +19,16 @@ const isPalindromePermutation = (str) => { return true; } -console.log(isPalindromePermutation('tact coa') === true); -console.log(isPalindromePermutation('tact cooa') === true); -console.log(isPalindromePermutation('tacr coa') === false); -console.log(isPalindromePermutation('tactr coa') === false); +const assert = require('assert'); + +describe(module.filename, () => { + it('should handle positive cases', () => { + assert.equal(isPalindromePermutation('tact coa'), true); + assert.equal(isPalindromePermutation('tact cooa'), true); + }); + + it('should handle negative cases', () => { + assert.equal(isPalindromePermutation('tacr coa'), false); + assert.equal(isPalindromePermutation('tactr coa'), false); + }); +}); diff --git a/JavaScript/chapter01/1.5 - OneAway/rroque98_sol.js b/JavaScript/chapter01/1.5 - OneAway/rroque98_sol.js index 39ee6ba..7db9dbd 100644 --- a/JavaScript/chapter01/1.5 - OneAway/rroque98_sol.js +++ b/JavaScript/chapter01/1.5 - OneAway/rroque98_sol.js @@ -35,38 +35,44 @@ const isOneAway = (str1, str2) => { return true; }; -// ****** TESTS ****** +const assert = require('assert'); + function runTests(cases, expected) { for (const [str1, str2] of cases) { - console.log( - isOneAway(str1, str2) === expected && isOneAway(str2, str1) === expected - ); + assert.equal(isOneAway(str1, str2), expected); + assert.equal(isOneAway(str2, str1), expected); } } -runTests( - [ - ['pale', 'ple'], // deletion - ['pale', 'opale'], // insertion in beginning - ['pale', 'palse'], // insertion in middle - ['pale', 'pales'], // insertion at end - ['pale', 'bale'], // replacement - ['p', 'b'], - ['p', 'p'], - ['p', ''], - ['', ''] - ], - true -); +describe(module.filename, () => { + it('should handle positive cases', () => { + runTests( + [ + ['pale', 'ple'], // deletion + ['pale', 'opale'], // insertion in beginning + ['pale', 'palse'], // insertion in middle + ['pale', 'pales'], // insertion at end + ['pale', 'bale'], // replacement + ['p', 'b'], + ['p', 'p'], + ['p', ''], + ['', ''] + ], + true + ); + }); -runTests( - [ - ['pale', 'ae'], // greater than 1 deletions - ['pale', 'ppalpe'], // greater than 1 insertions - ['pale', 'bake'], // greater than 1 replacements - ['pale', 'balpe'], // 1 insertion, 1 replacement - ['pale', 'plo'], // 1 deletion, 1 replacement - ['pale', 'ales'] // 1 deletion, 1 insertion - ], - false -); + it('should handle negative cases', () => { + runTests( + [ + ['pale', 'ae'], // greater than 1 deletions + ['pale', 'ppalpe'], // greater than 1 insertions + ['pale', 'bake'], // greater than 1 replacements + ['pale', 'balpe'], // 1 insertion, 1 replacement + ['pale', 'plo'], // 1 deletion, 1 replacement + ['pale', 'ales'] // 1 deletion, 1 insertion + ], + false + ); + }); +}); diff --git a/JavaScript/chapter01/1.6 - String Compression/rroque98_sol.js b/JavaScript/chapter01/1.6 - String Compression/rroque98_sol.js index 86b27f1..b7e2270 100644 --- a/JavaScript/chapter01/1.6 - String Compression/rroque98_sol.js +++ b/JavaScript/chapter01/1.6 - String Compression/rroque98_sol.js @@ -29,10 +29,18 @@ const stringCompression = (str) => { return compStr; } -// TESTS -console.log(stringCompression('aabcccccaaa') === 'a2b1c5a3'); -console.log(stringCompression('cccccccc') === 'c8'); -console.log(stringCompression('') === ''); -console.log(stringCompression('AabccCccaaa') === 'AabccCccaaa'); -// Explanation: 'A1a1b1c2C1c2a3' length is longer than original string so returns original string -console.log(stringCompression('x') === 'x'); +const assert = require('assert'); + +describe(module.filename, () => { + it('should correctly compress longer strings', () => { + assert.equal(stringCompression('aabcccccaaa'), 'a2b1c5a3'); + assert.equal(stringCompression('cccccccc'), 'c8'); + }); + + it('should leave uncompressible strings unmodified', () => { + assert.equal(stringCompression(''), ''); + // Explanation: 'A1a1b1c2C1c2a3' length is longer than original string so returns original string + assert.equal(stringCompression('AabccCccaaa'), 'AabccCccaaa'); + assert.equal(stringCompression('x'), 'x'); + }); +}); diff --git a/JavaScript/chapter01/1.7 - Rotate Matrix/rroque98_sol.js b/JavaScript/chapter01/1.7 - Rotate Matrix/rroque98_sol.js index 0faf2dd..d1233d0 100644 --- a/JavaScript/chapter01/1.7 - Rotate Matrix/rroque98_sol.js +++ b/JavaScript/chapter01/1.7 - Rotate Matrix/rroque98_sol.js @@ -20,10 +20,16 @@ const rotateImage = nestedArr => { }; // TESTS: -console.log( - JSON.stringify(rotateImage([[1, 2, 3], [4, 5, 6], [7, 8, 9]])) === - JSON.stringify([[7, 4, 1], [8, 5, 2], [9, 6, 3]]) -); -console.log(JSON.stringify(rotateImage([[1]])) === JSON.stringify([[1]])); -console.log(JSON.stringify(rotateImage([[]])) === JSON.stringify([[]])); -console.log(JSON.stringify(rotateImage([])) === JSON.stringify([])); +const assert = require('assert'); + +describe(module.filename, () => { + it('should rotate matrices', () => { + assert.deepEqual( + rotateImage([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), + [[7, 4, 1], [8, 5, 2], [9, 6, 3]] + ); + assert.deepEqual(rotateImage([[1]]), [[1]]); + assert.deepEqual(rotateImage([[]]), [[]]); + assert.deepEqual(rotateImage([]), []); + }); +}); diff --git a/JavaScript/chapter01/1.8 - Zero Matrix/rroque98_sol.js b/JavaScript/chapter01/1.8 - Zero Matrix/rroque98_sol.js index 3dde527..9e5613b 100644 --- a/JavaScript/chapter01/1.8 - Zero Matrix/rroque98_sol.js +++ b/JavaScript/chapter01/1.8 - Zero Matrix/rroque98_sol.js @@ -34,43 +34,38 @@ function checkForZeroIndex(nestArr) { } // **** TESTS ****: -let actual = zeroMatrix([[]]); -let expected = [[]]; -isEqual(actual, expected); +const assert = require('assert'); -actual = zeroMatrix([[3, 5, 6], [1, 0, 2], [4, 4, 5], [2, 2, 2]]); -expected = [[3, 0, 6], [0, 0, 0], [4, 0, 5], [2, 0, 2]]; -isEqual(actual, expected); +describe(module.filename, () => { + it('should correctly zero out matrices', () => { + let actual = zeroMatrix([[]]); + let expected = [[]]; + assert.deepEqual(actual, expected); -actual = zeroMatrix([[3, 5, 6], [1, 0, 2], [4, 4, 0], [2, 0, 2]]); -expected = [[3, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]; -isEqual(actual, expected); + actual = zeroMatrix([[3, 5, 6], [1, 0, 2], [4, 4, 5], [2, 2, 2]]); + expected = [[3, 0, 6], [0, 0, 0], [4, 0, 5], [2, 0, 2]]; + assert.deepEqual(actual, expected); -actual = zeroMatrix([[3, 5, 6], [0, 0, 2], [4, 4, 0], [2, 0, 2]]); -expected = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]; -isEqual(actual, expected); + actual = zeroMatrix([[3, 5, 6], [1, 0, 2], [4, 4, 0], [2, 0, 2]]); + expected = [[3, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]; + assert.deepEqual(actual, expected); -function isEqual(actual, expected) { - console.log(JSON.stringify(actual) === JSON.stringify(expected)); -} - -// ****HELPER FUNCTION TESTS ****: -actual = checkForZeroIndex([[1, 2, 0]]); -expected = { rows: { 0: true }, columns: { 2: true } }; -testCheckForZeroIndex(actual, expected); + actual = zeroMatrix([[3, 5, 6], [0, 0, 2], [4, 4, 0], [2, 0, 2]]); + expected = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]; + assert.deepEqual(actual, expected); + }); -actual = checkForZeroIndex([[0]]); -expected = { rows: { 0: true }, columns: { 0: true } }; -testCheckForZeroIndex(actual, expected); + it('should correctly find zero indices', () => { + actual = checkForZeroIndex([[1, 2, 0]]); + expected = { rows: { 0: true }, columns: { 2: true } }; + assert.deepEqual(actual, expected); -actual = checkForZeroIndex([[1, 2, 3], [4, 0, 5], [6, 0, 8]]); -expected = { rows: { 1: true, 2: true }, columns: { 1: true } }; -testCheckForZeroIndex(actual, expected); + actual = checkForZeroIndex([[0]]); + expected = { rows: { 0: true }, columns: { 0: true } }; + assert.deepEqual(actual, expected); -function testCheckForZeroIndex(actual, expected) { - let rows = JSON.stringify(actual.rows); - let cols = JSON.stringify(actual.columns); - let expRows = JSON.stringify(expected.rows); - let expCols = JSON.stringify(expected.columns); - console.log(rows === expRows && cols === expCols); -} + actual = checkForZeroIndex([[1, 2, 3], [4, 0, 5], [6, 0, 8]]); + expected = { rows: { 1: true, 2: true }, columns: { 1: true } }; + assert.deepEqual(actual, expected); + }); +}); diff --git a/JavaScript/chapter01/1.9 - String Rotation/solution.js b/JavaScript/chapter01/1.9 - String Rotation/solution.js index 046cda1..045ed96 100644 --- a/JavaScript/chapter01/1.9 - String Rotation/solution.js +++ b/JavaScript/chapter01/1.9 - String Rotation/solution.js @@ -4,10 +4,16 @@ call to isSubstring (e.g., "waterbottle" is a rotation of"erbottlewat") */ var StringRotate = function(string1, string2) { if (string1.length !== string2.length ){ - return false; + return false; } return ( string2 + string1 ).includes(string1); // one call of Substring }; -//Test -console.log(StringRotate('waterbottle', 'erbottlewat'), true); +//Test +const assert = require('assert'); + +describe(module.filename, () => { + it('should detect rotated substrings', () => { + assert.equal(StringRotate('waterbottle', 'erbottlewat'), true); + }); +}); diff --git a/JavaScript/chapter02/2.2 - Return Kth to Last/solution.js b/JavaScript/chapter02/2.2 - Return Kth to Last/solution.js index f5c132e..533a1af 100644 --- a/JavaScript/chapter02/2.2 - Return Kth to Last/solution.js +++ b/JavaScript/chapter02/2.2 - Return Kth to Last/solution.js @@ -1,40 +1,46 @@ /* Return Kth to Last: Implement an algorithm to find the kth to last element of a singly linked list. */ var linkedList = function(value) { - this.value = value; - this.next = null; + this.value = value; + this.next = null; }; +// N.B. this algorithm is wrong, since it does not produce the desired result. var findKthToLast = function(k, head) { //do recursive if ( head == null || k < 1 ) { - return; + return null; } else if ( k == 1 ) { - console.log(head.value); - findKthToLast(k, head.next) + return head.value; } else { - findKthToLast( k-1, head.next); + return findKthToLast(k-1, head.next); } }; -/* Tests */ -var a = new linkedList('1'); -var b = new linkedList('2'); -var c = new linkedList('3'); -var d = new linkedList('4'); -var e = new linkedList('5'); -var f = new linkedList('6'); -var g = new linkedList('7'); +/* Tests */ +const assert = require('assert'); -a.next = b; -b.next = c; -c.next = d; -d.next = e; -e.next = f; -f.next = g; +describe(module.filename, () => { + it('should find k-th to last entry', () => { + var a = new linkedList('1'); + var b = new linkedList('2'); + var c = new linkedList('3'); + var d = new linkedList('4'); + var e = new linkedList('5'); + var f = new linkedList('6'); + var g = new linkedList('7'); -findKthToLast(3, a); -findKthToLast(10, a); -findKthToLast(-1, a); -findKthToLast(0, a); -findKthToLast(1, a); + a.next = b; + b.next = c; + c.next = d; + d.next = e; + e.next = f; + f.next = g; + + assert.equal(findKthToLast(3, a), '3'); + assert.equal(findKthToLast(10, a), null); + assert.equal(findKthToLast(-1, a), null); + assert.equal(findKthToLast(0, a), null); + assert.equal(findKthToLast(1, a), '1'); + }); +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d7d34f7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,781 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, + "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.0" + } + }, + "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.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "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" + } + }, + "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 + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-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 + }, + "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" + } + }, + "strip-ansi": { + "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" + } + } + } + }, + "color-convert": { + "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.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 + }, + "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 + }, + "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" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "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, + "requires": { + "object-keys": "^1.0.12" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "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 + }, + "es-abstract": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", + "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "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, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "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 + }, + "esprima": { + "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 + }, + "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" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "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 + }, + "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 + }, + "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" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has": { + "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.1.1" + } + }, + "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-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "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.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + }, + "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-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 + }, + "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-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "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" + } + }, + "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=", + "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" + } + }, + "mocha": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.1.tgz", + "integrity": "sha512-VCcWkLHwk79NYQc8cxhkmI8IigTIhsCwZ6RTxQsqK6go4UvEhzJkYuHm8B2YtlSxcYq2fY+ucr4JBwoD6ci80A==", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.0", + "yargs-parser": "13.1.1", + "yargs-unparser": "1.6.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 + }, + "node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "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 + }, + "object-keys": { + "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.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.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" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "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.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "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 + }, + "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": "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.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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 + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "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" + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "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-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": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "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" + } + }, + "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 + }, + "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, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.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 + }, + "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" + } + }, + "strip-ansi": { + "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" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "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": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "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.1.1" + }, + "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 + }, + "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" + } + }, + "strip-ansi": { + "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" + } + } + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e7023a1 --- /dev/null +++ b/package.json @@ -0,0 +1,9 @@ +{ + "homepage": "https://github.com/techqueria/data-structures-and-algorithms/", + "devDependencies": { + "mocha": "^6.2.1" + }, + "scripts": { + "test": "mocha --recursive 'JavaScript/**/*.js'" + } +}