Compare commits

...

85 Commits

Author SHA1 Message Date
Austin b8b1ae4eda
Merge pull request #396 from jamienorthman/main
10_fibonacci: handling of string zero & update of tests
2023-12-12 21:04:42 +00:00
Alex Younger a27f66263a
Merge branch 'main' into main 2023-11-15 20:39:53 -05:00
Eric Olkowski a3992aa0de
Merge pull request #409 from Luislev/main
10_fibonacci: Add alternative solution in fibonacci-solution.js
2023-11-11 07:17:33 -05:00
Luis Leiva 123e00d933
Add alternative solution in fibonacci-solution.js 2023-11-07 21:27:27 -05:00
Luis Leiva 908c4ed26e
Update fibonacci-solution.js 2023-11-05 23:12:41 -05:00
Jamienorthman 80ca665767 added explicit conversion to number for fibonacci solution 2023-10-29 12:36:58 +01:00
Miko 4a03e410bf
More consistent spelling in 10_fibonacci
Co-authored-by: Alex Younger <61510135+fortypercenttitanium@users.noreply.github.com>
2023-10-29 11:52:01 +01:00
Miko 38f0da9643
More consistent spelling in 10_fibonacci
Co-authored-by: Alex Younger <61510135+fortypercenttitanium@users.noreply.github.com>
2023-10-29 11:51:42 +01:00
Austin Sullivan 157972d135
Merge pull request #379 from TheOdinProject/dependabot/npm_and_yarn/generator-exercise/semver-and-nsp-5.7.2
Bump semver and nsp in /generator-exercise
2023-09-24 11:34:04 -04:00
dependabot[bot] b469739659
Bump semver and nsp in /generator-exercise
Bumps [semver](https://github.com/npm/node-semver) to 5.7.2 and updates ancestor dependency [nsp](https://github.com/nodesecurity/nsp). These dependencies need to be updated together.


Updates `semver` from 5.4.1 to 5.7.2
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v5.4.1...v5.7.2)

Updates `nsp` from 2.7.0 to 3.2.1
- [Commits](https://github.com/nodesecurity/nsp/compare/v2.7.0...v3.2.1)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
- dependency-name: nsp
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-24 15:28:31 +00:00
Austin Sullivan 406b1667aa
Merge pull request #392 from fabulousgk/fabulousgk/issue250
Javascript exercises - Update package.json and package-lock to latest module versions
2023-09-24 11:17:05 -04:00
Miko e5c0f77d21
Fixed usage of test (skip all but first) in exercise 2023-09-18 23:11:41 +02:00
Miko 3b84151724
Fixed usage of test (no skip) in solution 2023-09-18 23:11:09 +02:00
Miko 59a2f1ce47
Added test case for string 0 2023-09-18 23:06:51 +02:00
Miko 5ac1931f72
Added test cases for 0 and string 0 2023-09-18 23:06:29 +02:00
Miko f2c0d0955b
Added handling of string case for 0 2023-09-18 23:01:33 +02:00
Brian Lister bb78d163fc
Add note about packages out of date
Related to: NPM Vulnerabilities Warning #250
2023-08-24 21:35:07 -05:00
Brian Lister 59d27bf89f
Update NPM packages to latest versions
Related to #250
2023-08-24 21:28:42 -05:00
Cody Loyd 85a9d56fde
Merge pull request #391 from TheOdinProject/revert-389-main
Revert "generator-exercise: Update name"
2023-08-23 17:25:26 -05:00
Carlos Diaz 7037c2c37c
Revert "generator-exercise: Update name" 2023-08-23 12:54:07 -07:00
Carlos Diaz 12f8ffc7e2
Merge pull request #389 from the-hdr/main
generator-exercise: Update name
2023-08-23 12:27:36 -07:00
Mohd Abbas Haidar dd7078e1be Change name
Changed name of directory generator-exercise to exercise-generator so that students don't confuse it for an exercise
2023-08-20 23:49:29 +05:30
Manon dd9a83068d
Merge pull request #383 from RushilJalal/fix_Fibonacci_README
10_fibonacci: Update README.md
2023-08-01 14:27:55 +02:00
Rushil Jalal 43a8b165b4
Update 10_fibonacci/README.md
Co-authored-by: Manon <81025586+ManonLef@users.noreply.github.com>
2023-08-01 13:13:38 +05:30
Rushil Jalal 6d5f678ffc
Merge branch 'TheOdinProject:main' into fix_Fibonacci_README 2023-07-30 10:42:45 +05:30
Eric Olkowski cdba6da97b
Merge pull request #368 from cats256/patch-1
Update sumAll-solution.js swap algorithm to standard method
2023-07-29 17:38:39 -04:00
Will f5f6efae9b
Update sumAll-solution.js 2023-07-29 15:40:07 -05:00
Will 5513be576a
Update sumAll-solution.js 2023-07-29 15:39:33 -05:00
Rushil Jalal 631d24936b Update README.md 2023-07-28 19:49:32 +05:30
Rushil Jalal c9ad976fcb Update README.md 2023-07-28 19:32:21 +05:30
01zulfi 191a43a192
Merge pull request #340 from RyanMcEntire/getting_older_test_wording
12_findTheOldest: Clarify test descriptions
2023-07-27 18:11:47 +05:00
Eric Olkowski 2ca07161fd
Merge pull request #382 from RushilJalal/fix_Fibonacci_README
10_fibonacci: Update README.md
2023-07-25 07:00:10 -04:00
Rushil Jalal c77daf3fa9 Fix README.md Fibonacci series example 2023-07-24 23:37:21 +05:30
Eric Olkowski 9599e2ade3
Merge pull request #369 from cats256/cats256-branch
Reformat test parameters for consistency
2023-07-20 18:28:53 -04:00
Will 44e39f0412
Update calculator-solution.js 2023-07-16 16:06:25 -05:00
Will 1dae9df3ce
Update calculator-solution.spec.js 2023-07-16 16:02:28 -05:00
Will f855eb51b2
Update calculator-solution.spec.js 2023-07-16 16:02:03 -05:00
Will e10ee035ad
Update calculator.spec.js 2023-07-16 15:59:50 -05:00
Austin e3810865cf
Merge pull request #378 from Roberra0/ex12_ReadmeClarified
Ex12 readme clarified
2023-07-12 08:27:24 +01:00
Roberra Aklilu 100f952f7a
Update README.md with minor word change 2023-07-10 17:21:52 -07:00
Roberra Aklilu e6c4530aa9
Update ex12_findTheOldest README.md
Added clarification to instruct learner to look in test case to understand object structure
2023-07-10 17:09:29 -07:00
01zulfi 15f1b82b57
Merge pull request #370 from cats256/patch-2
Update fibonacci-solution.js
2023-07-07 08:47:24 +05:00
Nathan 51572a070c
Update fibonacci-solution.js 2023-07-06 09:47:20 -05:00
Austin f164d790da
Merge pull request #372 from Asartea/patch-1
Fix: change requirement to reflect solutions change
2023-07-06 09:11:44 +01:00
Nathan fcb1c4971a
Update fibonacci-solution.js 2023-07-05 09:15:36 -05:00
Asartea 051c0ed9ca
CONTRIBUTING.md: repoint contributing links to .github/CONTRIBUTING.md (#371)
* repoint contributing links to .github/CONTRIBUTING.md

* drop mention of which repo it is
2023-07-05 22:41:21 +10:00
Asartea bab1364ea8
Fix: change requirement to reflect solutions change 2023-07-05 13:50:13 +02:00
cats256 76551b0e8a
Update fibonacci-solution.js
Better O(n) time
2023-07-04 12:07:04 -05:00
cats256 03e52ea9ee Improve sum and multiply functions solution code 2023-07-04 11:55:08 -05:00
cats256 075fe8eea2 Reformat test parameters for consistency 2023-07-04 11:38:40 -05:00
cats256 3ecdab9531
Update sumAll-solution.js 2023-07-03 22:58:19 -05:00
cats256 415ff48c20
Update sumAll-solution.js
Change the swapping algorithm to the standard way of swapping using array restructuring.
2023-07-03 22:52:46 -05:00
Manon 5a7cd9b162
Merge pull request #367 from ManonLef/kbd 2023-07-02 09:01:22 +02:00
Manon 37f85db108 JS exercises README: change shortcuts to kbd format 2023-07-01 16:09:59 +02:00
Austin 61c86e11b6
Merge pull request #365 from Sama-004/patch-1
`03_reverString: Updated README.md to add unskipping the skipped test cases`
2023-06-28 14:22:37 +01:00
samanyu f98ee210e0
Made the file name sentence more readable
Made changes according to the review, made the file name more readable and some minor grammatical changes.
2023-06-28 17:34:00 +05:30
samanyu 5c1853e1e9
Updated README.md to add unskipping the skipped test cases
Just like it was mentioned in the previous exercise to remove the .skip from test.skip() in the spec.js file.
2023-06-28 08:43:15 +05:30
Cody Loyd 25013df6ac
Merge pull request #357 from marlatte/fibonacci_palindromes_fixes
09_palindrome and 10_fibonacci: Update solutions
2023-06-08 07:15:50 -05:00
Cody Loyd 8692f0ea18
Merge pull request #364 from fruddenfeldt/dev
New solution to match updated test syntax
2023-06-07 14:56:36 -05:00
fruddenfeldt 175ee761e1
Update calculator-solution.js 2023-06-07 19:58:54 +02:00
Cody Loyd 6b302e3783
Merge pull request #359 from fruddenfeldt/patch-1
Removed array syntax in multiply test
2023-06-07 08:45:00 -05:00
fruddenfeldt 80f7881a26
New solution to match updated test syntax
See separate PR "Removed array syntax in multiply test #359"  

https://github.com/TheOdinProject/javascript-exercises/pull/359
2023-06-06 23:01:36 +02:00
fruddenfeldt b6e9e2fac3
Removed array syntax in multiply test
The test for the 'multiply' function used array brackets [] for the input parameters, which caused the test to return an error when rest parameters (...args) are used in the function, like so:

const multiply = function(...args){
  return args.reduce((acc, cur) => acc * cur);
}
2023-05-22 21:08:37 +02:00
MarLatte fd1e1f93d1 Merge branch 'fibonacci_palindromes_fixes' of github.com:marlatte/javascript-exercises into fibonacci_palindromes_fixes 2023-05-20 03:10:37 -04:00
MarLatte 0d75cc0814 Update palindrome test to match solution test 2023-05-20 03:07:57 -04:00
MarLatte e8fc8ce41e Update palindromes to handle numbers better
The previous solution removed numbers entirely, whereas this one treats
them like letters and checks if they are evenly spaced.

More importantly, the old solution test seemed to check if the numbers
were palindromic, but because the solution replaced them with "", it
wasn't testing what it seemed to.

I added a new test to differentiate between the palindromic "rac3e3car"
and the non-palindromic "r3ace3car".

These changes also obviate the problems raised in Issue #355.
2023-05-20 02:47:17 -04:00
MarLatte 41380593f7 Update palindromes to handle numbers better
The previous solution removed numbers entirely, whereas this one treats
them like letters and checks if they are evenly spaced.

More importantly, the old solution test seemed to check if the numbers
were palindromic, but because the solution replaced them with "", it
wasn't testing what it seemed to.

I added a new test to differentiate between the palindromic "rac3e3car"
and the non-palindromic "r3ace3car".
2023-05-20 02:37:41 -04:00
MarLatte 3256f980b0 Update Fibonacci solution, test to focus on arrays
Previous Fibonacci solution didn't use arrays, and since this is an
array-heavy section, it seemed better to have that be the method here.

Also, it accounts for entering 0 as an argument without having to add
any extra code, which takes care of some currently open issues.
Issues #192 and #236 are about the same thing.

I added a test for that as well.
2023-05-20 02:22:12 -04:00
Eric Olkowski 3e530e3f61
Merge pull request #341 from thatblindgeye/updatePalindromes
09_palindromes: update solution test file
2023-04-08 15:51:19 -04:00
Eric Olkowski 6bb8b1397d
Merge pull request #321 from Alex-Nemet/fix_typo_readme
Readme.md: fix spelling
2023-04-08 15:48:15 -04:00
thatblindgeye 045f1b0306 Update solutions file for palindrome 2023-04-08 15:44:15 -04:00
Eric Olkowski 34d63cc59d
Merge pull request #320 from mariustelcean96/patch-2
09_palindromes: Add test for strings with numbers
2023-04-08 15:42:52 -04:00
Ryan McEntire 197a716eb0 reword test description to be less tautological and more clear 2023-04-06 18:41:30 -06:00
Kevin Mulhern 029cf3ffcd
Merge pull request #338 from TheOdinProject/KevinMulhern-patch-2
Create LICENSE
2023-03-28 08:26:14 +01:00
Kevin Mulhern 378921289b
Create LICENSE
Because:
* This repo does not have a licence

This commit:
* Add the MIT licence
2023-03-25 15:49:30 +00:00
Kevin Mulhern cface9db19
Merge pull request #337 from TheOdinProject/revert-license
Revert "Create LICENSE"
2023-03-25 15:48:02 +00:00
Kevin 736cae8b06 Revert "Create LICENSE"
This reverts commit e63e0bf296.
2023-03-25 15:46:09 +00:00
Kevin Mulhern e63e0bf296
Create LICENSE
Because:
* This repo did not have a licence

This commit:
* Add MIT Licence
2023-03-25 15:44:27 +00:00
Alex-Nemet 614b8b8c35
Merge branch 'main' into fix_typo_readme 2023-03-22 12:59:21 -07:00
Asartea 75869d1912
Mark caesar as archived and move archived exercise to own folder (#336) 2023-03-18 16:45:37 -05:00
jhylacey 6f5f71ff5b
Remove redundant wording in reverse string README 2023-03-18 14:14:44 -05:00
Kevin Mulhern ea1f23639c
Merge pull request #329 from TheOdinProject/test-workflow
Add circleci config file
2023-03-05 11:59:59 +00:00
01zulfi 99d0e8a71a Add circleci config file
* We can use circleci to test all spec files in solution subdirectories
2023-02-20 19:10:10 +05:00
Alex Nemet 84d537f130 Correct minor spelling error 2023-01-29 18:10:11 -04:00
Telcean Marius-Andrei 83d3dcd1dd
Add test for strings with numbers
Proposed by @thatblindgeye.
2023-01-28 16:26:19 +02:00
38 changed files with 4902 additions and 5080 deletions

20
.circleci/config.yml Normal file
View File

@ -0,0 +1,20 @@
version: 2.1
orbs:
node: circleci/node@5.1.0
jobs:
test-solutions:
executor: node/default
steps:
- checkout
- node/install-packages:
pkg-manager: npm
- run:
command: npm run test solution
name: Run tests in **/solution/*.spec.js
workflows:
test-solutions:
jobs:
- test-solutions

View File

@ -9,7 +9,7 @@ assignees: ""
<!-- Thank you for taking the time to submit a bug report to The Odin Project. In order to get issues closed in a reasonable amount of time, you must include a baseline of information about the bug in question. Please read this template in its entirety before filling it out to ensure that it is filled out correctly. -->
Complete the following REQUIRED checkboxes:
- [ ] I have thoroughly read and understand [The Odin Project Contributing Guide](https://github.com/TheOdinProject/theodinproject/blob/main/CONTRIBUTING.md)
- [ ] I have thoroughly read and understand [The Odin Project Contributing Guide](https://github.com/TheOdinProject/.github/blob/main/CONTRIBUTING.md)
- [ ] The title of this issue follows the `Bug - location of bug: brief description of bug` format, e.g. `Bug - Exercises: File type incorrect for all test files`
The following checkbox is OPTIONAL:

View File

@ -9,7 +9,7 @@ assignees: ""
<!-- Thank you for taking the time to submit a new feature request to The Odin Project. In order to get issues closed in a reasonable amount of time, you must include a baseline of information about the feature/enhancement you are proposing. Please read this template in its entirety before filling it out to ensure that it is filled out correctly. -->
Complete the following REQUIRED checkboxes:
- [ ] I have thoroughly read and understand [The Odin Project Contributing Guide](https://github.com/TheOdinProject/theodinproject/blob/main/CONTRIBUTING.md)
- [ ] I have thoroughly read and understand [The Odin Project Contributing Guide](https://github.com/TheOdinProject/.github/blob/main/CONTRIBUTING.md)
- [ ] The title of this issue follows the `location for request: brief description of request` format, e.g. `Exercises: Add exercise on XYZ`
The following checkbox is OPTIONAL:
@ -19,8 +19,8 @@ The following checkbox is OPTIONAL:
<hr>
**1. Description of the Feature Request:**
<!--
A clear and concise description of what the feature or enhancement is, including how it would be useful/beneficial or what problem(s) it would solve.
<!--
A clear and concise description of what the feature or enhancement is, including how it would be useful/beneficial or what problem(s) it would solve.
-->

View File

@ -24,9 +24,9 @@ Closes #XXXXX
## Pull Request Requirements
<!-- Replace the whitespace between the square brackets with an 'x', e.g. [x]. After you create the PR, they will become checkboxes that you can click on. -->
- [ ] I have thoroughly read and understand [The Odin Project Contributing Guide](https://github.com/TheOdinProject/theodinproject/blob/main/CONTRIBUTING.md)
- [ ] I have thoroughly read and understand [The Odin Project Contributing Guide](https://github.com/TheOdinProject/.github/blob/main/CONTRIBUTING.md)
- [ ] The title of this PR follows the `location of change: brief description of change` format, e.g. `01_helloWorld: Update test cases`
- [ ] The `Because` section summarizes the reason for this PR
- [ ] The `This PR` section has a bullet point list describing the changes in this PR
- [ ] If this PR addresses an open issue, it is linked in the `Issue` section
- [ ] If this PR includes changes that needs to be updated on the `solutions` branch, I have created another PR (and linked it to this PR).
- [ ] If this PR includes any changes that affect the solution of an exercise, I've also updated the solution in the `/solutions` folder

View File

@ -6,7 +6,8 @@ Pretty simple, write a function called `reverseString` that returns its input, r
reverseString('hello there') // returns 'ereht olleh'
```
You will notice in this exercise that there are multiple tests, after making the first one pass, enable the others one by one by deleting the `.skip` in front the `test.skip()` function.
You will notice in this exercise that there are multiple tests (in the file `reverseString.spec.js`). Currently, only the first test is enabled. After ensuring that the first test passes, enable the remaining tests one by one by removing the `.skip` from the `test.skip()` function.
## Hints
Strings in JavaScript cannot be reversed directly so you're going to have to split it into something else first.. do the reversal and then join it back together into a string.

View File

@ -6,8 +6,13 @@ const sumAll = function (min, max) {
min = max;
max = temp;
}
// An alternative way to swap the values of min and max like above is to use the array destructuring syntax.
// Here's an optional article on it: https://www.freecodecamp.org/news/array-destructuring-in-es6-30e398f21d10/
// if (min > max) [min, max] = [max, min];
let sum = 0;
for (let i = min; i < max + 1; i++) {
for (let i = min; i <= max; i++) {
sum += i;
}
return sum;

View File

@ -1,77 +1,77 @@
const calculator = require('./calculator');
describe('add', () => {
test('adds 0 and 0', () => {
expect(calculator.add(0,0)).toBe(0);
});
test('adds 0 and 0', () => {
expect(calculator.add(0, 0)).toBe(0);
});
test.skip('adds 2 and 2', () => {
expect(calculator.add(2,2)).toBe(4);
});
test.skip('adds 2 and 2', () => {
expect(calculator.add(2, 2)).toBe(4);
});
test.skip('adds positive numbers', () => {
expect(calculator.add(2,6)).toBe(8);
});
test.skip('adds positive numbers', () => {
expect(calculator.add(2, 6)).toBe(8);
});
});
describe('subtract', () => {
test.skip('subtracts numbers', () => {
expect(calculator.subtract(10,4)).toBe(6);
});
test.skip('subtracts numbers', () => {
expect(calculator.subtract(10, 4)).toBe(6);
});
});
describe('sum', () => {
test.skip('computes the sum of an empty array', () => {
expect(calculator.sum([])).toBe(0);
});
test.skip('computes the sum of an empty array', () => {
expect(calculator.sum([])).toBe(0);
});
test.skip('computes the sum of an array of one number', () => {
expect(calculator.sum([7])).toBe(7);
});
test.skip('computes the sum of an array of one number', () => {
expect(calculator.sum([7])).toBe(7);
});
test.skip('computes the sum of an array of two numbers', () => {
expect(calculator.sum([7,11])).toBe(18);
});
test.skip('computes the sum of an array of two numbers', () => {
expect(calculator.sum([7, 11])).toBe(18);
});
test.skip('computes the sum of an array of many numbers', () => {
expect(calculator.sum([1,3,5,7,9])).toBe(25);
});
test.skip('computes the sum of an array of many numbers', () => {
expect(calculator.sum([1, 3, 5, 7, 9])).toBe(25);
});
});
describe('multiply', () => {
test.skip('multiplies two numbers', () => {
expect(calculator.multiply([2,4])).toBe(8);
});
test.skip('multiplies two numbers', () => {
expect(calculator.multiply([2, 4])).toBe(8);
});
test.skip('multiplies several numbers', () => {
expect(calculator.multiply([2,4,6,8,10,12,14])).toBe(645120);
});
test.skip('multiplies several numbers', () => {
expect(calculator.multiply([2, 4, 6, 8, 10, 12, 14])).toBe(645120);
});
});
describe('power', () => {
test.skip('raises one number to the power of another number', () => {
expect(calculator.power(4,3)).toBe(64); // 4 to third power is 64
});
test.skip('raises one number to the power of another number', () => {
expect(calculator.power(4, 3)).toBe(64); // 4 to third power is 64
});
});
describe('factorial', () => {
test.skip('computes the factorial of 0', () => {
expect(calculator.factorial(0)).toBe(1); // 0! = 1
});
test.skip('computes the factorial of 0', () => {
expect(calculator.factorial(0)).toBe(1); // 0! = 1
});
test.skip('computes the factorial of 1', () => {
expect(calculator.factorial(1)).toBe(1);
});
test.skip('computes the factorial of 1', () => {
expect(calculator.factorial(1)).toBe(1);
});
test.skip('computes the factorial of 2', () => {
expect(calculator.factorial(2)).toBe(2);
});
test.skip('computes the factorial of 2', () => {
expect(calculator.factorial(2)).toBe(2);
});
test.skip('computes the factorial of 5', () => {
expect(calculator.factorial(5)).toBe(120);
});
test.skip('computes the factorial of 5', () => {
expect(calculator.factorial(5)).toBe(120);
});
test.skip('computes the factorial of 10', () => {
expect(calculator.factorial(10)).toBe(3628800);
});
test.skip('computes the factorial of 10', () => {
expect(calculator.factorial(10)).toBe(3628800);
});
});

View File

@ -11,9 +11,7 @@ const sum = function (array) {
};
const multiply = function (array) {
return array.length
? array.reduce((accumulator, nextItem) => accumulator * nextItem)
: 0;
return array.reduce((product, current) => product * current)
};
const power = function (a, b) {

View File

@ -19,4 +19,10 @@ describe('palindromes', () => {
test.skip('doesn\'t just always return true', () => {
expect(palindromes('ZZZZ car, a man, a maracaz.')).toBe(false);
});
test.skip('works with numbers in a string', () => {
expect(palindromes('rac3e3car')).toBe(true);
});
test.skip('works with unevenly spaced numbers in a string', () => {
expect(palindromes('r3ace3car')).toBe(false);
});
});

View File

@ -1,5 +1,5 @@
const palindromes = function (string) {
const processedString = string.toLowerCase().replace(/[^a-z]/g, "");
const processedString = string.toLowerCase().replace(/[^a-z0-9]/g, "");
return processedString.split("").reverse().join("") == processedString;
};

View File

@ -21,4 +21,10 @@ describe('palindromes', () => {
test("doesn't just always return true", () => {
expect(palindromes('ZZZZ car, a man, a maraca.')).toBe(false);
});
test('works with numbers in a string', () => {
expect(palindromes('rac3e3car')).toBe(true);
});
test('works with unevenly spaced numbers in a string', () => {
expect(palindromes('r3ace3car')).toBe(false);
});
});

View File

@ -2,9 +2,11 @@
Create a function that returns a specific member of the Fibonacci sequence:
> A series of numbers in which each number ( Fibonacci number ) is the sum of the two preceding numbers. The simplest is the series 1, 1, 2, 3, 5, 8, etc.
> A series of numbers in which each number ( Fibonacci number ) is the sum of the two preceding numbers.
> In this exercise, the Fibonacci sequence used is 1, 1, 2, 3, 5, 8, etc.
> To learn more about Fibonacci sequences, go to: https://en.wikipedia.org/wiki/Fibonacci_sequence
```javascript
fibonacci(4) // returns the 4th member of the series: 3 (1, 1, 2, 3)
fibonacci(6) // returns 8
fibonacci(4); // returns the 4th member of the series: 3 (1, 1, 2, 3)
fibonacci(6); // returns 8
```

View File

@ -16,9 +16,15 @@ describe('fibonacci', () => {
test.skip('25th fibonacci number is 75025', () => {
expect(fibonacci(25)).toBe(75025);
});
test.skip('0th fibonacci number is 0', () => {
expect(fibonacci(0)).toBe(0);
});
test.skip('doesn\'t accept negatives', () => {
expect(fibonacci(-25)).toBe("OOPS");
});
test.skip('DOES accept strings', () => {
expect(fibonacci("0")).toBe(0);
});
test.skip('DOES accept strings', () => {
expect(fibonacci("1")).toBe(1);
});

View File

@ -1,14 +1,34 @@
const fibonacci = function (count) {
if (count < 0) return "OOPS";
if (count === 0) return 0;
let a = 0;
let b = 1;
for (let i = 1; i < count; i++) {
const temp = b;
b = a + b;
a = temp;
}
return b;
const fibonacci = function(countArg) {
// checks argument's type and makes sure we use
// a number throughout rest of function.
let count
if (typeof countArg !== 'number') {
count = parseInt(countArg)
} else {
count = countArg
}
if (count < 0) return "OOPS";
if (count == 0) return 0;
let firstPrev = 1;
let secondPrev = 0;
for (let i = 2; i <= count; i++) {
let current = firstPrev + secondPrev;
secondPrev = firstPrev;
firstPrev = current;
}
return firstPrev;
};
// Another way to do it is by using an iterative approach with an array containing two values, 0 and 1.
// const fib = [0, 1];
// for (let i = 2; i <= count; i++) {
// fib[i] = fib[i - 1] + fib[i - 2];
// }
// return fib[count];
module.exports = fibonacci;

View File

@ -1,4 +1,4 @@
const fibonacci = require('./fibonacci-solution');
const fibonacci = require('./fibonacci-solution')
describe('fibonacci', () => {
test('4th fibonacci number is 3', () => {
@ -16,16 +16,22 @@ describe('fibonacci', () => {
test('25th fibonacci number is 75025', () => {
expect(fibonacci(25)).toBe(75025);
});
test("doesn't accept negatives", () => {
expect(fibonacci(-25)).toBe('OOPS');
test('0th fibonacci number is 0', () => {
expect(fibonacci(0)).toBe(0);
});
test('doesn\'t accept negatives', () => {
expect(fibonacci(-25)).toBe("OOPS");
});
test('DOES accept strings', () => {
expect(fibonacci('1')).toBe(1);
expect(fibonacci("0")).toBe(0);
});
test('DOES accept strings', () => {
expect(fibonacci('2')).toBe(1);
expect(fibonacci("1")).toBe(1);
});
test('DOES accept strings', () => {
expect(fibonacci('8')).toBe(21);
expect(fibonacci("2")).toBe(1);
});
});
test('DOES accept strings', () => {
expect(fibonacci("8")).toBe(21);
});
});

View File

@ -2,7 +2,9 @@
Given an array of objects representing people with a birth and death year, return the oldest person.
Now that you've reached the final exercise, you should be fairly comfortable getting the information you need from test case(s). Take a look at how the array of objects is constructed in this exercise's test cases to help you write your function.
## Hints
- You should return the whole person object, but the tests mostly just check to make sure the name is correct.
- this can be done with a couple of chained array methods, or by using `reduce`.
- This can be done with a couple of chained array methods, or by using `reduce`.
- One of the tests checks for people with no death-date.. use JavaScript's Date function to get their age as of today.

View File

@ -1,7 +1,7 @@
const findTheOldest = require('./findTheOldest')
describe('findTheOldest', () => {
test('finds the oldest person!', () => {
test('finds the person with the greatest age!', () => {
const people = [
{
name: "Carly",
@ -21,7 +21,7 @@ describe('findTheOldest', () => {
]
expect(findTheOldest(people).name).toBe('Ray');
});
test.skip('finds the oldest person if someone is still living', () => {
test.skip('finds the person with the greatest age if someone is still living', () => {
const people = [
{
name: "Carly",
@ -40,7 +40,7 @@ describe('findTheOldest', () => {
]
expect(findTheOldest(people).name).toBe('Ray');
});
test.skip('finds the oldest person if the OLDEST is still living', () => {
test.skip('finds the person with the greatest age if the OLDEST is still living', () => {
const people = [
{
name: "Carly",

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 The Odin Project
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -6,22 +6,23 @@ These JavaScript exercises are intended to complement the JavaScript content on
## Contributing
If you have a suggestion to improve an exercise, an idea for a new exercise, or notice an issue with an exercise, please feel free to open an issue after thoroughly reading our [contributing guide](https://github.com/TheOdinProject/theodinproject/blob/main/CONTRIBUTING.md) in our main TOP repo.
If you have a suggestion to improve an exercise, an idea for a new exercise, or notice an issue with an exercise, please feel free to open an issue after thoroughly reading our [contributing guide](https://github.com/TheOdinProject/.github/blob/main/CONTRIBUTING.md).
## How To Use These Exercises
1. Fork and clone this repository. To learn how to fork a repository, see the GitHub documentation on how to [fork a repo](https://docs.github.com/en/get-started/quickstart/fork-a-repo).
- Copies of repositories on your machine are called clones. If you need help cloning to your local environment you can learn how from the GitHub documentation on [cloning a repository](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository-from-github/cloning-a-repository).
2. Before you start working on any execises, you should first ensure you have the following installed:
2. Before you start working on any exercises, you should first ensure you have the following installed:
- **NPM**. You should have installed NPM already in our [Installing Node.js](https://www.theodinproject.com/paths/foundations/courses/foundations/lessons/installing-node-js) lesson. Just in case you need to check, type `npm --version` in your terminal. If you get back `Command 'npm' not found, but can be installed with:`, **do not follow the instructions in the terminal** to install with `apt-get` as this causes permission issues. Instead, go back to the installation lesson and install Node with NVM by following the instructions there.
- **Jest**. After cloning this repository to your local machine and installing NPM, go into the newly created directory (`cd javascript-exercises`) and run `npm install`. This will install Jest and set up the testing platform based on our preconfigured settings.
- **Jest**. After cloning this repository to your local machine and installing NPM, go into the newly created directory (`cd javascript-exercises`) and run `npm install`. This will install Jest and set up the testing platform based on our preconfigured settings. (Note: if you get warnings that packages are out of date or contain vulnerabilities, you can safely ignore them for these exercises.)
3. Each exercise includes the following:
- A markdown file with a description of the task, an empty (or mostly empty) JavaScript file, and a set of tests.
- A `solutions` directory that contains a solution and the same test file with all of the tests unskipped.
To complete an exercise, you'll need to go to the exercise directory with `cd exerciseName` in the terminal and run `npm test exerciseName.spec.js`. This should run the test file and show you the output. When you first run a test, it will fail. This is by design! You must open the exercise file and write the code needed to get the test to pass.
4. Some of the exercises have test conditions defined in their spec file as `test.skip` compared to `test`. This is purposeful. After you pass one `test`, you will change the next `test.skip` to `test` and test your code again. You'll do this until all conditions are satisfied. **All tests must pass at the same time**, and you should not have any `test.skip` instances by the time you finish an exercise.
5. Once you successfully finish an exercise, check the `solutions` directory within each exercise to compare it with yours.
- You should not be checking the solution for an exercise until you finish it!
@ -34,4 +35,4 @@ The first exercise, `helloWorld`, will walk you through the process in-depth.
## Debugging
To debug functions, you can run the tests in the Visual Studio Code debugger terminal. You can open this by clicking the "Run and Debug" icon on the left or pressing `ctrl + shift + D`, then clicking JavaScript Debug Terminal. You will be able to set breakpoints as you would in the Chrome DevTools debugger. You can run `npm test exerciseName.spec.js` to then execute your code up until your breakpoint and step through your code as necessary. **NOTE**: To take advantage of the debugger, you **MUST** run the script in the debugger terminal, not the bash or zsh terminal.
To debug functions, you can run the tests in the Visual Studio Code debugger terminal. You can open this by clicking the "Run and Debug" icon on the left or pressing <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>D</kbd>, then clicking JavaScript Debug Terminal. You will be able to set breakpoints as you would in the Chrome DevTools debugger. You can run `npm test exerciseName.spec.js` to then execute your code up until your breakpoint and step through your code as necessary. **NOTE**: To take advantage of the debugger, you **MUST** run the script in the debugger terminal, not the bash or zsh terminal.

View File

@ -50,6 +50,15 @@
}
}
},
"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"
}
},
"ajv": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
@ -482,6 +491,12 @@
"integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
"dev": true
},
"camelcase": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
"integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
"dev": true
},
"capture-stack-trace": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
@ -505,6 +520,12 @@
"supports-color": "^2.0.0"
}
},
"chardet": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
"integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==",
"dev": true
},
"ci-info": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz",
@ -546,11 +567,48 @@
"colors": "1.0.3"
}
},
"cli-table2": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/cli-table2/-/cli-table2-0.2.0.tgz",
"integrity": "sha512-rNig1Ons+B0eTcophmN0nlbsROa7B3+Yfo1J3leU56awc8IuKDW3MLMv9gayl4zUnYaLGg8CrecKso+hSmUvUw==",
"dev": true,
"requires": {
"colors": "^1.1.2",
"lodash": "^3.10.1",
"string-width": "^1.0.1"
},
"dependencies": {
"colors": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
"integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
"dev": true,
"optional": true
},
"lodash": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
"integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==",
"dev": true
}
}
},
"cli-width": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz",
"integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao="
},
"cliui": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
"dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wrap-ansi": "^2.0.0"
}
},
"clone": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
@ -699,6 +757,12 @@
"cssom": "0.3.x"
}
},
"cvss": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/cvss/-/cvss-1.0.5.tgz",
"integrity": "sha512-lfApnkcBoP+3viCUFOrqRmeqsyoIuiXouYg3Gt+1f3wsYzm1xDXnvyyMiPGoODFYWnoAl9LHPWWJH5zM6HaUoA==",
"dev": true
},
"dargs": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz",
@ -894,6 +958,21 @@
"is-arrayish": "^0.2.1"
}
},
"es6-promise": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
"dev": true
},
"es6-promisify": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
"integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==",
"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",
@ -1221,6 +1300,21 @@
"merge": "^1.1.3"
}
},
"execa": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
"integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
"dev": true,
"requires": {
"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": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
@ -1702,6 +1796,33 @@
"sshpk": "^1.7.0"
}
},
"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==",
"dev": true,
"requires": {
"agent-base": "^4.3.0",
"debug": "^3.1.0"
},
"dependencies": {
"debug": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
}
}
},
"iconv-lite": {
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz",
@ -3096,6 +3217,15 @@
"tmpl": "1.0.x"
}
},
"mem": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
"integrity": "sha512-nOBDrc/wgpkd3X/JOhMqYR+/eLqlfLP4oQfoBA6QExIxEl+GU01oyEkwWyueyO8110pUKijtiHGhEmYoOn88oQ==",
"dev": true,
"requires": {
"mimic-fn": "^1.0.0"
}
},
"mem-fs": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz",
@ -3283,6 +3413,12 @@
"which": "^1.2.12"
}
},
"nodesecurity-npm-utils": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/nodesecurity-npm-utils/-/nodesecurity-npm-utils-6.0.0.tgz",
"integrity": "sha512-NLRle1woNaT2orR6fue2jNqkhxDTktgJj3sZxvR/8kp21pvOY7Gwlx5wvo0H8ZVPqdgd2nE2ADB9wDu5Cl8zNg==",
"dev": true
},
"normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
@ -3303,340 +3439,234 @@
"remove-trailing-separator": "^1.0.1"
}
},
"nsp": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/nsp/-/nsp-2.7.0.tgz",
"integrity": "sha512-OeYnX8eKRWKk/mlVeRKvwoocWN4gQlj2tVxNXHttLdasidlP34wwjOV9J9w3C/LbwyYXMb+8zDylZF/7zgyEpA==",
"npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
"integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
"dev": true,
"requires": {
"chalk": "^1.1.1",
"cli-table": "^0.3.1",
"cvss": "^1.0.0",
"https-proxy-agent": "^1.0.0",
"joi": "^6.9.1",
"nodesecurity-npm-utils": "^5.0.0",
"path-is-absolute": "^1.0.0",
"rc": "^1.1.2",
"semver": "^5.0.3",
"subcommand": "^2.0.3",
"wreck": "^6.3.0"
"path-key": "^2.0.0"
}
},
"nsp": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/nsp/-/nsp-3.2.1.tgz",
"integrity": "sha512-dLmGi7IGixJEHKetErIH460MYiYIzAoxuVsloZFu9e1p9U8K0yULx7YQ1+VzrjZbB+wqq67ES1SfOvKVb/qMDQ==",
"dev": true,
"requires": {
"chalk": "^2.1.0",
"cli-table2": "^0.2.0",
"cvss": "^1.0.2",
"https-proxy-agent": "^2.1.0",
"inquirer": "^3.3.0",
"nodesecurity-npm-utils": "^6.0.0",
"semver": "^5.4.1",
"wreck": "^12.5.1",
"yargs": "^9.0.1"
},
"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.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
"integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
"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": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"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": "^2.2.1",
"escape-string-regexp": "^1.0.2",
"has-ansi": "^2.0.0",
"strip-ansi": "^3.0.0",
"supports-color": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
"dev": true
},
"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
},
"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.0.0"
},
"dependencies": {
"ansi-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
"integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=",
"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.0.0"
},
"dependencies": {
"ansi-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
"integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=",
"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
}
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"cli-table": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz",
"integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=",
"cli-cursor": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
"integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
"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
}
"restore-cursor": "^2.0.0"
}
},
"cvss": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cvss/-/cvss-1.0.1.tgz",
"integrity": "sha1-XAffU2FqxW1m6PR0vtJePBRhk9s=",
"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"
}
},
"figures": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
"integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
"dev": true,
"requires": {
"escape-string-regexp": "^1.0.5"
}
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"https-proxy-agent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
"integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
"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": {
"agent-base": "2",
"debug": "2",
"extend": "3"
},
"dependencies": {
"agent-base": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.0.1.tgz",
"integrity": "sha1-vY+ehqjrIh//oHvRS+/VXfFCgV4=",
"dev": true,
"requires": {
"extend": "~3.0.0",
"semver": "~5.0.1"
},
"dependencies": {
"semver": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
"integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
"dev": true
}
}
},
"debug": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
"integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
"dev": true,
"requires": {
"ms": "0.7.1"
},
"dependencies": {
"ms": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
"integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
"dev": true
}
}
},
"extend": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
"integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=",
"dev": true
}
"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.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"
}
},
"joi": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz",
"integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=",
"dev": true,
"requires": {
"hoek": "2.x.x",
"isemail": "1.x.x",
"moment": "2.x.x",
"topo": "1.x.x"
},
"dependencies": {
"hoek": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
"dev": true
},
"isemail": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz",
"integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=",
"dev": true
},
"moment": {
"version": "2.12.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.12.0.tgz",
"integrity": "sha1-3CVg0Zg41sBzGxpq+gRnUmTTYNY=",
"dev": true
},
"topo": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz",
"integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=",
"dev": true,
"requires": {
"hoek": "2.x.x"
}
}
}
},
"nodesecurity-npm-utils": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/nodesecurity-npm-utils/-/nodesecurity-npm-utils-5.0.0.tgz",
"integrity": "sha1-Baow3jDKjIRcQEjpT9eOXgi1Xtk=",
"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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
"dev": true
},
"path-is-absolute": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz",
"integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=",
"mute-stream": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
"integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==",
"dev": true
},
"rc": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.1.6.tgz",
"integrity": "sha1-Q2UbdrauU7XIAvEVH6P8OwWZack=",
"onetime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
"integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
"dev": true,
"requires": {
"deep-extend": "~0.4.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~1.0.4"
},
"dependencies": {
"deep-extend": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz",
"integrity": "sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=",
"dev": true
},
"ini": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
"integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
"dev": true
},
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
"strip-json-comments": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
"integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
"dev": true
}
"mimic-fn": "^1.0.0"
}
},
"semver": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz",
"integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU=",
"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"
}
},
"restore-cursor": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
"integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
"dev": true,
"requires": {
"onetime": "^2.0.0",
"signal-exit": "^3.0.2"
}
},
"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"
}
},
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
"integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
"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==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"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"
}
},
"which-module": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
"dev": true
},
"subcommand": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/subcommand/-/subcommand-2.0.3.tgz",
"integrity": "sha1-mz/Rp1PjxEHwBBDLRBMdhlX1LDI=",
"yargs": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz",
"integrity": "sha512-XS0NJoM9Iz0azh1cdgfLF5VFK6BSWfrrqA0V2tIx3fV6aGrWCseVDwOkIBg746ev0hes59od5ZvQAfdET4H0pw==",
"dev": true,
"requires": {
"cliclopts": "^1.1.0",
"debug": "^2.1.3",
"minimist": "^1.2.0",
"xtend": "^4.0.0"
},
"dependencies": {
"cliclopts": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/cliclopts/-/cliclopts-1.1.1.tgz",
"integrity": "sha1-aUMcfLWvcjd0sNORG0w3USQxkQ8=",
"dev": true
},
"debug": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
"integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
"dev": true,
"requires": {
"ms": "0.7.1"
},
"dependencies": {
"ms": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
"integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
"dev": true
}
}
},
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
"camelcase": "^4.1.0",
"cliui": "^3.2.0",
"decamelize": "^1.1.1",
"get-caller-file": "^1.0.1",
"os-locale": "^2.0.0",
"read-pkg-up": "^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": "^7.0.0"
}
},
"wreck": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/wreck/-/wreck-6.3.0.tgz",
"integrity": "sha1-oTaXafB7u2LWo3gzanhx/Hc8dAs=",
"yargs-parser": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
"integrity": "sha512-WhzC+xgstid9MbVUktco/bf+KJG+Uu6vMX0LN1sLJvwmbCQVxb4D8LzogobonKycNasCZLdOzTAk1SK7+K7swg==",
"dev": true,
"requires": {
"boom": "2.x.x",
"hoek": "2.x.x"
},
"dependencies": {
"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"
}
},
"hoek": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
"dev": true
}
"camelcase": "^4.1.0"
}
}
}
@ -3724,6 +3754,12 @@
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
"dev": true
},
"p-limit": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
@ -3790,6 +3826,12 @@
"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": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
"dev": true
},
"path-parse": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
@ -4247,9 +4289,9 @@
"dev": true
},
"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.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
},
"set-blocking": {
"version": "2.0.0",
@ -4479,6 +4521,12 @@
}
}
},
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
"dev": true
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
@ -4999,6 +5047,33 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"wreck": {
"version": "12.5.1",
"resolved": "https://registry.npmjs.org/wreck/-/wreck-12.5.1.tgz",
"integrity": "sha512-l5DUGrc+yDyIflpty1x9XuMj1ehVjC/dTbF3/BasOO77xk0EdEa4M/DuOY8W88MQDAD0fEDqyjc8bkIMHd2E9A==",
"dev": true,
"requires": {
"boom": "5.x.x",
"hoek": "4.x.x"
},
"dependencies": {
"boom": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"dev": true,
"requires": {
"hoek": "4.x.x"
}
},
"hoek": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
"integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
"dev": true
}
}
},
"write": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",

View File

@ -19,7 +19,7 @@
"devDependencies": {
"yeoman-test": "^1.6.0",
"yeoman-assert": "^3.0.0",
"nsp": "^2.6.3",
"nsp": "^3.2.1",
"eslint": "^4.1.0",
"eslint-config-xo-space": "^0.16.0",
"jest": "^19.0.2",

9015
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -14,11 +14,11 @@
},
"homepage": "https://github.com/TheOdinProject/javascript-exercises#readme",
"devDependencies": {
"jest": "^26.6.3",
"jest-cli": "^26.6.3",
"eslint": "^7.26.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.22.1"
"eslint": "^8.47.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-plugin-import": "^2.28.1",
"jest": "^29.6.4",
"jest-cli": "^29.6.4"
},
"scripts": {
"test": "jest"
@ -26,7 +26,7 @@
"eslintConfig": {
"root": true
},
"jest": {
"jest": {
"testPathIgnorePatterns": [
"generator-exercise/"
]