From 6ffcd10302cb6c4459267ae72bcc811879f7a985 Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Sun, 13 Feb 2022 16:13:21 +0100 Subject: [PATCH] Migrate to Jest 17, ESM, and config packages --- .eslintignore | 6 - .eslintrc | 11 +- .github/workflows/action-format.yml | 2 - .github/workflows/verify-code-formatting.yml | 2 - .prettierignore | 3 + babel.config.cjs | 4 + babel.config.js | 20 - bin/check-formatting.sh | 24 + bin/format.sh | 24 +- common/.eslintignore | 5 +- common/.eslintrc | 23 - common/.eslintrc.cjs | 38 + common/babel.config.cjs | 4 + common/babel.config.js | 20 - common/{jest.config.js => jest.config.cjs} | 0 common/package.json | 25 +- common/tsconfig.json | 23 +- exercises/practice/accumulate/.eslintignore | 5 +- exercises/practice/accumulate/.eslintrc | 23 - exercises/practice/accumulate/.eslintrc.cjs | 38 + .../practice/accumulate/babel.config.cjs | 4 + exercises/practice/accumulate/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/accumulate/package.json | 24 +- exercises/practice/accumulate/tsconfig.json | 23 +- exercises/practice/acronym/.eslintignore | 5 +- exercises/practice/acronym/.eslintrc | 23 - exercises/practice/acronym/.eslintrc.cjs | 38 + exercises/practice/acronym/babel.config.cjs | 4 + exercises/practice/acronym/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/acronym/package.json | 24 +- exercises/practice/acronym/tsconfig.json | 23 +- .../practice/all-your-base/.eslintignore | 5 +- exercises/practice/all-your-base/.eslintrc | 23 - .../practice/all-your-base/.eslintrc.cjs | 38 + .../practice/all-your-base/babel.config.cjs | 4 + .../practice/all-your-base/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/all-your-base/package.json | 24 +- .../practice/all-your-base/tsconfig.json | 23 +- exercises/practice/allergies/.eslintignore | 5 +- exercises/practice/allergies/.eslintrc | 23 - exercises/practice/allergies/.eslintrc.cjs | 38 + exercises/practice/allergies/babel.config.cjs | 4 + exercises/practice/allergies/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/allergies/package.json | 24 +- exercises/practice/allergies/tsconfig.json | 23 +- exercises/practice/alphametics/.eslintignore | 5 +- exercises/practice/alphametics/.eslintrc | 23 - exercises/practice/alphametics/.eslintrc.cjs | 38 + .../practice/alphametics/babel.config.cjs | 4 + .../practice/alphametics/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/alphametics/package.json | 24 +- exercises/practice/alphametics/tsconfig.json | 23 +- exercises/practice/anagram/.eslintignore | 5 +- exercises/practice/anagram/.eslintrc | 23 - exercises/practice/anagram/.eslintrc.cjs | 38 + exercises/practice/anagram/babel.config.cjs | 4 + exercises/practice/anagram/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/anagram/package.json | 24 +- exercises/practice/anagram/tsconfig.json | 23 +- .../practice/armstrong-numbers/.eslintignore | 5 +- .../practice/armstrong-numbers/.eslintrc | 23 - .../practice/armstrong-numbers/.eslintrc.cjs | 38 + .../armstrong-numbers/babel.config.cjs | 4 + .../armstrong-numbers/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/armstrong-numbers/package.json | 24 +- .../practice/armstrong-numbers/tsconfig.json | 23 +- .../practice/atbash-cipher/.eslintignore | 5 +- exercises/practice/atbash-cipher/.eslintrc | 23 - .../practice/atbash-cipher/.eslintrc.cjs | 38 + .../practice/atbash-cipher/babel.config.cjs | 4 + .../practice/atbash-cipher/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/atbash-cipher/package.json | 24 +- .../practice/atbash-cipher/tsconfig.json | 23 +- exercises/practice/beer-song/.eslintignore | 5 +- exercises/practice/beer-song/.eslintrc | 23 - exercises/practice/beer-song/.eslintrc.cjs | 38 + exercises/practice/beer-song/babel.config.cjs | 4 + exercises/practice/beer-song/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/beer-song/package.json | 24 +- exercises/practice/beer-song/tsconfig.json | 23 +- .../practice/binary-search-tree/.eslintignore | 5 +- .../practice/binary-search-tree/.eslintrc | 23 - .../practice/binary-search-tree/.eslintrc.cjs | 38 + .../binary-search-tree/babel.config.cjs | 4 + .../binary-search-tree/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/binary-search-tree/package.json | 24 +- .../practice/binary-search-tree/tsconfig.json | 23 +- .../practice/binary-search/.eslintignore | 5 +- exercises/practice/binary-search/.eslintrc | 23 - .../practice/binary-search/.eslintrc.cjs | 38 + .../practice/binary-search/babel.config.cjs | 4 + .../practice/binary-search/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/binary-search/package.json | 24 +- .../practice/binary-search/tsconfig.json | 23 +- exercises/practice/bob/.eslintignore | 5 +- exercises/practice/bob/.eslintrc | 23 - exercises/practice/bob/.eslintrc.cjs | 38 + exercises/practice/bob/babel.config.cjs | 4 + exercises/practice/bob/babel.config.js | 20 - .../bob/{jest.config.js => jest.config.cjs} | 0 exercises/practice/bob/package.json | 24 +- exercises/practice/bob/tsconfig.json | 23 +- exercises/practice/bowling/.eslintignore | 5 +- exercises/practice/bowling/.eslintrc | 23 - exercises/practice/bowling/.eslintrc.cjs | 38 + exercises/practice/bowling/babel.config.cjs | 4 + exercises/practice/bowling/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/bowling/package.json | 24 +- exercises/practice/bowling/tsconfig.json | 23 +- .../practice/circular-buffer/.eslintignore | 5 +- exercises/practice/circular-buffer/.eslintrc | 23 - .../practice/circular-buffer/.eslintrc.cjs | 38 + .../practice/circular-buffer/babel.config.cjs | 4 + .../practice/circular-buffer/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/circular-buffer/package.json | 24 +- .../practice/circular-buffer/tsconfig.json | 23 +- exercises/practice/clock/.eslintignore | 5 +- exercises/practice/clock/.eslintrc | 23 - exercises/practice/clock/.eslintrc.cjs | 38 + exercises/practice/clock/babel.config.cjs | 4 + exercises/practice/clock/babel.config.js | 20 - .../clock/{jest.config.js => jest.config.cjs} | 0 exercises/practice/clock/package.json | 24 +- exercises/practice/clock/tsconfig.json | 23 +- .../practice/collatz-conjecture/.eslintignore | 5 +- .../practice/collatz-conjecture/.eslintrc | 23 - .../practice/collatz-conjecture/.eslintrc.cjs | 38 + .../collatz-conjecture/babel.config.cjs | 4 + .../collatz-conjecture/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/collatz-conjecture/package.json | 24 +- .../practice/collatz-conjecture/tsconfig.json | 23 +- .../practice/complex-numbers/.eslintignore | 5 +- exercises/practice/complex-numbers/.eslintrc | 23 - .../practice/complex-numbers/.eslintrc.cjs | 38 + .../practice/complex-numbers/babel.config.cjs | 4 + .../practice/complex-numbers/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/complex-numbers/package.json | 24 +- .../practice/complex-numbers/tsconfig.json | 23 +- exercises/practice/connect/.eslintignore | 5 +- exercises/practice/connect/.eslintrc | 23 - exercises/practice/connect/.eslintrc.cjs | 38 + exercises/practice/connect/babel.config.cjs | 4 + exercises/practice/connect/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/connect/package.json | 24 +- exercises/practice/connect/tsconfig.json | 23 +- .../practice/crypto-square/.eslintignore | 5 +- exercises/practice/crypto-square/.eslintrc | 23 - .../practice/crypto-square/.eslintrc.cjs | 38 + .../practice/crypto-square/babel.config.cjs | 4 + .../practice/crypto-square/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/crypto-square/package.json | 24 +- .../practice/crypto-square/tsconfig.json | 23 +- exercises/practice/custom-set/.eslintignore | 5 +- exercises/practice/custom-set/.eslintrc | 23 - exercises/practice/custom-set/.eslintrc.cjs | 38 + .../practice/custom-set/babel.config.cjs | 4 + exercises/practice/custom-set/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/custom-set/package.json | 24 +- exercises/practice/custom-set/tsconfig.json | 23 +- exercises/practice/diamond/.eslintignore | 5 +- exercises/practice/diamond/.eslintrc | 23 - exercises/practice/diamond/.eslintrc.cjs | 38 + exercises/practice/diamond/babel.config.cjs | 4 + exercises/practice/diamond/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/diamond/package.json | 24 +- exercises/practice/diamond/tsconfig.json | 23 +- .../difference-of-squares/.eslintignore | 5 +- .../practice/difference-of-squares/.eslintrc | 23 - .../difference-of-squares/.eslintrc.cjs | 38 + .../difference-of-squares/babel.config.cjs | 4 + .../difference-of-squares/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../difference-of-squares/package.json | 24 +- .../difference-of-squares/tsconfig.json | 23 +- .../practice/diffie-hellman/.eslintignore | 5 +- exercises/practice/diffie-hellman/.eslintrc | 23 - .../practice/diffie-hellman/.eslintrc.cjs | 38 + .../practice/diffie-hellman/babel.config.cjs | 4 + .../practice/diffie-hellman/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/diffie-hellman/package.json | 24 +- .../practice/diffie-hellman/tsconfig.json | 23 +- .../practice/dnd-character/.eslintignore | 5 +- exercises/practice/dnd-character/.eslintrc | 23 - .../practice/dnd-character/.eslintrc.cjs | 38 + .../practice/dnd-character/babel.config.cjs | 4 + .../practice/dnd-character/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/dnd-character/package.json | 24 +- .../practice/dnd-character/tsconfig.json | 23 +- exercises/practice/etl/.eslintignore | 5 +- exercises/practice/etl/.eslintrc | 23 - exercises/practice/etl/.eslintrc.cjs | 38 + exercises/practice/etl/babel.config.cjs | 4 + exercises/practice/etl/babel.config.js | 20 - .../etl/{jest.config.js => jest.config.cjs} | 0 exercises/practice/etl/package.json | 24 +- exercises/practice/etl/tsconfig.json | 23 +- .../practice/flatten-array/.eslintignore | 5 +- exercises/practice/flatten-array/.eslintrc | 23 - .../practice/flatten-array/.eslintrc.cjs | 38 + .../practice/flatten-array/babel.config.cjs | 4 + .../practice/flatten-array/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/flatten-array/package.json | 24 +- .../practice/flatten-array/tsconfig.json | 23 +- exercises/practice/food-chain/.eslintignore | 5 +- exercises/practice/food-chain/.eslintrc | 23 - exercises/practice/food-chain/.eslintrc.cjs | 38 + .../practice/food-chain/babel.config.cjs | 4 + exercises/practice/food-chain/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/food-chain/package.json | 24 +- exercises/practice/food-chain/tsconfig.json | 23 +- exercises/practice/gigasecond/.eslintignore | 5 +- exercises/practice/gigasecond/.eslintrc | 23 - exercises/practice/gigasecond/.eslintrc.cjs | 38 + .../practice/gigasecond/babel.config.cjs | 4 + exercises/practice/gigasecond/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/gigasecond/package.json | 24 +- exercises/practice/gigasecond/tsconfig.json | 23 +- exercises/practice/grade-school/.eslintignore | 5 +- exercises/practice/grade-school/.eslintrc | 23 - exercises/practice/grade-school/.eslintrc.cjs | 38 + .../practice/grade-school/babel.config.cjs | 4 + .../practice/grade-school/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/grade-school/package.json | 24 +- exercises/practice/grade-school/tsconfig.json | 23 +- exercises/practice/grains/.eslintignore | 5 +- exercises/practice/grains/.eslintrc | 23 - exercises/practice/grains/.eslintrc.cjs | 38 + exercises/practice/grains/babel.config.cjs | 4 + exercises/practice/grains/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/grains/package.json | 24 +- exercises/practice/grains/tsconfig.json | 23 +- exercises/practice/hamming/.eslintignore | 5 +- exercises/practice/hamming/.eslintrc | 23 - exercises/practice/hamming/.eslintrc.cjs | 38 + exercises/practice/hamming/babel.config.cjs | 4 + exercises/practice/hamming/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/hamming/package.json | 24 +- exercises/practice/hamming/tsconfig.json | 23 +- exercises/practice/hello-world/.eslintignore | 5 +- exercises/practice/hello-world/.eslintrc | 23 - exercises/practice/hello-world/.eslintrc.cjs | 38 + .../practice/hello-world/babel.config.cjs | 4 + .../practice/hello-world/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/hello-world/package.json | 24 +- exercises/practice/hello-world/tsconfig.json | 23 +- exercises/practice/house/.eslintignore | 5 +- exercises/practice/house/.eslintrc | 23 - exercises/practice/house/.eslintrc.cjs | 38 + exercises/practice/house/babel.config.cjs | 4 + exercises/practice/house/babel.config.js | 20 - .../house/{jest.config.js => jest.config.cjs} | 0 exercises/practice/house/package.json | 24 +- exercises/practice/house/tsconfig.json | 23 +- .../practice/isbn-verifier/.eslintignore | 5 +- exercises/practice/isbn-verifier/.eslintrc | 23 - .../practice/isbn-verifier/.eslintrc.cjs | 38 + .../practice/isbn-verifier/babel.config.cjs | 4 + .../practice/isbn-verifier/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/isbn-verifier/package.json | 24 +- .../practice/isbn-verifier/tsconfig.json | 23 +- exercises/practice/isogram/.eslintignore | 5 +- exercises/practice/isogram/.eslintrc | 23 - exercises/practice/isogram/.eslintrc.cjs | 38 + exercises/practice/isogram/babel.config.cjs | 4 + exercises/practice/isogram/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/isogram/package.json | 24 +- exercises/practice/isogram/tsconfig.json | 23 +- .../kindergarten-garden/.eslintignore | 5 +- .../practice/kindergarten-garden/.eslintrc | 23 - .../kindergarten-garden/.eslintrc.cjs | 38 + .../kindergarten-garden/babel.config.cjs | 4 + .../kindergarten-garden/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/kindergarten-garden/package.json | 24 +- .../kindergarten-garden/tsconfig.json | 23 +- exercises/practice/knapsack/.eslintignore | 5 +- exercises/practice/knapsack/.eslintrc | 23 - exercises/practice/knapsack/.eslintrc.cjs | 38 + exercises/practice/knapsack/babel.config.cjs | 4 + exercises/practice/knapsack/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/knapsack/package.json | 24 +- exercises/practice/knapsack/tsconfig.json | 23 +- .../largest-series-product/.eslintignore | 5 +- .../practice/largest-series-product/.eslintrc | 23 - .../largest-series-product/.eslintrc.cjs | 38 + .../largest-series-product/babel.config.cjs | 4 + .../largest-series-product/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../largest-series-product/package.json | 24 +- .../largest-series-product/tsconfig.json | 23 +- exercises/practice/leap/.eslintignore | 5 +- exercises/practice/leap/.eslintrc | 23 - exercises/practice/leap/.eslintrc.cjs | 38 + exercises/practice/leap/babel.config.cjs | 4 + exercises/practice/leap/babel.config.js | 20 - .../leap/{jest.config.js => jest.config.cjs} | 0 exercises/practice/leap/package.json | 24 +- exercises/practice/leap/tsconfig.json | 23 +- exercises/practice/linked-list/.eslintignore | 5 +- exercises/practice/linked-list/.eslintrc | 23 - exercises/practice/linked-list/.eslintrc.cjs | 38 + .../practice/linked-list/babel.config.cjs | 4 + .../practice/linked-list/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/linked-list/package.json | 24 +- exercises/practice/linked-list/tsconfig.json | 23 +- exercises/practice/list-ops/.eslintignore | 5 +- exercises/practice/list-ops/.eslintrc | 23 - exercises/practice/list-ops/.eslintrc.cjs | 38 + exercises/practice/list-ops/babel.config.cjs | 4 + exercises/practice/list-ops/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/list-ops/package.json | 24 +- exercises/practice/list-ops/tsconfig.json | 23 +- exercises/practice/luhn/.eslintignore | 5 +- exercises/practice/luhn/.eslintrc | 23 - exercises/practice/luhn/.eslintrc.cjs | 38 + exercises/practice/luhn/babel.config.cjs | 4 + exercises/practice/luhn/babel.config.js | 20 - .../luhn/{jest.config.js => jest.config.cjs} | 0 exercises/practice/luhn/package.json | 24 +- exercises/practice/luhn/tsconfig.json | 23 +- .../practice/matching-brackets/.eslintignore | 5 +- .../practice/matching-brackets/.eslintrc | 23 - .../practice/matching-brackets/.eslintrc.cjs | 38 + .../matching-brackets/babel.config.cjs | 4 + .../matching-brackets/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/matching-brackets/package.json | 24 +- .../practice/matching-brackets/tsconfig.json | 23 +- exercises/practice/matrix/.eslintignore | 5 +- exercises/practice/matrix/.eslintrc | 23 - exercises/practice/matrix/.eslintrc.cjs | 38 + exercises/practice/matrix/babel.config.cjs | 4 + exercises/practice/matrix/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/matrix/package.json | 24 +- exercises/practice/matrix/tsconfig.json | 23 +- exercises/practice/minesweeper/.eslintignore | 5 +- exercises/practice/minesweeper/.eslintrc | 23 - exercises/practice/minesweeper/.eslintrc.cjs | 38 + .../practice/minesweeper/babel.config.cjs | 4 + .../practice/minesweeper/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/minesweeper/package.json | 24 +- exercises/practice/minesweeper/tsconfig.json | 23 +- exercises/practice/nth-prime/.eslintignore | 5 +- exercises/practice/nth-prime/.eslintrc | 23 - exercises/practice/nth-prime/.eslintrc.cjs | 38 + exercises/practice/nth-prime/babel.config.cjs | 4 + exercises/practice/nth-prime/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/nth-prime/package.json | 24 +- exercises/practice/nth-prime/tsconfig.json | 23 +- .../practice/nucleotide-count/.eslintignore | 5 +- exercises/practice/nucleotide-count/.eslintrc | 23 - .../practice/nucleotide-count/.eslintrc.cjs | 38 + .../nucleotide-count/babel.config.cjs | 4 + .../practice/nucleotide-count/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/nucleotide-count/package.json | 24 +- .../practice/nucleotide-count/tsconfig.json | 23 +- exercises/practice/ocr-numbers/.eslintignore | 5 +- exercises/practice/ocr-numbers/.eslintrc | 23 - exercises/practice/ocr-numbers/.eslintrc.cjs | 38 + .../practice/ocr-numbers/babel.config.cjs | 4 + .../practice/ocr-numbers/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/ocr-numbers/package.json | 24 +- exercises/practice/ocr-numbers/tsconfig.json | 23 +- .../palindrome-products/.eslintignore | 5 +- .../practice/palindrome-products/.eslintrc | 23 - .../palindrome-products/.eslintrc.cjs | 38 + .../palindrome-products/babel.config.cjs | 4 + .../palindrome-products/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/palindrome-products/package.json | 24 +- .../palindrome-products/tsconfig.json | 23 +- exercises/practice/pangram/.eslintignore | 5 +- exercises/practice/pangram/.eslintrc | 23 - exercises/practice/pangram/.eslintrc.cjs | 38 + exercises/practice/pangram/babel.config.cjs | 4 + exercises/practice/pangram/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/pangram/package.json | 24 +- exercises/practice/pangram/tsconfig.json | 23 +- .../practice/pascals-triangle/.eslintignore | 5 +- exercises/practice/pascals-triangle/.eslintrc | 23 - .../practice/pascals-triangle/.eslintrc.cjs | 38 + .../pascals-triangle/babel.config.cjs | 4 + .../practice/pascals-triangle/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/pascals-triangle/package.json | 24 +- .../practice/pascals-triangle/tsconfig.json | 23 +- .../practice/perfect-numbers/.eslintignore | 5 +- exercises/practice/perfect-numbers/.eslintrc | 23 - .../practice/perfect-numbers/.eslintrc.cjs | 38 + .../practice/perfect-numbers/babel.config.cjs | 4 + .../practice/perfect-numbers/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/perfect-numbers/package.json | 24 +- .../practice/perfect-numbers/tsconfig.json | 23 +- exercises/practice/phone-number/.eslintignore | 5 +- exercises/practice/phone-number/.eslintrc | 23 - exercises/practice/phone-number/.eslintrc.cjs | 38 + .../practice/phone-number/babel.config.cjs | 4 + .../practice/phone-number/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/phone-number/package.json | 24 +- exercises/practice/phone-number/tsconfig.json | 23 +- exercises/practice/pig-latin/.eslintignore | 5 +- exercises/practice/pig-latin/.eslintrc | 23 - exercises/practice/pig-latin/.eslintrc.cjs | 38 + exercises/practice/pig-latin/babel.config.cjs | 4 + exercises/practice/pig-latin/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/pig-latin/package.json | 24 +- exercises/practice/pig-latin/tsconfig.json | 23 +- .../practice/prime-factors/.eslintignore | 5 +- exercises/practice/prime-factors/.eslintrc | 23 - .../practice/prime-factors/.eslintrc.cjs | 38 + .../practice/prime-factors/babel.config.cjs | 4 + .../practice/prime-factors/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/prime-factors/package.json | 24 +- .../practice/prime-factors/tsconfig.json | 23 +- .../protein-translation/.eslintignore | 5 +- .../practice/protein-translation/.eslintrc | 23 - .../protein-translation/.eslintrc.cjs | 38 + .../protein-translation/babel.config.cjs | 4 + .../protein-translation/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/protein-translation/package.json | 24 +- .../protein-translation/tsconfig.json | 23 +- exercises/practice/proverb/.eslintignore | 5 +- exercises/practice/proverb/.eslintrc | 23 - exercises/practice/proverb/.eslintrc.cjs | 38 + exercises/practice/proverb/babel.config.cjs | 4 + exercises/practice/proverb/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/proverb/package.json | 24 +- exercises/practice/proverb/tsconfig.json | 23 +- .../pythagorean-triplet/.eslintignore | 5 +- .../practice/pythagorean-triplet/.eslintrc | 23 - .../pythagorean-triplet/.eslintrc.cjs | 38 + .../pythagorean-triplet/babel.config.cjs | 4 + .../pythagorean-triplet/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/pythagorean-triplet/package.json | 24 +- .../pythagorean-triplet/tsconfig.json | 23 +- exercises/practice/queen-attack/.eslintignore | 5 +- exercises/practice/queen-attack/.eslintrc | 23 - exercises/practice/queen-attack/.eslintrc.cjs | 38 + .../practice/queen-attack/babel.config.cjs | 4 + .../practice/queen-attack/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/queen-attack/package.json | 24 +- exercises/practice/queen-attack/tsconfig.json | 23 +- exercises/practice/raindrops/.eslintignore | 5 +- exercises/practice/raindrops/.eslintrc | 23 - exercises/practice/raindrops/.eslintrc.cjs | 38 + exercises/practice/raindrops/babel.config.cjs | 4 + exercises/practice/raindrops/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/raindrops/package.json | 24 +- exercises/practice/raindrops/tsconfig.json | 23 +- .../practice/rational-numbers/.eslintignore | 5 +- exercises/practice/rational-numbers/.eslintrc | 23 - .../practice/rational-numbers/.eslintrc.cjs | 38 + .../rational-numbers/babel.config.cjs | 4 + .../practice/rational-numbers/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/rational-numbers/package.json | 24 +- .../practice/rational-numbers/tsconfig.json | 23 +- exercises/practice/react/.eslintignore | 5 +- exercises/practice/react/.eslintrc | 23 - exercises/practice/react/.eslintrc.cjs | 38 + exercises/practice/react/babel.config.cjs | 4 + exercises/practice/react/babel.config.js | 20 - .../react/{jest.config.js => jest.config.cjs} | 0 exercises/practice/react/package.json | 24 +- exercises/practice/react/tsconfig.json | 23 +- exercises/practice/rectangles/.eslintignore | 5 +- exercises/practice/rectangles/.eslintrc | 23 - exercises/practice/rectangles/.eslintrc.cjs | 38 + .../practice/rectangles/babel.config.cjs | 4 + exercises/practice/rectangles/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/rectangles/package.json | 24 +- exercises/practice/rectangles/tsconfig.json | 23 +- .../practice/resistor-color-duo/.eslintignore | 5 +- .../practice/resistor-color-duo/.eslintrc | 23 - .../practice/resistor-color-duo/.eslintrc.cjs | 38 + .../resistor-color-duo/babel.config.cjs | 4 + .../resistor-color-duo/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/resistor-color-duo/package.json | 24 +- .../practice/resistor-color-duo/tsconfig.json | 23 +- .../resistor-color-trio/.eslintignore | 5 +- .../practice/resistor-color-trio/.eslintrc | 23 - .../resistor-color-trio/.eslintrc.cjs | 38 + .../resistor-color-trio/babel.config.cjs | 4 + .../resistor-color-trio/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/resistor-color-trio/package.json | 24 +- .../resistor-color-trio/tsconfig.json | 23 +- .../practice/resistor-color/.eslintignore | 5 +- exercises/practice/resistor-color/.eslintrc | 23 - .../practice/resistor-color/.eslintrc.cjs | 38 + .../practice/resistor-color/babel.config.cjs | 4 + .../practice/resistor-color/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/resistor-color/package.json | 24 +- .../practice/resistor-color/tsconfig.json | 23 +- .../practice/reverse-string/.eslintignore | 5 +- exercises/practice/reverse-string/.eslintrc | 23 - .../practice/reverse-string/.eslintrc.cjs | 38 + .../practice/reverse-string/babel.config.cjs | 4 + .../practice/reverse-string/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/reverse-string/package.json | 24 +- .../practice/reverse-string/tsconfig.json | 23 +- .../practice/rna-transcription/.eslintignore | 5 +- .../practice/rna-transcription/.eslintrc | 23 - .../practice/rna-transcription/.eslintrc.cjs | 38 + .../rna-transcription/babel.config.cjs | 4 + .../rna-transcription/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/rna-transcription/package.json | 24 +- .../practice/rna-transcription/tsconfig.json | 23 +- exercises/practice/robot-name/.eslintignore | 5 +- exercises/practice/robot-name/.eslintrc | 23 - exercises/practice/robot-name/.eslintrc.cjs | 38 + .../practice/robot-name/babel.config.cjs | 4 + exercises/practice/robot-name/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/robot-name/package.json | 24 +- exercises/practice/robot-name/tsconfig.json | 23 +- .../practice/robot-simulator/.eslintignore | 5 +- exercises/practice/robot-simulator/.eslintrc | 23 - .../practice/robot-simulator/.eslintrc.cjs | 38 + .../practice/robot-simulator/babel.config.cjs | 4 + .../practice/robot-simulator/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/robot-simulator/package.json | 24 +- .../practice/robot-simulator/tsconfig.json | 23 +- .../practice/roman-numerals/.eslintignore | 5 +- exercises/practice/roman-numerals/.eslintrc | 23 - .../practice/roman-numerals/.eslintrc.cjs | 38 + .../practice/roman-numerals/babel.config.cjs | 4 + .../practice/roman-numerals/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/roman-numerals/package.json | 24 +- .../practice/roman-numerals/tsconfig.json | 23 +- .../practice/rotational-cipher/.eslintignore | 5 +- .../practice/rotational-cipher/.eslintrc | 23 - .../practice/rotational-cipher/.eslintrc.cjs | 38 + .../rotational-cipher/babel.config.cjs | 4 + .../rotational-cipher/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/rotational-cipher/package.json | 24 +- .../practice/rotational-cipher/tsconfig.json | 23 +- .../run-length-encoding/.eslintignore | 5 +- .../practice/run-length-encoding/.eslintrc | 23 - .../run-length-encoding/.eslintrc.cjs | 38 + .../run-length-encoding/babel.config.cjs | 4 + .../run-length-encoding/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/run-length-encoding/package.json | 24 +- .../run-length-encoding/tsconfig.json | 23 +- .../practice/saddle-points/.eslintignore | 5 +- exercises/practice/saddle-points/.eslintrc | 23 - .../practice/saddle-points/.eslintrc.cjs | 38 + .../practice/saddle-points/babel.config.cjs | 4 + .../practice/saddle-points/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/saddle-points/package.json | 24 +- .../practice/saddle-points/tsconfig.json | 23 +- exercises/practice/say/.eslintignore | 5 +- exercises/practice/say/.eslintrc | 23 - exercises/practice/say/.eslintrc.cjs | 38 + exercises/practice/say/babel.config.cjs | 4 + exercises/practice/say/babel.config.js | 20 - .../say/{jest.config.js => jest.config.cjs} | 0 exercises/practice/say/package.json | 24 +- exercises/practice/say/tsconfig.json | 23 +- .../practice/scrabble-score/.eslintignore | 5 +- exercises/practice/scrabble-score/.eslintrc | 23 - .../practice/scrabble-score/.eslintrc.cjs | 38 + .../practice/scrabble-score/babel.config.cjs | 4 + .../practice/scrabble-score/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/scrabble-score/package.json | 24 +- .../practice/scrabble-score/tsconfig.json | 23 +- .../practice/secret-handshake/.eslintignore | 5 +- exercises/practice/secret-handshake/.eslintrc | 23 - .../practice/secret-handshake/.eslintrc.cjs | 38 + .../secret-handshake/babel.config.cjs | 4 + .../practice/secret-handshake/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/secret-handshake/package.json | 24 +- .../practice/secret-handshake/tsconfig.json | 23 +- exercises/practice/series/.eslintignore | 5 +- exercises/practice/series/.eslintrc | 23 - exercises/practice/series/.eslintrc.cjs | 38 + exercises/practice/series/babel.config.cjs | 4 + exercises/practice/series/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/series/package.json | 24 +- exercises/practice/series/tsconfig.json | 23 +- exercises/practice/sieve/.eslintignore | 5 +- exercises/practice/sieve/.eslintrc | 23 - exercises/practice/sieve/.eslintrc.cjs | 38 + exercises/practice/sieve/babel.config.cjs | 4 + exercises/practice/sieve/babel.config.js | 20 - .../sieve/{jest.config.js => jest.config.cjs} | 0 exercises/practice/sieve/package.json | 24 +- exercises/practice/sieve/tsconfig.json | 23 +- .../practice/simple-cipher/.eslintignore | 5 +- exercises/practice/simple-cipher/.eslintrc | 23 - .../practice/simple-cipher/.eslintrc.cjs | 38 + .../practice/simple-cipher/babel.config.cjs | 4 + .../practice/simple-cipher/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/simple-cipher/package.json | 24 +- .../practice/simple-cipher/tsconfig.json | 23 +- exercises/practice/space-age/.eslintignore | 5 +- exercises/practice/space-age/.eslintrc | 23 - exercises/practice/space-age/.eslintrc.cjs | 38 + exercises/practice/space-age/babel.config.cjs | 4 + exercises/practice/space-age/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/space-age/package.json | 24 +- exercises/practice/space-age/tsconfig.json | 23 +- .../practice/spiral-matrix/.eslintignore | 5 +- exercises/practice/spiral-matrix/.eslintrc | 23 - .../practice/spiral-matrix/.eslintrc.cjs | 38 + .../practice/spiral-matrix/babel.config.cjs | 4 + .../practice/spiral-matrix/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/spiral-matrix/package.json | 24 +- .../practice/spiral-matrix/tsconfig.json | 23 +- exercises/practice/strain/.eslintignore | 5 +- exercises/practice/strain/.eslintrc | 23 - exercises/practice/strain/.eslintrc.cjs | 38 + exercises/practice/strain/babel.config.cjs | 4 + exercises/practice/strain/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/strain/package.json | 24 +- exercises/practice/strain/tsconfig.json | 23 +- exercises/practice/sublist/.eslintignore | 5 +- exercises/practice/sublist/.eslintrc | 23 - exercises/practice/sublist/.eslintrc.cjs | 38 + exercises/practice/sublist/babel.config.cjs | 4 + exercises/practice/sublist/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/sublist/package.json | 24 +- exercises/practice/sublist/tsconfig.json | 23 +- .../practice/sum-of-multiples/.eslintignore | 5 +- exercises/practice/sum-of-multiples/.eslintrc | 23 - .../practice/sum-of-multiples/.eslintrc.cjs | 38 + .../sum-of-multiples/babel.config.cjs | 4 + .../practice/sum-of-multiples/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../practice/sum-of-multiples/package.json | 24 +- .../practice/sum-of-multiples/tsconfig.json | 23 +- exercises/practice/transpose/.eslintignore | 5 +- exercises/practice/transpose/.eslintrc | 23 - exercises/practice/transpose/.eslintrc.cjs | 38 + exercises/practice/transpose/babel.config.cjs | 4 + exercises/practice/transpose/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/transpose/package.json | 24 +- exercises/practice/transpose/tsconfig.json | 23 +- exercises/practice/triangle/.eslintignore | 5 +- exercises/practice/triangle/.eslintrc | 23 - exercises/practice/triangle/.eslintrc.cjs | 38 + exercises/practice/triangle/babel.config.cjs | 4 + exercises/practice/triangle/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/triangle/package.json | 24 +- exercises/practice/triangle/tsconfig.json | 23 +- exercises/practice/twelve-days/.eslintignore | 5 +- exercises/practice/twelve-days/.eslintrc | 23 - exercises/practice/twelve-days/.eslintrc.cjs | 38 + .../practice/twelve-days/babel.config.cjs | 4 + .../practice/twelve-days/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/twelve-days/package.json | 24 +- exercises/practice/twelve-days/tsconfig.json | 23 +- exercises/practice/two-bucket/.eslintignore | 5 +- exercises/practice/two-bucket/.eslintrc | 23 - exercises/practice/two-bucket/.eslintrc.cjs | 38 + .../practice/two-bucket/babel.config.cjs | 4 + exercises/practice/two-bucket/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/two-bucket/package.json | 24 +- exercises/practice/two-bucket/tsconfig.json | 23 +- exercises/practice/two-fer/.eslintignore | 5 +- exercises/practice/two-fer/.eslintrc | 23 - exercises/practice/two-fer/.eslintrc.cjs | 38 + exercises/practice/two-fer/babel.config.cjs | 4 + exercises/practice/two-fer/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/two-fer/package.json | 24 +- exercises/practice/two-fer/tsconfig.json | 23 +- .../variable-length-quantity/.eslintignore | 5 +- .../variable-length-quantity/.eslintrc | 23 - .../variable-length-quantity/.eslintrc.cjs | 38 + .../variable-length-quantity/babel.config.cjs | 4 + .../variable-length-quantity/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 .../variable-length-quantity/package.json | 24 +- .../variable-length-quantity/tsconfig.json | 23 +- exercises/practice/word-count/.eslintignore | 5 +- exercises/practice/word-count/.eslintrc | 23 - exercises/practice/word-count/.eslintrc.cjs | 38 + .../practice/word-count/babel.config.cjs | 4 + exercises/practice/word-count/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/word-count/package.json | 24 +- exercises/practice/word-count/tsconfig.json | 23 +- exercises/practice/word-search/.eslintignore | 5 +- exercises/practice/word-search/.eslintrc | 23 - exercises/practice/word-search/.eslintrc.cjs | 38 + .../practice/word-search/babel.config.cjs | 4 + .../practice/word-search/babel.config.js | 20 - .../{jest.config.js => jest.config.cjs} | 0 exercises/practice/word-search/package.json | 24 +- exercises/practice/word-search/tsconfig.json | 23 +- exercises/practice/wordy/.eslintignore | 5 +- exercises/practice/wordy/.eslintrc | 23 - exercises/practice/wordy/.eslintrc.cjs | 38 + exercises/practice/wordy/babel.config.cjs | 4 + exercises/practice/wordy/babel.config.js | 20 - .../wordy/{jest.config.js => jest.config.cjs} | 0 exercises/practice/wordy/package.json | 24 +- exercises/practice/wordy/tsconfig.json | 23 +- package.json | 27 +- reference/implementing-a-concept-exercise.md | 8 +- scripts/{checksum => checksum.mjs} | 65 +- scripts/{ci-check => ci-check.mjs} | 9 +- scripts/{ci => ci.mjs} | 7 +- scripts/format | 43 - scripts/format.mjs | 47 + scripts/{helpers.js => helpers.mjs} | 41 +- scripts/{lint => lint.mjs} | 8 +- scripts/{name-check => name-check.mjs} | 17 +- scripts/{name-uniq => name-uniq.mjs} | 6 +- scripts/{pr-check => pr-check.mjs} | 8 +- scripts/{pr => pr.mjs} | 7 +- scripts/{stub-check => stub-check.mjs} | 4 +- scripts/{sync => sync.mjs} | 18 +- scripts/{test => test.mjs} | 5 +- tsconfig.json | 67 +- yarn.lock | 3100 ++++++----------- 787 files changed, 8185 insertions(+), 8414 deletions(-) create mode 100644 babel.config.cjs delete mode 100644 babel.config.js delete mode 100644 common/.eslintrc create mode 100644 common/.eslintrc.cjs create mode 100644 common/babel.config.cjs delete mode 100644 common/babel.config.js rename common/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/accumulate/.eslintrc create mode 100644 exercises/practice/accumulate/.eslintrc.cjs create mode 100644 exercises/practice/accumulate/babel.config.cjs delete mode 100644 exercises/practice/accumulate/babel.config.js rename exercises/practice/accumulate/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/acronym/.eslintrc create mode 100644 exercises/practice/acronym/.eslintrc.cjs create mode 100644 exercises/practice/acronym/babel.config.cjs delete mode 100644 exercises/practice/acronym/babel.config.js rename exercises/practice/acronym/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/all-your-base/.eslintrc create mode 100644 exercises/practice/all-your-base/.eslintrc.cjs create mode 100644 exercises/practice/all-your-base/babel.config.cjs delete mode 100644 exercises/practice/all-your-base/babel.config.js rename exercises/practice/all-your-base/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/allergies/.eslintrc create mode 100644 exercises/practice/allergies/.eslintrc.cjs create mode 100644 exercises/practice/allergies/babel.config.cjs delete mode 100644 exercises/practice/allergies/babel.config.js rename exercises/practice/allergies/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/alphametics/.eslintrc create mode 100644 exercises/practice/alphametics/.eslintrc.cjs create mode 100644 exercises/practice/alphametics/babel.config.cjs delete mode 100644 exercises/practice/alphametics/babel.config.js rename exercises/practice/alphametics/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/anagram/.eslintrc create mode 100644 exercises/practice/anagram/.eslintrc.cjs create mode 100644 exercises/practice/anagram/babel.config.cjs delete mode 100644 exercises/practice/anagram/babel.config.js rename exercises/practice/anagram/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/armstrong-numbers/.eslintrc create mode 100644 exercises/practice/armstrong-numbers/.eslintrc.cjs create mode 100644 exercises/practice/armstrong-numbers/babel.config.cjs delete mode 100644 exercises/practice/armstrong-numbers/babel.config.js rename exercises/practice/armstrong-numbers/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/atbash-cipher/.eslintrc create mode 100644 exercises/practice/atbash-cipher/.eslintrc.cjs create mode 100644 exercises/practice/atbash-cipher/babel.config.cjs delete mode 100644 exercises/practice/atbash-cipher/babel.config.js rename exercises/practice/atbash-cipher/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/beer-song/.eslintrc create mode 100644 exercises/practice/beer-song/.eslintrc.cjs create mode 100644 exercises/practice/beer-song/babel.config.cjs delete mode 100644 exercises/practice/beer-song/babel.config.js rename exercises/practice/beer-song/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/binary-search-tree/.eslintrc create mode 100644 exercises/practice/binary-search-tree/.eslintrc.cjs create mode 100644 exercises/practice/binary-search-tree/babel.config.cjs delete mode 100644 exercises/practice/binary-search-tree/babel.config.js rename exercises/practice/binary-search-tree/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/binary-search/.eslintrc create mode 100644 exercises/practice/binary-search/.eslintrc.cjs create mode 100644 exercises/practice/binary-search/babel.config.cjs delete mode 100644 exercises/practice/binary-search/babel.config.js rename exercises/practice/binary-search/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/bob/.eslintrc create mode 100644 exercises/practice/bob/.eslintrc.cjs create mode 100644 exercises/practice/bob/babel.config.cjs delete mode 100644 exercises/practice/bob/babel.config.js rename exercises/practice/bob/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/bowling/.eslintrc create mode 100644 exercises/practice/bowling/.eslintrc.cjs create mode 100644 exercises/practice/bowling/babel.config.cjs delete mode 100644 exercises/practice/bowling/babel.config.js rename exercises/practice/bowling/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/circular-buffer/.eslintrc create mode 100644 exercises/practice/circular-buffer/.eslintrc.cjs create mode 100644 exercises/practice/circular-buffer/babel.config.cjs delete mode 100644 exercises/practice/circular-buffer/babel.config.js rename exercises/practice/circular-buffer/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/clock/.eslintrc create mode 100644 exercises/practice/clock/.eslintrc.cjs create mode 100644 exercises/practice/clock/babel.config.cjs delete mode 100644 exercises/practice/clock/babel.config.js rename exercises/practice/clock/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/collatz-conjecture/.eslintrc create mode 100644 exercises/practice/collatz-conjecture/.eslintrc.cjs create mode 100644 exercises/practice/collatz-conjecture/babel.config.cjs delete mode 100644 exercises/practice/collatz-conjecture/babel.config.js rename exercises/practice/collatz-conjecture/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/complex-numbers/.eslintrc create mode 100644 exercises/practice/complex-numbers/.eslintrc.cjs create mode 100644 exercises/practice/complex-numbers/babel.config.cjs delete mode 100644 exercises/practice/complex-numbers/babel.config.js rename exercises/practice/complex-numbers/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/connect/.eslintrc create mode 100644 exercises/practice/connect/.eslintrc.cjs create mode 100644 exercises/practice/connect/babel.config.cjs delete mode 100644 exercises/practice/connect/babel.config.js rename exercises/practice/connect/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/crypto-square/.eslintrc create mode 100644 exercises/practice/crypto-square/.eslintrc.cjs create mode 100644 exercises/practice/crypto-square/babel.config.cjs delete mode 100644 exercises/practice/crypto-square/babel.config.js rename exercises/practice/crypto-square/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/custom-set/.eslintrc create mode 100644 exercises/practice/custom-set/.eslintrc.cjs create mode 100644 exercises/practice/custom-set/babel.config.cjs delete mode 100644 exercises/practice/custom-set/babel.config.js rename exercises/practice/custom-set/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/diamond/.eslintrc create mode 100644 exercises/practice/diamond/.eslintrc.cjs create mode 100644 exercises/practice/diamond/babel.config.cjs delete mode 100644 exercises/practice/diamond/babel.config.js rename exercises/practice/diamond/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/difference-of-squares/.eslintrc create mode 100644 exercises/practice/difference-of-squares/.eslintrc.cjs create mode 100644 exercises/practice/difference-of-squares/babel.config.cjs delete mode 100644 exercises/practice/difference-of-squares/babel.config.js rename exercises/practice/difference-of-squares/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/diffie-hellman/.eslintrc create mode 100644 exercises/practice/diffie-hellman/.eslintrc.cjs create mode 100644 exercises/practice/diffie-hellman/babel.config.cjs delete mode 100644 exercises/practice/diffie-hellman/babel.config.js rename exercises/practice/diffie-hellman/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/dnd-character/.eslintrc create mode 100644 exercises/practice/dnd-character/.eslintrc.cjs create mode 100644 exercises/practice/dnd-character/babel.config.cjs delete mode 100644 exercises/practice/dnd-character/babel.config.js rename exercises/practice/dnd-character/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/etl/.eslintrc create mode 100644 exercises/practice/etl/.eslintrc.cjs create mode 100644 exercises/practice/etl/babel.config.cjs delete mode 100644 exercises/practice/etl/babel.config.js rename exercises/practice/etl/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/flatten-array/.eslintrc create mode 100644 exercises/practice/flatten-array/.eslintrc.cjs create mode 100644 exercises/practice/flatten-array/babel.config.cjs delete mode 100644 exercises/practice/flatten-array/babel.config.js rename exercises/practice/flatten-array/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/food-chain/.eslintrc create mode 100644 exercises/practice/food-chain/.eslintrc.cjs create mode 100644 exercises/practice/food-chain/babel.config.cjs delete mode 100644 exercises/practice/food-chain/babel.config.js rename exercises/practice/food-chain/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/gigasecond/.eslintrc create mode 100644 exercises/practice/gigasecond/.eslintrc.cjs create mode 100644 exercises/practice/gigasecond/babel.config.cjs delete mode 100644 exercises/practice/gigasecond/babel.config.js rename exercises/practice/gigasecond/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/grade-school/.eslintrc create mode 100644 exercises/practice/grade-school/.eslintrc.cjs create mode 100644 exercises/practice/grade-school/babel.config.cjs delete mode 100644 exercises/practice/grade-school/babel.config.js rename exercises/practice/grade-school/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/grains/.eslintrc create mode 100644 exercises/practice/grains/.eslintrc.cjs create mode 100644 exercises/practice/grains/babel.config.cjs delete mode 100644 exercises/practice/grains/babel.config.js rename exercises/practice/grains/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/hamming/.eslintrc create mode 100644 exercises/practice/hamming/.eslintrc.cjs create mode 100644 exercises/practice/hamming/babel.config.cjs delete mode 100644 exercises/practice/hamming/babel.config.js rename exercises/practice/hamming/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/hello-world/.eslintrc create mode 100644 exercises/practice/hello-world/.eslintrc.cjs create mode 100644 exercises/practice/hello-world/babel.config.cjs delete mode 100644 exercises/practice/hello-world/babel.config.js rename exercises/practice/hello-world/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/house/.eslintrc create mode 100644 exercises/practice/house/.eslintrc.cjs create mode 100644 exercises/practice/house/babel.config.cjs delete mode 100644 exercises/practice/house/babel.config.js rename exercises/practice/house/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/isbn-verifier/.eslintrc create mode 100644 exercises/practice/isbn-verifier/.eslintrc.cjs create mode 100644 exercises/practice/isbn-verifier/babel.config.cjs delete mode 100644 exercises/practice/isbn-verifier/babel.config.js rename exercises/practice/isbn-verifier/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/isogram/.eslintrc create mode 100644 exercises/practice/isogram/.eslintrc.cjs create mode 100644 exercises/practice/isogram/babel.config.cjs delete mode 100644 exercises/practice/isogram/babel.config.js rename exercises/practice/isogram/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/kindergarten-garden/.eslintrc create mode 100644 exercises/practice/kindergarten-garden/.eslintrc.cjs create mode 100644 exercises/practice/kindergarten-garden/babel.config.cjs delete mode 100644 exercises/practice/kindergarten-garden/babel.config.js rename exercises/practice/kindergarten-garden/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/knapsack/.eslintrc create mode 100644 exercises/practice/knapsack/.eslintrc.cjs create mode 100644 exercises/practice/knapsack/babel.config.cjs delete mode 100644 exercises/practice/knapsack/babel.config.js rename exercises/practice/knapsack/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/largest-series-product/.eslintrc create mode 100644 exercises/practice/largest-series-product/.eslintrc.cjs create mode 100644 exercises/practice/largest-series-product/babel.config.cjs delete mode 100644 exercises/practice/largest-series-product/babel.config.js rename exercises/practice/largest-series-product/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/leap/.eslintrc create mode 100644 exercises/practice/leap/.eslintrc.cjs create mode 100644 exercises/practice/leap/babel.config.cjs delete mode 100644 exercises/practice/leap/babel.config.js rename exercises/practice/leap/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/linked-list/.eslintrc create mode 100644 exercises/practice/linked-list/.eslintrc.cjs create mode 100644 exercises/practice/linked-list/babel.config.cjs delete mode 100644 exercises/practice/linked-list/babel.config.js rename exercises/practice/linked-list/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/list-ops/.eslintrc create mode 100644 exercises/practice/list-ops/.eslintrc.cjs create mode 100644 exercises/practice/list-ops/babel.config.cjs delete mode 100644 exercises/practice/list-ops/babel.config.js rename exercises/practice/list-ops/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/luhn/.eslintrc create mode 100644 exercises/practice/luhn/.eslintrc.cjs create mode 100644 exercises/practice/luhn/babel.config.cjs delete mode 100644 exercises/practice/luhn/babel.config.js rename exercises/practice/luhn/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/matching-brackets/.eslintrc create mode 100644 exercises/practice/matching-brackets/.eslintrc.cjs create mode 100644 exercises/practice/matching-brackets/babel.config.cjs delete mode 100644 exercises/practice/matching-brackets/babel.config.js rename exercises/practice/matching-brackets/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/matrix/.eslintrc create mode 100644 exercises/practice/matrix/.eslintrc.cjs create mode 100644 exercises/practice/matrix/babel.config.cjs delete mode 100644 exercises/practice/matrix/babel.config.js rename exercises/practice/matrix/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/minesweeper/.eslintrc create mode 100644 exercises/practice/minesweeper/.eslintrc.cjs create mode 100644 exercises/practice/minesweeper/babel.config.cjs delete mode 100644 exercises/practice/minesweeper/babel.config.js rename exercises/practice/minesweeper/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/nth-prime/.eslintrc create mode 100644 exercises/practice/nth-prime/.eslintrc.cjs create mode 100644 exercises/practice/nth-prime/babel.config.cjs delete mode 100644 exercises/practice/nth-prime/babel.config.js rename exercises/practice/nth-prime/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/nucleotide-count/.eslintrc create mode 100644 exercises/practice/nucleotide-count/.eslintrc.cjs create mode 100644 exercises/practice/nucleotide-count/babel.config.cjs delete mode 100644 exercises/practice/nucleotide-count/babel.config.js rename exercises/practice/nucleotide-count/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/ocr-numbers/.eslintrc create mode 100644 exercises/practice/ocr-numbers/.eslintrc.cjs create mode 100644 exercises/practice/ocr-numbers/babel.config.cjs delete mode 100644 exercises/practice/ocr-numbers/babel.config.js rename exercises/practice/ocr-numbers/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/palindrome-products/.eslintrc create mode 100644 exercises/practice/palindrome-products/.eslintrc.cjs create mode 100644 exercises/practice/palindrome-products/babel.config.cjs delete mode 100644 exercises/practice/palindrome-products/babel.config.js rename exercises/practice/palindrome-products/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/pangram/.eslintrc create mode 100644 exercises/practice/pangram/.eslintrc.cjs create mode 100644 exercises/practice/pangram/babel.config.cjs delete mode 100644 exercises/practice/pangram/babel.config.js rename exercises/practice/pangram/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/pascals-triangle/.eslintrc create mode 100644 exercises/practice/pascals-triangle/.eslintrc.cjs create mode 100644 exercises/practice/pascals-triangle/babel.config.cjs delete mode 100644 exercises/practice/pascals-triangle/babel.config.js rename exercises/practice/pascals-triangle/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/perfect-numbers/.eslintrc create mode 100644 exercises/practice/perfect-numbers/.eslintrc.cjs create mode 100644 exercises/practice/perfect-numbers/babel.config.cjs delete mode 100644 exercises/practice/perfect-numbers/babel.config.js rename exercises/practice/perfect-numbers/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/phone-number/.eslintrc create mode 100644 exercises/practice/phone-number/.eslintrc.cjs create mode 100644 exercises/practice/phone-number/babel.config.cjs delete mode 100644 exercises/practice/phone-number/babel.config.js rename exercises/practice/phone-number/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/pig-latin/.eslintrc create mode 100644 exercises/practice/pig-latin/.eslintrc.cjs create mode 100644 exercises/practice/pig-latin/babel.config.cjs delete mode 100644 exercises/practice/pig-latin/babel.config.js rename exercises/practice/pig-latin/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/prime-factors/.eslintrc create mode 100644 exercises/practice/prime-factors/.eslintrc.cjs create mode 100644 exercises/practice/prime-factors/babel.config.cjs delete mode 100644 exercises/practice/prime-factors/babel.config.js rename exercises/practice/prime-factors/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/protein-translation/.eslintrc create mode 100644 exercises/practice/protein-translation/.eslintrc.cjs create mode 100644 exercises/practice/protein-translation/babel.config.cjs delete mode 100644 exercises/practice/protein-translation/babel.config.js rename exercises/practice/protein-translation/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/proverb/.eslintrc create mode 100644 exercises/practice/proverb/.eslintrc.cjs create mode 100644 exercises/practice/proverb/babel.config.cjs delete mode 100644 exercises/practice/proverb/babel.config.js rename exercises/practice/proverb/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/pythagorean-triplet/.eslintrc create mode 100644 exercises/practice/pythagorean-triplet/.eslintrc.cjs create mode 100644 exercises/practice/pythagorean-triplet/babel.config.cjs delete mode 100644 exercises/practice/pythagorean-triplet/babel.config.js rename exercises/practice/pythagorean-triplet/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/queen-attack/.eslintrc create mode 100644 exercises/practice/queen-attack/.eslintrc.cjs create mode 100644 exercises/practice/queen-attack/babel.config.cjs delete mode 100644 exercises/practice/queen-attack/babel.config.js rename exercises/practice/queen-attack/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/raindrops/.eslintrc create mode 100644 exercises/practice/raindrops/.eslintrc.cjs create mode 100644 exercises/practice/raindrops/babel.config.cjs delete mode 100644 exercises/practice/raindrops/babel.config.js rename exercises/practice/raindrops/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/rational-numbers/.eslintrc create mode 100644 exercises/practice/rational-numbers/.eslintrc.cjs create mode 100644 exercises/practice/rational-numbers/babel.config.cjs delete mode 100644 exercises/practice/rational-numbers/babel.config.js rename exercises/practice/rational-numbers/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/react/.eslintrc create mode 100644 exercises/practice/react/.eslintrc.cjs create mode 100644 exercises/practice/react/babel.config.cjs delete mode 100644 exercises/practice/react/babel.config.js rename exercises/practice/react/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/rectangles/.eslintrc create mode 100644 exercises/practice/rectangles/.eslintrc.cjs create mode 100644 exercises/practice/rectangles/babel.config.cjs delete mode 100644 exercises/practice/rectangles/babel.config.js rename exercises/practice/rectangles/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/resistor-color-duo/.eslintrc create mode 100644 exercises/practice/resistor-color-duo/.eslintrc.cjs create mode 100644 exercises/practice/resistor-color-duo/babel.config.cjs delete mode 100644 exercises/practice/resistor-color-duo/babel.config.js rename exercises/practice/resistor-color-duo/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/resistor-color-trio/.eslintrc create mode 100644 exercises/practice/resistor-color-trio/.eslintrc.cjs create mode 100644 exercises/practice/resistor-color-trio/babel.config.cjs delete mode 100644 exercises/practice/resistor-color-trio/babel.config.js rename exercises/practice/resistor-color-trio/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/resistor-color/.eslintrc create mode 100644 exercises/practice/resistor-color/.eslintrc.cjs create mode 100644 exercises/practice/resistor-color/babel.config.cjs delete mode 100644 exercises/practice/resistor-color/babel.config.js rename exercises/practice/resistor-color/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/reverse-string/.eslintrc create mode 100644 exercises/practice/reverse-string/.eslintrc.cjs create mode 100644 exercises/practice/reverse-string/babel.config.cjs delete mode 100644 exercises/practice/reverse-string/babel.config.js rename exercises/practice/reverse-string/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/rna-transcription/.eslintrc create mode 100644 exercises/practice/rna-transcription/.eslintrc.cjs create mode 100644 exercises/practice/rna-transcription/babel.config.cjs delete mode 100644 exercises/practice/rna-transcription/babel.config.js rename exercises/practice/rna-transcription/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/robot-name/.eslintrc create mode 100644 exercises/practice/robot-name/.eslintrc.cjs create mode 100644 exercises/practice/robot-name/babel.config.cjs delete mode 100644 exercises/practice/robot-name/babel.config.js rename exercises/practice/robot-name/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/robot-simulator/.eslintrc create mode 100644 exercises/practice/robot-simulator/.eslintrc.cjs create mode 100644 exercises/practice/robot-simulator/babel.config.cjs delete mode 100644 exercises/practice/robot-simulator/babel.config.js rename exercises/practice/robot-simulator/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/roman-numerals/.eslintrc create mode 100644 exercises/practice/roman-numerals/.eslintrc.cjs create mode 100644 exercises/practice/roman-numerals/babel.config.cjs delete mode 100644 exercises/practice/roman-numerals/babel.config.js rename exercises/practice/roman-numerals/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/rotational-cipher/.eslintrc create mode 100644 exercises/practice/rotational-cipher/.eslintrc.cjs create mode 100644 exercises/practice/rotational-cipher/babel.config.cjs delete mode 100644 exercises/practice/rotational-cipher/babel.config.js rename exercises/practice/rotational-cipher/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/run-length-encoding/.eslintrc create mode 100644 exercises/practice/run-length-encoding/.eslintrc.cjs create mode 100644 exercises/practice/run-length-encoding/babel.config.cjs delete mode 100644 exercises/practice/run-length-encoding/babel.config.js rename exercises/practice/run-length-encoding/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/saddle-points/.eslintrc create mode 100644 exercises/practice/saddle-points/.eslintrc.cjs create mode 100644 exercises/practice/saddle-points/babel.config.cjs delete mode 100644 exercises/practice/saddle-points/babel.config.js rename exercises/practice/saddle-points/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/say/.eslintrc create mode 100644 exercises/practice/say/.eslintrc.cjs create mode 100644 exercises/practice/say/babel.config.cjs delete mode 100644 exercises/practice/say/babel.config.js rename exercises/practice/say/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/scrabble-score/.eslintrc create mode 100644 exercises/practice/scrabble-score/.eslintrc.cjs create mode 100644 exercises/practice/scrabble-score/babel.config.cjs delete mode 100644 exercises/practice/scrabble-score/babel.config.js rename exercises/practice/scrabble-score/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/secret-handshake/.eslintrc create mode 100644 exercises/practice/secret-handshake/.eslintrc.cjs create mode 100644 exercises/practice/secret-handshake/babel.config.cjs delete mode 100644 exercises/practice/secret-handshake/babel.config.js rename exercises/practice/secret-handshake/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/series/.eslintrc create mode 100644 exercises/practice/series/.eslintrc.cjs create mode 100644 exercises/practice/series/babel.config.cjs delete mode 100644 exercises/practice/series/babel.config.js rename exercises/practice/series/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/sieve/.eslintrc create mode 100644 exercises/practice/sieve/.eslintrc.cjs create mode 100644 exercises/practice/sieve/babel.config.cjs delete mode 100644 exercises/practice/sieve/babel.config.js rename exercises/practice/sieve/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/simple-cipher/.eslintrc create mode 100644 exercises/practice/simple-cipher/.eslintrc.cjs create mode 100644 exercises/practice/simple-cipher/babel.config.cjs delete mode 100644 exercises/practice/simple-cipher/babel.config.js rename exercises/practice/simple-cipher/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/space-age/.eslintrc create mode 100644 exercises/practice/space-age/.eslintrc.cjs create mode 100644 exercises/practice/space-age/babel.config.cjs delete mode 100644 exercises/practice/space-age/babel.config.js rename exercises/practice/space-age/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/spiral-matrix/.eslintrc create mode 100644 exercises/practice/spiral-matrix/.eslintrc.cjs create mode 100644 exercises/practice/spiral-matrix/babel.config.cjs delete mode 100644 exercises/practice/spiral-matrix/babel.config.js rename exercises/practice/spiral-matrix/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/strain/.eslintrc create mode 100644 exercises/practice/strain/.eslintrc.cjs create mode 100644 exercises/practice/strain/babel.config.cjs delete mode 100644 exercises/practice/strain/babel.config.js rename exercises/practice/strain/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/sublist/.eslintrc create mode 100644 exercises/practice/sublist/.eslintrc.cjs create mode 100644 exercises/practice/sublist/babel.config.cjs delete mode 100644 exercises/practice/sublist/babel.config.js rename exercises/practice/sublist/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/sum-of-multiples/.eslintrc create mode 100644 exercises/practice/sum-of-multiples/.eslintrc.cjs create mode 100644 exercises/practice/sum-of-multiples/babel.config.cjs delete mode 100644 exercises/practice/sum-of-multiples/babel.config.js rename exercises/practice/sum-of-multiples/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/transpose/.eslintrc create mode 100644 exercises/practice/transpose/.eslintrc.cjs create mode 100644 exercises/practice/transpose/babel.config.cjs delete mode 100644 exercises/practice/transpose/babel.config.js rename exercises/practice/transpose/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/triangle/.eslintrc create mode 100644 exercises/practice/triangle/.eslintrc.cjs create mode 100644 exercises/practice/triangle/babel.config.cjs delete mode 100644 exercises/practice/triangle/babel.config.js rename exercises/practice/triangle/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/twelve-days/.eslintrc create mode 100644 exercises/practice/twelve-days/.eslintrc.cjs create mode 100644 exercises/practice/twelve-days/babel.config.cjs delete mode 100644 exercises/practice/twelve-days/babel.config.js rename exercises/practice/twelve-days/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/two-bucket/.eslintrc create mode 100644 exercises/practice/two-bucket/.eslintrc.cjs create mode 100644 exercises/practice/two-bucket/babel.config.cjs delete mode 100644 exercises/practice/two-bucket/babel.config.js rename exercises/practice/two-bucket/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/two-fer/.eslintrc create mode 100644 exercises/practice/two-fer/.eslintrc.cjs create mode 100644 exercises/practice/two-fer/babel.config.cjs delete mode 100644 exercises/practice/two-fer/babel.config.js rename exercises/practice/two-fer/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/variable-length-quantity/.eslintrc create mode 100644 exercises/practice/variable-length-quantity/.eslintrc.cjs create mode 100644 exercises/practice/variable-length-quantity/babel.config.cjs delete mode 100644 exercises/practice/variable-length-quantity/babel.config.js rename exercises/practice/variable-length-quantity/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/word-count/.eslintrc create mode 100644 exercises/practice/word-count/.eslintrc.cjs create mode 100644 exercises/practice/word-count/babel.config.cjs delete mode 100644 exercises/practice/word-count/babel.config.js rename exercises/practice/word-count/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/word-search/.eslintrc create mode 100644 exercises/practice/word-search/.eslintrc.cjs create mode 100644 exercises/practice/word-search/babel.config.cjs delete mode 100644 exercises/practice/word-search/babel.config.js rename exercises/practice/word-search/{jest.config.js => jest.config.cjs} (100%) delete mode 100644 exercises/practice/wordy/.eslintrc create mode 100644 exercises/practice/wordy/.eslintrc.cjs create mode 100644 exercises/practice/wordy/babel.config.cjs delete mode 100644 exercises/practice/wordy/babel.config.js rename exercises/practice/wordy/{jest.config.js => jest.config.cjs} (100%) rename scripts/{checksum => checksum.mjs} (64%) mode change 100755 => 100644 rename scripts/{ci-check => ci-check.mjs} (96%) rename scripts/{ci => ci.mjs} (93%) delete mode 100755 scripts/format create mode 100644 scripts/format.mjs rename scripts/{helpers.js => helpers.mjs} (94%) rename scripts/{lint => lint.mjs} (92%) rename scripts/{name-check => name-check.mjs} (80%) mode change 100755 => 100644 rename scripts/{name-uniq => name-uniq.mjs} (85%) mode change 100755 => 100644 rename scripts/{pr-check => pr-check.mjs} (97%) rename scripts/{pr => pr.mjs} (95%) rename scripts/{stub-check => stub-check.mjs} (90%) rename scripts/{sync => sync.mjs} (88%) mode change 100755 => 100644 rename scripts/{test => test.mjs} (88%) diff --git a/.eslintignore b/.eslintignore index 33e147b81..bfc691654 100644 --- a/.eslintignore +++ b/.eslintignore @@ -11,9 +11,3 @@ # Configuration /config -# These have their own config files (not overrides) -/common/* -/exercises/* - -# typescript-eslint can't lint correctly files in a project without extension -/scripts/* diff --git a/.eslintrc b/.eslintrc index db05a440d..1a692a8f8 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,21 +1,12 @@ { "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, "extends": "@exercism/eslint-config-typescript", "env": { "jest": true }, "overrides": [ { - "files": ["**/.meta/proof.ci.ts", "**/.meta/exemplar.ts", "**/*.test.ts"], + "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], "excludedFiles": ["custom.test.ts"], "extends": "@exercism/eslint-config-typescript/maintainers" } diff --git a/.github/workflows/action-format.yml b/.github/workflows/action-format.yml index 005971162..e11d788f9 100644 --- a/.github/workflows/action-format.yml +++ b/.github/workflows/action-format.yml @@ -62,8 +62,6 @@ jobs: - name: 'Format code' run: ./bin/format.sh - env: - EXERCISM_PRETTIER_VERSION: '2.3.2' - name: 'Commit formatted code' run: | diff --git a/.github/workflows/verify-code-formatting.yml b/.github/workflows/verify-code-formatting.yml index 4e721eced..d2cba1c41 100644 --- a/.github/workflows/verify-code-formatting.yml +++ b/.github/workflows/verify-code-formatting.yml @@ -14,5 +14,3 @@ jobs: - name: 'Verify formatting of all files' run: ./bin/check-formatting.sh - env: - EXERCISM_PRETTIER_VERSION: '2.3.2' diff --git a/.prettierignore b/.prettierignore index 1a56ebd5b..246d36fd7 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,3 +2,6 @@ /.github/workflows/sync-labels.yml exercises/**/README.md !/README.md + +# These are formatted via configlet and will not match prettier +exercises/**/.meta/config.json diff --git a/babel.config.cjs b/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/bin/check-formatting.sh b/bin/check-formatting.sh index 4dc27e952..56bbf67c9 100755 --- a/bin/check-formatting.sh +++ b/bin/check-formatting.sh @@ -1,3 +1,27 @@ #!/bin/bash +if [ -z "$EXERCISM_PRETTIER_VERSION" ]; then + echo "Pulling prettier version from package.json" + EXERCISM_PRETTIER_VERSION=$(yarn list --pattern prettier | grep -Po '.*\sprettier@\K.*') +fi + +if [ -z "$EXERCISM_PRETTIER_VERSION" ]; then + echo "---------------------------------------------------" + echo "This script requires the EXERCISM_PRETTIER_VERSION variable to work." + echo "Please see https://exercism.org/docs/building/markdown/style-guide for guidance." + echo "---------------------------------------------------" + echo "This is what yarn list reports:" + echo "$(yarn list --pattern prettier)" + echo "" + echo "This is the version that can be extracted:" + echo "$(yarn list --pattern prettier | grep -Po '.*\sprettier@\K.*')" + echo "" + echo "These files are found in the repo root:" + echo "$(ls -p | grep -v /)" + echo "---------------------------------------------------" + exit 1 +else + echo "Running format with prettier@$EXERCISM_PRETTIER_VERSION" +fi + npx "prettier@$EXERCISM_PRETTIER_VERSION" --check "**/*.{js,jsx,ts,tsx,css,sass,scss,html,json,md,yml}" diff --git a/bin/format.sh b/bin/format.sh index 2a2141a4f..0f5f379f7 100755 --- a/bin/format.sh +++ b/bin/format.sh @@ -1,9 +1,27 @@ #!/usr/bin/env bash if [ -z "$EXERCISM_PRETTIER_VERSION" ]; then - echo "This script requires the EXERCISM_PRETTIER_VERSION variable to work." - echo "Please see https://github.com/exercism/v3/blob/master/docs/maintainers/style-guide.md for guidance." - exit 1 + echo "Pulling prettier version from package.json" + EXERCISM_PRETTIER_VERSION=$(yarn list --pattern prettier | grep -Po '.*\sprettier@\K.*') +fi + +if [ -z "$EXERCISM_PRETTIER_VERSION" ]; then + echo "---------------------------------------------------" + echo "This script requires the EXERCISM_PRETTIER_VERSION variable to work." + echo "Please see https://exercism.org/docs/building/markdown/style-guide for guidance." + echo "---------------------------------------------------" + echo "This is what yarn list reports:" + echo "$(yarn list --pattern prettier)" + echo "" + echo "This is the version that can be extracted:" + echo "$(yarn list --pattern prettier | grep -Po '.*\sprettier@\K.*')" + echo "" + echo "These files are found in the repo root:" + echo "$(ls -p | grep -v /)" + echo "---------------------------------------------------" + exit 1 +else + echo "Running format with prettier@$EXERCISM_PRETTIER_VERSION" fi npx "prettier@$EXERCISM_PRETTIER_VERSION" --write "**/*.{js,jsx,ts,tsx,css,sass,scss,html,json,md,yml}" diff --git a/common/.eslintignore b/common/.eslintignore index e3e45c396..e08db2a94 100644 --- a/common/.eslintignore +++ b/common/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/common/.eslintrc b/common/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/common/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/common/.eslintrc.cjs b/common/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/common/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/common/babel.config.cjs b/common/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/common/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/common/babel.config.js b/common/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/common/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/common/jest.config.js b/common/jest.config.cjs similarity index 100% rename from common/jest.config.js rename to common/jest.config.cjs diff --git a/common/package.json b/common/package.json index 63b5c8182..0bd14778a 100644 --- a/common/package.json +++ b/common/package.json @@ -11,21 +11,20 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", + "prettier": "^2.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/common/tsconfig.json b/common/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/common/tsconfig.json +++ b/common/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/accumulate/.eslintignore b/exercises/practice/accumulate/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/accumulate/.eslintignore +++ b/exercises/practice/accumulate/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/accumulate/.eslintrc b/exercises/practice/accumulate/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/accumulate/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/accumulate/.eslintrc.cjs b/exercises/practice/accumulate/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/accumulate/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/accumulate/babel.config.cjs b/exercises/practice/accumulate/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/accumulate/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/accumulate/babel.config.js b/exercises/practice/accumulate/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/accumulate/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/accumulate/jest.config.js b/exercises/practice/accumulate/jest.config.cjs similarity index 100% rename from exercises/practice/accumulate/jest.config.js rename to exercises/practice/accumulate/jest.config.cjs diff --git a/exercises/practice/accumulate/package.json b/exercises/practice/accumulate/package.json index 3e891b091..a80e789cf 100644 --- a/exercises/practice/accumulate/package.json +++ b/exercises/practice/accumulate/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/accumulate/tsconfig.json b/exercises/practice/accumulate/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/accumulate/tsconfig.json +++ b/exercises/practice/accumulate/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/acronym/.eslintignore b/exercises/practice/acronym/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/acronym/.eslintignore +++ b/exercises/practice/acronym/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/acronym/.eslintrc b/exercises/practice/acronym/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/acronym/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/acronym/.eslintrc.cjs b/exercises/practice/acronym/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/acronym/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/acronym/babel.config.cjs b/exercises/practice/acronym/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/acronym/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/acronym/babel.config.js b/exercises/practice/acronym/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/acronym/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/acronym/jest.config.js b/exercises/practice/acronym/jest.config.cjs similarity index 100% rename from exercises/practice/acronym/jest.config.js rename to exercises/practice/acronym/jest.config.cjs diff --git a/exercises/practice/acronym/package.json b/exercises/practice/acronym/package.json index be432cf83..49d8574ce 100644 --- a/exercises/practice/acronym/package.json +++ b/exercises/practice/acronym/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/acronym/tsconfig.json b/exercises/practice/acronym/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/acronym/tsconfig.json +++ b/exercises/practice/acronym/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/all-your-base/.eslintignore b/exercises/practice/all-your-base/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/all-your-base/.eslintignore +++ b/exercises/practice/all-your-base/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/all-your-base/.eslintrc b/exercises/practice/all-your-base/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/all-your-base/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/all-your-base/.eslintrc.cjs b/exercises/practice/all-your-base/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/all-your-base/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/all-your-base/babel.config.cjs b/exercises/practice/all-your-base/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/all-your-base/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/all-your-base/babel.config.js b/exercises/practice/all-your-base/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/all-your-base/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/all-your-base/jest.config.js b/exercises/practice/all-your-base/jest.config.cjs similarity index 100% rename from exercises/practice/all-your-base/jest.config.js rename to exercises/practice/all-your-base/jest.config.cjs diff --git a/exercises/practice/all-your-base/package.json b/exercises/practice/all-your-base/package.json index 8daa2583e..c6cd31aa4 100644 --- a/exercises/practice/all-your-base/package.json +++ b/exercises/practice/all-your-base/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/all-your-base/tsconfig.json b/exercises/practice/all-your-base/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/all-your-base/tsconfig.json +++ b/exercises/practice/all-your-base/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/allergies/.eslintignore b/exercises/practice/allergies/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/allergies/.eslintignore +++ b/exercises/practice/allergies/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/allergies/.eslintrc b/exercises/practice/allergies/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/allergies/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/allergies/.eslintrc.cjs b/exercises/practice/allergies/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/allergies/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/allergies/babel.config.cjs b/exercises/practice/allergies/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/allergies/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/allergies/babel.config.js b/exercises/practice/allergies/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/allergies/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/allergies/jest.config.js b/exercises/practice/allergies/jest.config.cjs similarity index 100% rename from exercises/practice/allergies/jest.config.js rename to exercises/practice/allergies/jest.config.cjs diff --git a/exercises/practice/allergies/package.json b/exercises/practice/allergies/package.json index b86e2b0ef..48ed068ed 100644 --- a/exercises/practice/allergies/package.json +++ b/exercises/practice/allergies/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/allergies/tsconfig.json b/exercises/practice/allergies/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/allergies/tsconfig.json +++ b/exercises/practice/allergies/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/alphametics/.eslintignore b/exercises/practice/alphametics/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/alphametics/.eslintignore +++ b/exercises/practice/alphametics/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/alphametics/.eslintrc b/exercises/practice/alphametics/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/alphametics/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/alphametics/.eslintrc.cjs b/exercises/practice/alphametics/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/alphametics/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/alphametics/babel.config.cjs b/exercises/practice/alphametics/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/alphametics/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/alphametics/babel.config.js b/exercises/practice/alphametics/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/alphametics/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/alphametics/jest.config.js b/exercises/practice/alphametics/jest.config.cjs similarity index 100% rename from exercises/practice/alphametics/jest.config.js rename to exercises/practice/alphametics/jest.config.cjs diff --git a/exercises/practice/alphametics/package.json b/exercises/practice/alphametics/package.json index efc342d1f..e05f5767a 100644 --- a/exercises/practice/alphametics/package.json +++ b/exercises/practice/alphametics/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/alphametics/tsconfig.json b/exercises/practice/alphametics/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/alphametics/tsconfig.json +++ b/exercises/practice/alphametics/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/anagram/.eslintignore b/exercises/practice/anagram/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/anagram/.eslintignore +++ b/exercises/practice/anagram/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/anagram/.eslintrc b/exercises/practice/anagram/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/anagram/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/anagram/.eslintrc.cjs b/exercises/practice/anagram/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/anagram/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/anagram/babel.config.cjs b/exercises/practice/anagram/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/anagram/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/anagram/babel.config.js b/exercises/practice/anagram/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/anagram/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/anagram/jest.config.js b/exercises/practice/anagram/jest.config.cjs similarity index 100% rename from exercises/practice/anagram/jest.config.js rename to exercises/practice/anagram/jest.config.cjs diff --git a/exercises/practice/anagram/package.json b/exercises/practice/anagram/package.json index c2f856654..3e2377911 100644 --- a/exercises/practice/anagram/package.json +++ b/exercises/practice/anagram/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/anagram/tsconfig.json b/exercises/practice/anagram/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/anagram/tsconfig.json +++ b/exercises/practice/anagram/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/armstrong-numbers/.eslintignore b/exercises/practice/armstrong-numbers/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/armstrong-numbers/.eslintignore +++ b/exercises/practice/armstrong-numbers/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/armstrong-numbers/.eslintrc b/exercises/practice/armstrong-numbers/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/armstrong-numbers/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/armstrong-numbers/.eslintrc.cjs b/exercises/practice/armstrong-numbers/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/armstrong-numbers/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/armstrong-numbers/babel.config.cjs b/exercises/practice/armstrong-numbers/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/armstrong-numbers/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/armstrong-numbers/babel.config.js b/exercises/practice/armstrong-numbers/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/armstrong-numbers/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/armstrong-numbers/jest.config.js b/exercises/practice/armstrong-numbers/jest.config.cjs similarity index 100% rename from exercises/practice/armstrong-numbers/jest.config.js rename to exercises/practice/armstrong-numbers/jest.config.cjs diff --git a/exercises/practice/armstrong-numbers/package.json b/exercises/practice/armstrong-numbers/package.json index 2ad3eb9aa..4d948a7db 100644 --- a/exercises/practice/armstrong-numbers/package.json +++ b/exercises/practice/armstrong-numbers/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/armstrong-numbers/tsconfig.json b/exercises/practice/armstrong-numbers/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/armstrong-numbers/tsconfig.json +++ b/exercises/practice/armstrong-numbers/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/atbash-cipher/.eslintignore b/exercises/practice/atbash-cipher/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/atbash-cipher/.eslintignore +++ b/exercises/practice/atbash-cipher/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/atbash-cipher/.eslintrc b/exercises/practice/atbash-cipher/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/atbash-cipher/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/atbash-cipher/.eslintrc.cjs b/exercises/practice/atbash-cipher/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/atbash-cipher/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/atbash-cipher/babel.config.cjs b/exercises/practice/atbash-cipher/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/atbash-cipher/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/atbash-cipher/babel.config.js b/exercises/practice/atbash-cipher/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/atbash-cipher/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/atbash-cipher/jest.config.js b/exercises/practice/atbash-cipher/jest.config.cjs similarity index 100% rename from exercises/practice/atbash-cipher/jest.config.js rename to exercises/practice/atbash-cipher/jest.config.cjs diff --git a/exercises/practice/atbash-cipher/package.json b/exercises/practice/atbash-cipher/package.json index 0358500e1..06c8bc854 100644 --- a/exercises/practice/atbash-cipher/package.json +++ b/exercises/practice/atbash-cipher/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/atbash-cipher/tsconfig.json b/exercises/practice/atbash-cipher/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/atbash-cipher/tsconfig.json +++ b/exercises/practice/atbash-cipher/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/beer-song/.eslintignore b/exercises/practice/beer-song/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/beer-song/.eslintignore +++ b/exercises/practice/beer-song/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/beer-song/.eslintrc b/exercises/practice/beer-song/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/beer-song/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/beer-song/.eslintrc.cjs b/exercises/practice/beer-song/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/beer-song/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/beer-song/babel.config.cjs b/exercises/practice/beer-song/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/beer-song/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/beer-song/babel.config.js b/exercises/practice/beer-song/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/beer-song/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/beer-song/jest.config.js b/exercises/practice/beer-song/jest.config.cjs similarity index 100% rename from exercises/practice/beer-song/jest.config.js rename to exercises/practice/beer-song/jest.config.cjs diff --git a/exercises/practice/beer-song/package.json b/exercises/practice/beer-song/package.json index 5e9a8c8d6..0f401de5d 100644 --- a/exercises/practice/beer-song/package.json +++ b/exercises/practice/beer-song/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/beer-song/tsconfig.json b/exercises/practice/beer-song/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/beer-song/tsconfig.json +++ b/exercises/practice/beer-song/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/binary-search-tree/.eslintignore b/exercises/practice/binary-search-tree/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/binary-search-tree/.eslintignore +++ b/exercises/practice/binary-search-tree/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/binary-search-tree/.eslintrc b/exercises/practice/binary-search-tree/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/binary-search-tree/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/binary-search-tree/.eslintrc.cjs b/exercises/practice/binary-search-tree/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/binary-search-tree/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/binary-search-tree/babel.config.cjs b/exercises/practice/binary-search-tree/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/binary-search-tree/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/binary-search-tree/babel.config.js b/exercises/practice/binary-search-tree/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/binary-search-tree/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/binary-search-tree/jest.config.js b/exercises/practice/binary-search-tree/jest.config.cjs similarity index 100% rename from exercises/practice/binary-search-tree/jest.config.js rename to exercises/practice/binary-search-tree/jest.config.cjs diff --git a/exercises/practice/binary-search-tree/package.json b/exercises/practice/binary-search-tree/package.json index 35a62f9fc..0a4448639 100644 --- a/exercises/practice/binary-search-tree/package.json +++ b/exercises/practice/binary-search-tree/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/binary-search-tree/tsconfig.json b/exercises/practice/binary-search-tree/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/binary-search-tree/tsconfig.json +++ b/exercises/practice/binary-search-tree/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/binary-search/.eslintignore b/exercises/practice/binary-search/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/binary-search/.eslintignore +++ b/exercises/practice/binary-search/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/binary-search/.eslintrc b/exercises/practice/binary-search/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/binary-search/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/binary-search/.eslintrc.cjs b/exercises/practice/binary-search/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/binary-search/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/binary-search/babel.config.cjs b/exercises/practice/binary-search/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/binary-search/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/binary-search/babel.config.js b/exercises/practice/binary-search/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/binary-search/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/binary-search/jest.config.js b/exercises/practice/binary-search/jest.config.cjs similarity index 100% rename from exercises/practice/binary-search/jest.config.js rename to exercises/practice/binary-search/jest.config.cjs diff --git a/exercises/practice/binary-search/package.json b/exercises/practice/binary-search/package.json index 32b9a2d30..aed90f849 100644 --- a/exercises/practice/binary-search/package.json +++ b/exercises/practice/binary-search/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/binary-search/tsconfig.json b/exercises/practice/binary-search/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/binary-search/tsconfig.json +++ b/exercises/practice/binary-search/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/bob/.eslintignore b/exercises/practice/bob/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/bob/.eslintignore +++ b/exercises/practice/bob/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/bob/.eslintrc b/exercises/practice/bob/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/bob/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/bob/.eslintrc.cjs b/exercises/practice/bob/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/bob/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/bob/babel.config.cjs b/exercises/practice/bob/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/bob/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/bob/babel.config.js b/exercises/practice/bob/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/bob/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/bob/jest.config.js b/exercises/practice/bob/jest.config.cjs similarity index 100% rename from exercises/practice/bob/jest.config.js rename to exercises/practice/bob/jest.config.cjs diff --git a/exercises/practice/bob/package.json b/exercises/practice/bob/package.json index 55fb0b028..5a3bf8e68 100644 --- a/exercises/practice/bob/package.json +++ b/exercises/practice/bob/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/bob/tsconfig.json b/exercises/practice/bob/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/bob/tsconfig.json +++ b/exercises/practice/bob/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/bowling/.eslintignore b/exercises/practice/bowling/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/bowling/.eslintignore +++ b/exercises/practice/bowling/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/bowling/.eslintrc b/exercises/practice/bowling/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/bowling/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/bowling/.eslintrc.cjs b/exercises/practice/bowling/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/bowling/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/bowling/babel.config.cjs b/exercises/practice/bowling/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/bowling/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/bowling/babel.config.js b/exercises/practice/bowling/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/bowling/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/bowling/jest.config.js b/exercises/practice/bowling/jest.config.cjs similarity index 100% rename from exercises/practice/bowling/jest.config.js rename to exercises/practice/bowling/jest.config.cjs diff --git a/exercises/practice/bowling/package.json b/exercises/practice/bowling/package.json index a86138699..8531cd867 100644 --- a/exercises/practice/bowling/package.json +++ b/exercises/practice/bowling/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/bowling/tsconfig.json b/exercises/practice/bowling/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/bowling/tsconfig.json +++ b/exercises/practice/bowling/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/circular-buffer/.eslintignore b/exercises/practice/circular-buffer/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/circular-buffer/.eslintignore +++ b/exercises/practice/circular-buffer/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/circular-buffer/.eslintrc b/exercises/practice/circular-buffer/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/circular-buffer/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/circular-buffer/.eslintrc.cjs b/exercises/practice/circular-buffer/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/circular-buffer/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/circular-buffer/babel.config.cjs b/exercises/practice/circular-buffer/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/circular-buffer/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/circular-buffer/babel.config.js b/exercises/practice/circular-buffer/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/circular-buffer/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/circular-buffer/jest.config.js b/exercises/practice/circular-buffer/jest.config.cjs similarity index 100% rename from exercises/practice/circular-buffer/jest.config.js rename to exercises/practice/circular-buffer/jest.config.cjs diff --git a/exercises/practice/circular-buffer/package.json b/exercises/practice/circular-buffer/package.json index 2d7076236..caeece889 100644 --- a/exercises/practice/circular-buffer/package.json +++ b/exercises/practice/circular-buffer/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/circular-buffer/tsconfig.json b/exercises/practice/circular-buffer/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/circular-buffer/tsconfig.json +++ b/exercises/practice/circular-buffer/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/clock/.eslintignore b/exercises/practice/clock/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/clock/.eslintignore +++ b/exercises/practice/clock/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/clock/.eslintrc b/exercises/practice/clock/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/clock/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/clock/.eslintrc.cjs b/exercises/practice/clock/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/clock/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/clock/babel.config.cjs b/exercises/practice/clock/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/clock/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/clock/babel.config.js b/exercises/practice/clock/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/clock/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/clock/jest.config.js b/exercises/practice/clock/jest.config.cjs similarity index 100% rename from exercises/practice/clock/jest.config.js rename to exercises/practice/clock/jest.config.cjs diff --git a/exercises/practice/clock/package.json b/exercises/practice/clock/package.json index 33739b7f7..083c59a5c 100644 --- a/exercises/practice/clock/package.json +++ b/exercises/practice/clock/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/clock/tsconfig.json b/exercises/practice/clock/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/clock/tsconfig.json +++ b/exercises/practice/clock/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/collatz-conjecture/.eslintignore b/exercises/practice/collatz-conjecture/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/collatz-conjecture/.eslintignore +++ b/exercises/practice/collatz-conjecture/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/collatz-conjecture/.eslintrc b/exercises/practice/collatz-conjecture/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/collatz-conjecture/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/collatz-conjecture/.eslintrc.cjs b/exercises/practice/collatz-conjecture/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/collatz-conjecture/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/collatz-conjecture/babel.config.cjs b/exercises/practice/collatz-conjecture/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/collatz-conjecture/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/collatz-conjecture/babel.config.js b/exercises/practice/collatz-conjecture/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/collatz-conjecture/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/collatz-conjecture/jest.config.js b/exercises/practice/collatz-conjecture/jest.config.cjs similarity index 100% rename from exercises/practice/collatz-conjecture/jest.config.js rename to exercises/practice/collatz-conjecture/jest.config.cjs diff --git a/exercises/practice/collatz-conjecture/package.json b/exercises/practice/collatz-conjecture/package.json index b7d662597..b831fbba4 100644 --- a/exercises/practice/collatz-conjecture/package.json +++ b/exercises/practice/collatz-conjecture/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/collatz-conjecture/tsconfig.json b/exercises/practice/collatz-conjecture/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/collatz-conjecture/tsconfig.json +++ b/exercises/practice/collatz-conjecture/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/complex-numbers/.eslintignore b/exercises/practice/complex-numbers/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/complex-numbers/.eslintignore +++ b/exercises/practice/complex-numbers/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/complex-numbers/.eslintrc b/exercises/practice/complex-numbers/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/complex-numbers/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/complex-numbers/.eslintrc.cjs b/exercises/practice/complex-numbers/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/complex-numbers/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/complex-numbers/babel.config.cjs b/exercises/practice/complex-numbers/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/complex-numbers/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/complex-numbers/babel.config.js b/exercises/practice/complex-numbers/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/complex-numbers/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/complex-numbers/jest.config.js b/exercises/practice/complex-numbers/jest.config.cjs similarity index 100% rename from exercises/practice/complex-numbers/jest.config.js rename to exercises/practice/complex-numbers/jest.config.cjs diff --git a/exercises/practice/complex-numbers/package.json b/exercises/practice/complex-numbers/package.json index 3e55ee22a..1d3c3693d 100644 --- a/exercises/practice/complex-numbers/package.json +++ b/exercises/practice/complex-numbers/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/complex-numbers/tsconfig.json b/exercises/practice/complex-numbers/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/complex-numbers/tsconfig.json +++ b/exercises/practice/complex-numbers/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/connect/.eslintignore b/exercises/practice/connect/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/connect/.eslintignore +++ b/exercises/practice/connect/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/connect/.eslintrc b/exercises/practice/connect/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/connect/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/connect/.eslintrc.cjs b/exercises/practice/connect/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/connect/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/connect/babel.config.cjs b/exercises/practice/connect/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/connect/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/connect/babel.config.js b/exercises/practice/connect/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/connect/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/connect/jest.config.js b/exercises/practice/connect/jest.config.cjs similarity index 100% rename from exercises/practice/connect/jest.config.js rename to exercises/practice/connect/jest.config.cjs diff --git a/exercises/practice/connect/package.json b/exercises/practice/connect/package.json index d3fe64009..5abc108f6 100644 --- a/exercises/practice/connect/package.json +++ b/exercises/practice/connect/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/connect/tsconfig.json b/exercises/practice/connect/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/connect/tsconfig.json +++ b/exercises/practice/connect/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/crypto-square/.eslintignore b/exercises/practice/crypto-square/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/crypto-square/.eslintignore +++ b/exercises/practice/crypto-square/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/crypto-square/.eslintrc b/exercises/practice/crypto-square/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/crypto-square/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/crypto-square/.eslintrc.cjs b/exercises/practice/crypto-square/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/crypto-square/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/crypto-square/babel.config.cjs b/exercises/practice/crypto-square/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/crypto-square/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/crypto-square/babel.config.js b/exercises/practice/crypto-square/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/crypto-square/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/crypto-square/jest.config.js b/exercises/practice/crypto-square/jest.config.cjs similarity index 100% rename from exercises/practice/crypto-square/jest.config.js rename to exercises/practice/crypto-square/jest.config.cjs diff --git a/exercises/practice/crypto-square/package.json b/exercises/practice/crypto-square/package.json index 8cf8c4660..8ff09e9f8 100644 --- a/exercises/practice/crypto-square/package.json +++ b/exercises/practice/crypto-square/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/crypto-square/tsconfig.json b/exercises/practice/crypto-square/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/crypto-square/tsconfig.json +++ b/exercises/practice/crypto-square/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/custom-set/.eslintignore b/exercises/practice/custom-set/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/custom-set/.eslintignore +++ b/exercises/practice/custom-set/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/custom-set/.eslintrc b/exercises/practice/custom-set/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/custom-set/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/custom-set/.eslintrc.cjs b/exercises/practice/custom-set/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/custom-set/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/custom-set/babel.config.cjs b/exercises/practice/custom-set/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/custom-set/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/custom-set/babel.config.js b/exercises/practice/custom-set/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/custom-set/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/custom-set/jest.config.js b/exercises/practice/custom-set/jest.config.cjs similarity index 100% rename from exercises/practice/custom-set/jest.config.js rename to exercises/practice/custom-set/jest.config.cjs diff --git a/exercises/practice/custom-set/package.json b/exercises/practice/custom-set/package.json index 2821f0354..e93786ff3 100644 --- a/exercises/practice/custom-set/package.json +++ b/exercises/practice/custom-set/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/custom-set/tsconfig.json b/exercises/practice/custom-set/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/custom-set/tsconfig.json +++ b/exercises/practice/custom-set/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/diamond/.eslintignore b/exercises/practice/diamond/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/diamond/.eslintignore +++ b/exercises/practice/diamond/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/diamond/.eslintrc b/exercises/practice/diamond/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/diamond/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/diamond/.eslintrc.cjs b/exercises/practice/diamond/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/diamond/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/diamond/babel.config.cjs b/exercises/practice/diamond/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/diamond/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/diamond/babel.config.js b/exercises/practice/diamond/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/diamond/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/diamond/jest.config.js b/exercises/practice/diamond/jest.config.cjs similarity index 100% rename from exercises/practice/diamond/jest.config.js rename to exercises/practice/diamond/jest.config.cjs diff --git a/exercises/practice/diamond/package.json b/exercises/practice/diamond/package.json index 4417189b1..2ad711a08 100644 --- a/exercises/practice/diamond/package.json +++ b/exercises/practice/diamond/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/diamond/tsconfig.json b/exercises/practice/diamond/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/diamond/tsconfig.json +++ b/exercises/practice/diamond/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/difference-of-squares/.eslintignore b/exercises/practice/difference-of-squares/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/difference-of-squares/.eslintignore +++ b/exercises/practice/difference-of-squares/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/difference-of-squares/.eslintrc b/exercises/practice/difference-of-squares/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/difference-of-squares/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/difference-of-squares/.eslintrc.cjs b/exercises/practice/difference-of-squares/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/difference-of-squares/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/difference-of-squares/babel.config.cjs b/exercises/practice/difference-of-squares/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/difference-of-squares/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/difference-of-squares/babel.config.js b/exercises/practice/difference-of-squares/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/difference-of-squares/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/difference-of-squares/jest.config.js b/exercises/practice/difference-of-squares/jest.config.cjs similarity index 100% rename from exercises/practice/difference-of-squares/jest.config.js rename to exercises/practice/difference-of-squares/jest.config.cjs diff --git a/exercises/practice/difference-of-squares/package.json b/exercises/practice/difference-of-squares/package.json index c3091d233..12e868838 100644 --- a/exercises/practice/difference-of-squares/package.json +++ b/exercises/practice/difference-of-squares/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/difference-of-squares/tsconfig.json b/exercises/practice/difference-of-squares/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/difference-of-squares/tsconfig.json +++ b/exercises/practice/difference-of-squares/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/diffie-hellman/.eslintignore b/exercises/practice/diffie-hellman/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/diffie-hellman/.eslintignore +++ b/exercises/practice/diffie-hellman/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/diffie-hellman/.eslintrc b/exercises/practice/diffie-hellman/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/diffie-hellman/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/diffie-hellman/.eslintrc.cjs b/exercises/practice/diffie-hellman/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/diffie-hellman/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/diffie-hellman/babel.config.cjs b/exercises/practice/diffie-hellman/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/diffie-hellman/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/diffie-hellman/babel.config.js b/exercises/practice/diffie-hellman/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/diffie-hellman/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/diffie-hellman/jest.config.js b/exercises/practice/diffie-hellman/jest.config.cjs similarity index 100% rename from exercises/practice/diffie-hellman/jest.config.js rename to exercises/practice/diffie-hellman/jest.config.cjs diff --git a/exercises/practice/diffie-hellman/package.json b/exercises/practice/diffie-hellman/package.json index bc003b8fb..6c1faf7e0 100644 --- a/exercises/practice/diffie-hellman/package.json +++ b/exercises/practice/diffie-hellman/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/diffie-hellman/tsconfig.json b/exercises/practice/diffie-hellman/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/diffie-hellman/tsconfig.json +++ b/exercises/practice/diffie-hellman/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/dnd-character/.eslintignore b/exercises/practice/dnd-character/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/dnd-character/.eslintignore +++ b/exercises/practice/dnd-character/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/dnd-character/.eslintrc b/exercises/practice/dnd-character/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/dnd-character/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/dnd-character/.eslintrc.cjs b/exercises/practice/dnd-character/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/dnd-character/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/dnd-character/babel.config.cjs b/exercises/practice/dnd-character/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/dnd-character/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/dnd-character/babel.config.js b/exercises/practice/dnd-character/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/dnd-character/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/dnd-character/jest.config.js b/exercises/practice/dnd-character/jest.config.cjs similarity index 100% rename from exercises/practice/dnd-character/jest.config.js rename to exercises/practice/dnd-character/jest.config.cjs diff --git a/exercises/practice/dnd-character/package.json b/exercises/practice/dnd-character/package.json index c7b99a5dd..939f299cf 100644 --- a/exercises/practice/dnd-character/package.json +++ b/exercises/practice/dnd-character/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/dnd-character/tsconfig.json b/exercises/practice/dnd-character/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/dnd-character/tsconfig.json +++ b/exercises/practice/dnd-character/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/etl/.eslintignore b/exercises/practice/etl/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/etl/.eslintignore +++ b/exercises/practice/etl/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/etl/.eslintrc b/exercises/practice/etl/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/etl/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/etl/.eslintrc.cjs b/exercises/practice/etl/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/etl/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/etl/babel.config.cjs b/exercises/practice/etl/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/etl/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/etl/babel.config.js b/exercises/practice/etl/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/etl/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/etl/jest.config.js b/exercises/practice/etl/jest.config.cjs similarity index 100% rename from exercises/practice/etl/jest.config.js rename to exercises/practice/etl/jest.config.cjs diff --git a/exercises/practice/etl/package.json b/exercises/practice/etl/package.json index 4c4040982..b2788a9b1 100644 --- a/exercises/practice/etl/package.json +++ b/exercises/practice/etl/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/etl/tsconfig.json b/exercises/practice/etl/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/etl/tsconfig.json +++ b/exercises/practice/etl/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/flatten-array/.eslintignore b/exercises/practice/flatten-array/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/flatten-array/.eslintignore +++ b/exercises/practice/flatten-array/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/flatten-array/.eslintrc b/exercises/practice/flatten-array/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/flatten-array/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/flatten-array/.eslintrc.cjs b/exercises/practice/flatten-array/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/flatten-array/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/flatten-array/babel.config.cjs b/exercises/practice/flatten-array/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/flatten-array/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/flatten-array/babel.config.js b/exercises/practice/flatten-array/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/flatten-array/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/flatten-array/jest.config.js b/exercises/practice/flatten-array/jest.config.cjs similarity index 100% rename from exercises/practice/flatten-array/jest.config.js rename to exercises/practice/flatten-array/jest.config.cjs diff --git a/exercises/practice/flatten-array/package.json b/exercises/practice/flatten-array/package.json index 0f69e3040..fbcebf8de 100644 --- a/exercises/practice/flatten-array/package.json +++ b/exercises/practice/flatten-array/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/flatten-array/tsconfig.json b/exercises/practice/flatten-array/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/flatten-array/tsconfig.json +++ b/exercises/practice/flatten-array/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/food-chain/.eslintignore b/exercises/practice/food-chain/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/food-chain/.eslintignore +++ b/exercises/practice/food-chain/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/food-chain/.eslintrc b/exercises/practice/food-chain/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/food-chain/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/food-chain/.eslintrc.cjs b/exercises/practice/food-chain/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/food-chain/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/food-chain/babel.config.cjs b/exercises/practice/food-chain/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/food-chain/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/food-chain/babel.config.js b/exercises/practice/food-chain/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/food-chain/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/food-chain/jest.config.js b/exercises/practice/food-chain/jest.config.cjs similarity index 100% rename from exercises/practice/food-chain/jest.config.js rename to exercises/practice/food-chain/jest.config.cjs diff --git a/exercises/practice/food-chain/package.json b/exercises/practice/food-chain/package.json index 6f966f9df..30f27ec2b 100644 --- a/exercises/practice/food-chain/package.json +++ b/exercises/practice/food-chain/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/food-chain/tsconfig.json b/exercises/practice/food-chain/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/food-chain/tsconfig.json +++ b/exercises/practice/food-chain/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/gigasecond/.eslintignore b/exercises/practice/gigasecond/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/gigasecond/.eslintignore +++ b/exercises/practice/gigasecond/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/gigasecond/.eslintrc b/exercises/practice/gigasecond/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/gigasecond/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/gigasecond/.eslintrc.cjs b/exercises/practice/gigasecond/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/gigasecond/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/gigasecond/babel.config.cjs b/exercises/practice/gigasecond/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/gigasecond/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/gigasecond/babel.config.js b/exercises/practice/gigasecond/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/gigasecond/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/gigasecond/jest.config.js b/exercises/practice/gigasecond/jest.config.cjs similarity index 100% rename from exercises/practice/gigasecond/jest.config.js rename to exercises/practice/gigasecond/jest.config.cjs diff --git a/exercises/practice/gigasecond/package.json b/exercises/practice/gigasecond/package.json index d6cbd36a3..89a6cd515 100644 --- a/exercises/practice/gigasecond/package.json +++ b/exercises/practice/gigasecond/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/gigasecond/tsconfig.json b/exercises/practice/gigasecond/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/gigasecond/tsconfig.json +++ b/exercises/practice/gigasecond/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/grade-school/.eslintignore b/exercises/practice/grade-school/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/grade-school/.eslintignore +++ b/exercises/practice/grade-school/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/grade-school/.eslintrc b/exercises/practice/grade-school/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/grade-school/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/grade-school/.eslintrc.cjs b/exercises/practice/grade-school/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/grade-school/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/grade-school/babel.config.cjs b/exercises/practice/grade-school/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/grade-school/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/grade-school/babel.config.js b/exercises/practice/grade-school/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/grade-school/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/grade-school/jest.config.js b/exercises/practice/grade-school/jest.config.cjs similarity index 100% rename from exercises/practice/grade-school/jest.config.js rename to exercises/practice/grade-school/jest.config.cjs diff --git a/exercises/practice/grade-school/package.json b/exercises/practice/grade-school/package.json index 8ee292592..a3c13ad42 100644 --- a/exercises/practice/grade-school/package.json +++ b/exercises/practice/grade-school/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/grade-school/tsconfig.json b/exercises/practice/grade-school/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/grade-school/tsconfig.json +++ b/exercises/practice/grade-school/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/grains/.eslintignore b/exercises/practice/grains/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/grains/.eslintignore +++ b/exercises/practice/grains/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/grains/.eslintrc b/exercises/practice/grains/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/grains/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/grains/.eslintrc.cjs b/exercises/practice/grains/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/grains/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/grains/babel.config.cjs b/exercises/practice/grains/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/grains/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/grains/babel.config.js b/exercises/practice/grains/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/grains/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/grains/jest.config.js b/exercises/practice/grains/jest.config.cjs similarity index 100% rename from exercises/practice/grains/jest.config.js rename to exercises/practice/grains/jest.config.cjs diff --git a/exercises/practice/grains/package.json b/exercises/practice/grains/package.json index cc7e8591f..8926bcae2 100644 --- a/exercises/practice/grains/package.json +++ b/exercises/practice/grains/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/grains/tsconfig.json b/exercises/practice/grains/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/grains/tsconfig.json +++ b/exercises/practice/grains/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/hamming/.eslintignore b/exercises/practice/hamming/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/hamming/.eslintignore +++ b/exercises/practice/hamming/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/hamming/.eslintrc b/exercises/practice/hamming/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/hamming/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/hamming/.eslintrc.cjs b/exercises/practice/hamming/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/hamming/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/hamming/babel.config.cjs b/exercises/practice/hamming/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/hamming/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/hamming/babel.config.js b/exercises/practice/hamming/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/hamming/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/hamming/jest.config.js b/exercises/practice/hamming/jest.config.cjs similarity index 100% rename from exercises/practice/hamming/jest.config.js rename to exercises/practice/hamming/jest.config.cjs diff --git a/exercises/practice/hamming/package.json b/exercises/practice/hamming/package.json index d55b8694e..fceecd29d 100644 --- a/exercises/practice/hamming/package.json +++ b/exercises/practice/hamming/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/hamming/tsconfig.json b/exercises/practice/hamming/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/hamming/tsconfig.json +++ b/exercises/practice/hamming/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/hello-world/.eslintignore b/exercises/practice/hello-world/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/hello-world/.eslintignore +++ b/exercises/practice/hello-world/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/hello-world/.eslintrc b/exercises/practice/hello-world/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/hello-world/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/hello-world/.eslintrc.cjs b/exercises/practice/hello-world/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/hello-world/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/hello-world/babel.config.cjs b/exercises/practice/hello-world/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/hello-world/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/hello-world/babel.config.js b/exercises/practice/hello-world/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/hello-world/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/hello-world/jest.config.js b/exercises/practice/hello-world/jest.config.cjs similarity index 100% rename from exercises/practice/hello-world/jest.config.js rename to exercises/practice/hello-world/jest.config.cjs diff --git a/exercises/practice/hello-world/package.json b/exercises/practice/hello-world/package.json index ffda5bf8d..3f346d594 100644 --- a/exercises/practice/hello-world/package.json +++ b/exercises/practice/hello-world/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/hello-world/tsconfig.json b/exercises/practice/hello-world/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/hello-world/tsconfig.json +++ b/exercises/practice/hello-world/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/house/.eslintignore b/exercises/practice/house/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/house/.eslintignore +++ b/exercises/practice/house/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/house/.eslintrc b/exercises/practice/house/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/house/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/house/.eslintrc.cjs b/exercises/practice/house/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/house/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/house/babel.config.cjs b/exercises/practice/house/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/house/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/house/babel.config.js b/exercises/practice/house/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/house/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/house/jest.config.js b/exercises/practice/house/jest.config.cjs similarity index 100% rename from exercises/practice/house/jest.config.js rename to exercises/practice/house/jest.config.cjs diff --git a/exercises/practice/house/package.json b/exercises/practice/house/package.json index caf3c3321..6a42b09bd 100644 --- a/exercises/practice/house/package.json +++ b/exercises/practice/house/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/house/tsconfig.json b/exercises/practice/house/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/house/tsconfig.json +++ b/exercises/practice/house/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/isbn-verifier/.eslintignore b/exercises/practice/isbn-verifier/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/isbn-verifier/.eslintignore +++ b/exercises/practice/isbn-verifier/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/isbn-verifier/.eslintrc b/exercises/practice/isbn-verifier/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/isbn-verifier/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/isbn-verifier/.eslintrc.cjs b/exercises/practice/isbn-verifier/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/isbn-verifier/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/isbn-verifier/babel.config.cjs b/exercises/practice/isbn-verifier/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/isbn-verifier/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/isbn-verifier/babel.config.js b/exercises/practice/isbn-verifier/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/isbn-verifier/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/isbn-verifier/jest.config.js b/exercises/practice/isbn-verifier/jest.config.cjs similarity index 100% rename from exercises/practice/isbn-verifier/jest.config.js rename to exercises/practice/isbn-verifier/jest.config.cjs diff --git a/exercises/practice/isbn-verifier/package.json b/exercises/practice/isbn-verifier/package.json index eb2278ec6..52d0c3739 100644 --- a/exercises/practice/isbn-verifier/package.json +++ b/exercises/practice/isbn-verifier/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/isbn-verifier/tsconfig.json b/exercises/practice/isbn-verifier/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/isbn-verifier/tsconfig.json +++ b/exercises/practice/isbn-verifier/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/isogram/.eslintignore b/exercises/practice/isogram/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/isogram/.eslintignore +++ b/exercises/practice/isogram/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/isogram/.eslintrc b/exercises/practice/isogram/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/isogram/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/isogram/.eslintrc.cjs b/exercises/practice/isogram/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/isogram/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/isogram/babel.config.cjs b/exercises/practice/isogram/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/isogram/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/isogram/babel.config.js b/exercises/practice/isogram/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/isogram/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/isogram/jest.config.js b/exercises/practice/isogram/jest.config.cjs similarity index 100% rename from exercises/practice/isogram/jest.config.js rename to exercises/practice/isogram/jest.config.cjs diff --git a/exercises/practice/isogram/package.json b/exercises/practice/isogram/package.json index 982d2c806..6f1b6a0ca 100644 --- a/exercises/practice/isogram/package.json +++ b/exercises/practice/isogram/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/isogram/tsconfig.json b/exercises/practice/isogram/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/isogram/tsconfig.json +++ b/exercises/practice/isogram/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/kindergarten-garden/.eslintignore b/exercises/practice/kindergarten-garden/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/kindergarten-garden/.eslintignore +++ b/exercises/practice/kindergarten-garden/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/kindergarten-garden/.eslintrc b/exercises/practice/kindergarten-garden/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/kindergarten-garden/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/kindergarten-garden/.eslintrc.cjs b/exercises/practice/kindergarten-garden/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/kindergarten-garden/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/kindergarten-garden/babel.config.cjs b/exercises/practice/kindergarten-garden/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/kindergarten-garden/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/kindergarten-garden/babel.config.js b/exercises/practice/kindergarten-garden/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/kindergarten-garden/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/kindergarten-garden/jest.config.js b/exercises/practice/kindergarten-garden/jest.config.cjs similarity index 100% rename from exercises/practice/kindergarten-garden/jest.config.js rename to exercises/practice/kindergarten-garden/jest.config.cjs diff --git a/exercises/practice/kindergarten-garden/package.json b/exercises/practice/kindergarten-garden/package.json index 96b261467..89fb8767a 100644 --- a/exercises/practice/kindergarten-garden/package.json +++ b/exercises/practice/kindergarten-garden/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/kindergarten-garden/tsconfig.json b/exercises/practice/kindergarten-garden/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/kindergarten-garden/tsconfig.json +++ b/exercises/practice/kindergarten-garden/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/knapsack/.eslintignore b/exercises/practice/knapsack/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/knapsack/.eslintignore +++ b/exercises/practice/knapsack/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/knapsack/.eslintrc b/exercises/practice/knapsack/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/knapsack/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/knapsack/.eslintrc.cjs b/exercises/practice/knapsack/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/knapsack/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/knapsack/babel.config.cjs b/exercises/practice/knapsack/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/knapsack/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/knapsack/babel.config.js b/exercises/practice/knapsack/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/knapsack/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/knapsack/jest.config.js b/exercises/practice/knapsack/jest.config.cjs similarity index 100% rename from exercises/practice/knapsack/jest.config.js rename to exercises/practice/knapsack/jest.config.cjs diff --git a/exercises/practice/knapsack/package.json b/exercises/practice/knapsack/package.json index b39519ffc..3aa299284 100644 --- a/exercises/practice/knapsack/package.json +++ b/exercises/practice/knapsack/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/knapsack/tsconfig.json b/exercises/practice/knapsack/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/knapsack/tsconfig.json +++ b/exercises/practice/knapsack/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/largest-series-product/.eslintignore b/exercises/practice/largest-series-product/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/largest-series-product/.eslintignore +++ b/exercises/practice/largest-series-product/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/largest-series-product/.eslintrc b/exercises/practice/largest-series-product/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/largest-series-product/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/largest-series-product/.eslintrc.cjs b/exercises/practice/largest-series-product/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/largest-series-product/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/largest-series-product/babel.config.cjs b/exercises/practice/largest-series-product/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/largest-series-product/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/largest-series-product/babel.config.js b/exercises/practice/largest-series-product/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/largest-series-product/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/largest-series-product/jest.config.js b/exercises/practice/largest-series-product/jest.config.cjs similarity index 100% rename from exercises/practice/largest-series-product/jest.config.js rename to exercises/practice/largest-series-product/jest.config.cjs diff --git a/exercises/practice/largest-series-product/package.json b/exercises/practice/largest-series-product/package.json index 129ec7538..56e6aba41 100644 --- a/exercises/practice/largest-series-product/package.json +++ b/exercises/practice/largest-series-product/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/largest-series-product/tsconfig.json b/exercises/practice/largest-series-product/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/largest-series-product/tsconfig.json +++ b/exercises/practice/largest-series-product/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/leap/.eslintignore b/exercises/practice/leap/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/leap/.eslintignore +++ b/exercises/practice/leap/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/leap/.eslintrc b/exercises/practice/leap/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/leap/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/leap/.eslintrc.cjs b/exercises/practice/leap/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/leap/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/leap/babel.config.cjs b/exercises/practice/leap/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/leap/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/leap/babel.config.js b/exercises/practice/leap/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/leap/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/leap/jest.config.js b/exercises/practice/leap/jest.config.cjs similarity index 100% rename from exercises/practice/leap/jest.config.js rename to exercises/practice/leap/jest.config.cjs diff --git a/exercises/practice/leap/package.json b/exercises/practice/leap/package.json index e61b84d51..d59a37676 100644 --- a/exercises/practice/leap/package.json +++ b/exercises/practice/leap/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/leap/tsconfig.json b/exercises/practice/leap/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/leap/tsconfig.json +++ b/exercises/practice/leap/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/linked-list/.eslintignore b/exercises/practice/linked-list/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/linked-list/.eslintignore +++ b/exercises/practice/linked-list/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/linked-list/.eslintrc b/exercises/practice/linked-list/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/linked-list/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/linked-list/.eslintrc.cjs b/exercises/practice/linked-list/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/linked-list/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/linked-list/babel.config.cjs b/exercises/practice/linked-list/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/linked-list/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/linked-list/babel.config.js b/exercises/practice/linked-list/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/linked-list/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/linked-list/jest.config.js b/exercises/practice/linked-list/jest.config.cjs similarity index 100% rename from exercises/practice/linked-list/jest.config.js rename to exercises/practice/linked-list/jest.config.cjs diff --git a/exercises/practice/linked-list/package.json b/exercises/practice/linked-list/package.json index 41aedd9cb..b388da2d1 100644 --- a/exercises/practice/linked-list/package.json +++ b/exercises/practice/linked-list/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/linked-list/tsconfig.json b/exercises/practice/linked-list/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/linked-list/tsconfig.json +++ b/exercises/practice/linked-list/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/list-ops/.eslintignore b/exercises/practice/list-ops/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/list-ops/.eslintignore +++ b/exercises/practice/list-ops/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/list-ops/.eslintrc b/exercises/practice/list-ops/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/list-ops/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/list-ops/.eslintrc.cjs b/exercises/practice/list-ops/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/list-ops/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/list-ops/babel.config.cjs b/exercises/practice/list-ops/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/list-ops/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/list-ops/babel.config.js b/exercises/practice/list-ops/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/list-ops/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/list-ops/jest.config.js b/exercises/practice/list-ops/jest.config.cjs similarity index 100% rename from exercises/practice/list-ops/jest.config.js rename to exercises/practice/list-ops/jest.config.cjs diff --git a/exercises/practice/list-ops/package.json b/exercises/practice/list-ops/package.json index eb790204e..e24091471 100644 --- a/exercises/practice/list-ops/package.json +++ b/exercises/practice/list-ops/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/list-ops/tsconfig.json b/exercises/practice/list-ops/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/list-ops/tsconfig.json +++ b/exercises/practice/list-ops/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/luhn/.eslintignore b/exercises/practice/luhn/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/luhn/.eslintignore +++ b/exercises/practice/luhn/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/luhn/.eslintrc b/exercises/practice/luhn/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/luhn/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/luhn/.eslintrc.cjs b/exercises/practice/luhn/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/luhn/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/luhn/babel.config.cjs b/exercises/practice/luhn/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/luhn/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/luhn/babel.config.js b/exercises/practice/luhn/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/luhn/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/luhn/jest.config.js b/exercises/practice/luhn/jest.config.cjs similarity index 100% rename from exercises/practice/luhn/jest.config.js rename to exercises/practice/luhn/jest.config.cjs diff --git a/exercises/practice/luhn/package.json b/exercises/practice/luhn/package.json index 2d70995a2..e6f550a82 100644 --- a/exercises/practice/luhn/package.json +++ b/exercises/practice/luhn/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/luhn/tsconfig.json b/exercises/practice/luhn/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/luhn/tsconfig.json +++ b/exercises/practice/luhn/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/matching-brackets/.eslintignore b/exercises/practice/matching-brackets/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/matching-brackets/.eslintignore +++ b/exercises/practice/matching-brackets/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/matching-brackets/.eslintrc b/exercises/practice/matching-brackets/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/matching-brackets/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/matching-brackets/.eslintrc.cjs b/exercises/practice/matching-brackets/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/matching-brackets/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/matching-brackets/babel.config.cjs b/exercises/practice/matching-brackets/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/matching-brackets/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/matching-brackets/babel.config.js b/exercises/practice/matching-brackets/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/matching-brackets/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/matching-brackets/jest.config.js b/exercises/practice/matching-brackets/jest.config.cjs similarity index 100% rename from exercises/practice/matching-brackets/jest.config.js rename to exercises/practice/matching-brackets/jest.config.cjs diff --git a/exercises/practice/matching-brackets/package.json b/exercises/practice/matching-brackets/package.json index 0da8de56e..6052a1c67 100644 --- a/exercises/practice/matching-brackets/package.json +++ b/exercises/practice/matching-brackets/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/matching-brackets/tsconfig.json b/exercises/practice/matching-brackets/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/matching-brackets/tsconfig.json +++ b/exercises/practice/matching-brackets/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/matrix/.eslintignore b/exercises/practice/matrix/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/matrix/.eslintignore +++ b/exercises/practice/matrix/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/matrix/.eslintrc b/exercises/practice/matrix/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/matrix/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/matrix/.eslintrc.cjs b/exercises/practice/matrix/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/matrix/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/matrix/babel.config.cjs b/exercises/practice/matrix/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/matrix/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/matrix/babel.config.js b/exercises/practice/matrix/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/matrix/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/matrix/jest.config.js b/exercises/practice/matrix/jest.config.cjs similarity index 100% rename from exercises/practice/matrix/jest.config.js rename to exercises/practice/matrix/jest.config.cjs diff --git a/exercises/practice/matrix/package.json b/exercises/practice/matrix/package.json index 0471197b9..0c8dd64be 100644 --- a/exercises/practice/matrix/package.json +++ b/exercises/practice/matrix/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/matrix/tsconfig.json b/exercises/practice/matrix/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/matrix/tsconfig.json +++ b/exercises/practice/matrix/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/minesweeper/.eslintignore b/exercises/practice/minesweeper/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/minesweeper/.eslintignore +++ b/exercises/practice/minesweeper/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/minesweeper/.eslintrc b/exercises/practice/minesweeper/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/minesweeper/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/minesweeper/.eslintrc.cjs b/exercises/practice/minesweeper/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/minesweeper/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/minesweeper/babel.config.cjs b/exercises/practice/minesweeper/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/minesweeper/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/minesweeper/babel.config.js b/exercises/practice/minesweeper/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/minesweeper/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/minesweeper/jest.config.js b/exercises/practice/minesweeper/jest.config.cjs similarity index 100% rename from exercises/practice/minesweeper/jest.config.js rename to exercises/practice/minesweeper/jest.config.cjs diff --git a/exercises/practice/minesweeper/package.json b/exercises/practice/minesweeper/package.json index dce14a4ae..f0b31d0df 100644 --- a/exercises/practice/minesweeper/package.json +++ b/exercises/practice/minesweeper/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/minesweeper/tsconfig.json b/exercises/practice/minesweeper/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/minesweeper/tsconfig.json +++ b/exercises/practice/minesweeper/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/nth-prime/.eslintignore b/exercises/practice/nth-prime/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/nth-prime/.eslintignore +++ b/exercises/practice/nth-prime/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/nth-prime/.eslintrc b/exercises/practice/nth-prime/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/nth-prime/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/nth-prime/.eslintrc.cjs b/exercises/practice/nth-prime/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/nth-prime/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/nth-prime/babel.config.cjs b/exercises/practice/nth-prime/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/nth-prime/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/nth-prime/babel.config.js b/exercises/practice/nth-prime/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/nth-prime/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/nth-prime/jest.config.js b/exercises/practice/nth-prime/jest.config.cjs similarity index 100% rename from exercises/practice/nth-prime/jest.config.js rename to exercises/practice/nth-prime/jest.config.cjs diff --git a/exercises/practice/nth-prime/package.json b/exercises/practice/nth-prime/package.json index 065014a34..604bc4bdd 100644 --- a/exercises/practice/nth-prime/package.json +++ b/exercises/practice/nth-prime/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/nth-prime/tsconfig.json b/exercises/practice/nth-prime/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/nth-prime/tsconfig.json +++ b/exercises/practice/nth-prime/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/nucleotide-count/.eslintignore b/exercises/practice/nucleotide-count/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/nucleotide-count/.eslintignore +++ b/exercises/practice/nucleotide-count/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/nucleotide-count/.eslintrc b/exercises/practice/nucleotide-count/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/nucleotide-count/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/nucleotide-count/.eslintrc.cjs b/exercises/practice/nucleotide-count/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/nucleotide-count/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/nucleotide-count/babel.config.cjs b/exercises/practice/nucleotide-count/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/nucleotide-count/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/nucleotide-count/babel.config.js b/exercises/practice/nucleotide-count/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/nucleotide-count/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/nucleotide-count/jest.config.js b/exercises/practice/nucleotide-count/jest.config.cjs similarity index 100% rename from exercises/practice/nucleotide-count/jest.config.js rename to exercises/practice/nucleotide-count/jest.config.cjs diff --git a/exercises/practice/nucleotide-count/package.json b/exercises/practice/nucleotide-count/package.json index 812141ad6..62c869952 100644 --- a/exercises/practice/nucleotide-count/package.json +++ b/exercises/practice/nucleotide-count/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/nucleotide-count/tsconfig.json b/exercises/practice/nucleotide-count/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/nucleotide-count/tsconfig.json +++ b/exercises/practice/nucleotide-count/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/ocr-numbers/.eslintignore b/exercises/practice/ocr-numbers/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/ocr-numbers/.eslintignore +++ b/exercises/practice/ocr-numbers/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/ocr-numbers/.eslintrc b/exercises/practice/ocr-numbers/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/ocr-numbers/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/ocr-numbers/.eslintrc.cjs b/exercises/practice/ocr-numbers/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/ocr-numbers/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/ocr-numbers/babel.config.cjs b/exercises/practice/ocr-numbers/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/ocr-numbers/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/ocr-numbers/babel.config.js b/exercises/practice/ocr-numbers/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/ocr-numbers/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/ocr-numbers/jest.config.js b/exercises/practice/ocr-numbers/jest.config.cjs similarity index 100% rename from exercises/practice/ocr-numbers/jest.config.js rename to exercises/practice/ocr-numbers/jest.config.cjs diff --git a/exercises/practice/ocr-numbers/package.json b/exercises/practice/ocr-numbers/package.json index 716bdc053..81a917349 100644 --- a/exercises/practice/ocr-numbers/package.json +++ b/exercises/practice/ocr-numbers/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/ocr-numbers/tsconfig.json b/exercises/practice/ocr-numbers/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/ocr-numbers/tsconfig.json +++ b/exercises/practice/ocr-numbers/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/palindrome-products/.eslintignore b/exercises/practice/palindrome-products/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/palindrome-products/.eslintignore +++ b/exercises/practice/palindrome-products/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/palindrome-products/.eslintrc b/exercises/practice/palindrome-products/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/palindrome-products/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/palindrome-products/.eslintrc.cjs b/exercises/practice/palindrome-products/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/palindrome-products/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/palindrome-products/babel.config.cjs b/exercises/practice/palindrome-products/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/palindrome-products/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/palindrome-products/babel.config.js b/exercises/practice/palindrome-products/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/palindrome-products/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/palindrome-products/jest.config.js b/exercises/practice/palindrome-products/jest.config.cjs similarity index 100% rename from exercises/practice/palindrome-products/jest.config.js rename to exercises/practice/palindrome-products/jest.config.cjs diff --git a/exercises/practice/palindrome-products/package.json b/exercises/practice/palindrome-products/package.json index 3a046cdaa..d9778f2e3 100644 --- a/exercises/practice/palindrome-products/package.json +++ b/exercises/practice/palindrome-products/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/palindrome-products/tsconfig.json b/exercises/practice/palindrome-products/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/palindrome-products/tsconfig.json +++ b/exercises/practice/palindrome-products/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/pangram/.eslintignore b/exercises/practice/pangram/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/pangram/.eslintignore +++ b/exercises/practice/pangram/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/pangram/.eslintrc b/exercises/practice/pangram/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/pangram/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/pangram/.eslintrc.cjs b/exercises/practice/pangram/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/pangram/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/pangram/babel.config.cjs b/exercises/practice/pangram/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/pangram/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/pangram/babel.config.js b/exercises/practice/pangram/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/pangram/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/pangram/jest.config.js b/exercises/practice/pangram/jest.config.cjs similarity index 100% rename from exercises/practice/pangram/jest.config.js rename to exercises/practice/pangram/jest.config.cjs diff --git a/exercises/practice/pangram/package.json b/exercises/practice/pangram/package.json index c9b0676eb..732f2accf 100644 --- a/exercises/practice/pangram/package.json +++ b/exercises/practice/pangram/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/pangram/tsconfig.json b/exercises/practice/pangram/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/pangram/tsconfig.json +++ b/exercises/practice/pangram/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/pascals-triangle/.eslintignore b/exercises/practice/pascals-triangle/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/pascals-triangle/.eslintignore +++ b/exercises/practice/pascals-triangle/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/pascals-triangle/.eslintrc b/exercises/practice/pascals-triangle/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/pascals-triangle/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/pascals-triangle/.eslintrc.cjs b/exercises/practice/pascals-triangle/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/pascals-triangle/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/pascals-triangle/babel.config.cjs b/exercises/practice/pascals-triangle/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/pascals-triangle/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/pascals-triangle/babel.config.js b/exercises/practice/pascals-triangle/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/pascals-triangle/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/pascals-triangle/jest.config.js b/exercises/practice/pascals-triangle/jest.config.cjs similarity index 100% rename from exercises/practice/pascals-triangle/jest.config.js rename to exercises/practice/pascals-triangle/jest.config.cjs diff --git a/exercises/practice/pascals-triangle/package.json b/exercises/practice/pascals-triangle/package.json index dbd4e3925..407a7c991 100644 --- a/exercises/practice/pascals-triangle/package.json +++ b/exercises/practice/pascals-triangle/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/pascals-triangle/tsconfig.json b/exercises/practice/pascals-triangle/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/pascals-triangle/tsconfig.json +++ b/exercises/practice/pascals-triangle/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/perfect-numbers/.eslintignore b/exercises/practice/perfect-numbers/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/perfect-numbers/.eslintignore +++ b/exercises/practice/perfect-numbers/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/perfect-numbers/.eslintrc b/exercises/practice/perfect-numbers/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/perfect-numbers/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/perfect-numbers/.eslintrc.cjs b/exercises/practice/perfect-numbers/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/perfect-numbers/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/perfect-numbers/babel.config.cjs b/exercises/practice/perfect-numbers/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/perfect-numbers/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/perfect-numbers/babel.config.js b/exercises/practice/perfect-numbers/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/perfect-numbers/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/perfect-numbers/jest.config.js b/exercises/practice/perfect-numbers/jest.config.cjs similarity index 100% rename from exercises/practice/perfect-numbers/jest.config.js rename to exercises/practice/perfect-numbers/jest.config.cjs diff --git a/exercises/practice/perfect-numbers/package.json b/exercises/practice/perfect-numbers/package.json index 3bdd488c3..ac41128cf 100644 --- a/exercises/practice/perfect-numbers/package.json +++ b/exercises/practice/perfect-numbers/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/perfect-numbers/tsconfig.json b/exercises/practice/perfect-numbers/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/perfect-numbers/tsconfig.json +++ b/exercises/practice/perfect-numbers/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/phone-number/.eslintignore b/exercises/practice/phone-number/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/phone-number/.eslintignore +++ b/exercises/practice/phone-number/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/phone-number/.eslintrc b/exercises/practice/phone-number/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/phone-number/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/phone-number/.eslintrc.cjs b/exercises/practice/phone-number/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/phone-number/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/phone-number/babel.config.cjs b/exercises/practice/phone-number/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/phone-number/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/phone-number/babel.config.js b/exercises/practice/phone-number/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/phone-number/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/phone-number/jest.config.js b/exercises/practice/phone-number/jest.config.cjs similarity index 100% rename from exercises/practice/phone-number/jest.config.js rename to exercises/practice/phone-number/jest.config.cjs diff --git a/exercises/practice/phone-number/package.json b/exercises/practice/phone-number/package.json index 7b6133f7e..2b23478a0 100644 --- a/exercises/practice/phone-number/package.json +++ b/exercises/practice/phone-number/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/phone-number/tsconfig.json b/exercises/practice/phone-number/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/phone-number/tsconfig.json +++ b/exercises/practice/phone-number/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/pig-latin/.eslintignore b/exercises/practice/pig-latin/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/pig-latin/.eslintignore +++ b/exercises/practice/pig-latin/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/pig-latin/.eslintrc b/exercises/practice/pig-latin/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/pig-latin/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/pig-latin/.eslintrc.cjs b/exercises/practice/pig-latin/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/pig-latin/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/pig-latin/babel.config.cjs b/exercises/practice/pig-latin/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/pig-latin/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/pig-latin/babel.config.js b/exercises/practice/pig-latin/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/pig-latin/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/pig-latin/jest.config.js b/exercises/practice/pig-latin/jest.config.cjs similarity index 100% rename from exercises/practice/pig-latin/jest.config.js rename to exercises/practice/pig-latin/jest.config.cjs diff --git a/exercises/practice/pig-latin/package.json b/exercises/practice/pig-latin/package.json index c947775e8..ad4ddda92 100644 --- a/exercises/practice/pig-latin/package.json +++ b/exercises/practice/pig-latin/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/pig-latin/tsconfig.json b/exercises/practice/pig-latin/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/pig-latin/tsconfig.json +++ b/exercises/practice/pig-latin/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/prime-factors/.eslintignore b/exercises/practice/prime-factors/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/prime-factors/.eslintignore +++ b/exercises/practice/prime-factors/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/prime-factors/.eslintrc b/exercises/practice/prime-factors/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/prime-factors/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/prime-factors/.eslintrc.cjs b/exercises/practice/prime-factors/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/prime-factors/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/prime-factors/babel.config.cjs b/exercises/practice/prime-factors/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/prime-factors/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/prime-factors/babel.config.js b/exercises/practice/prime-factors/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/prime-factors/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/prime-factors/jest.config.js b/exercises/practice/prime-factors/jest.config.cjs similarity index 100% rename from exercises/practice/prime-factors/jest.config.js rename to exercises/practice/prime-factors/jest.config.cjs diff --git a/exercises/practice/prime-factors/package.json b/exercises/practice/prime-factors/package.json index ea73507dd..c8fa5464c 100644 --- a/exercises/practice/prime-factors/package.json +++ b/exercises/practice/prime-factors/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/prime-factors/tsconfig.json b/exercises/practice/prime-factors/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/prime-factors/tsconfig.json +++ b/exercises/practice/prime-factors/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/protein-translation/.eslintignore b/exercises/practice/protein-translation/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/protein-translation/.eslintignore +++ b/exercises/practice/protein-translation/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/protein-translation/.eslintrc b/exercises/practice/protein-translation/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/protein-translation/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/protein-translation/.eslintrc.cjs b/exercises/practice/protein-translation/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/protein-translation/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/protein-translation/babel.config.cjs b/exercises/practice/protein-translation/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/protein-translation/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/protein-translation/babel.config.js b/exercises/practice/protein-translation/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/protein-translation/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/protein-translation/jest.config.js b/exercises/practice/protein-translation/jest.config.cjs similarity index 100% rename from exercises/practice/protein-translation/jest.config.js rename to exercises/practice/protein-translation/jest.config.cjs diff --git a/exercises/practice/protein-translation/package.json b/exercises/practice/protein-translation/package.json index 617a28d2e..c2f200153 100644 --- a/exercises/practice/protein-translation/package.json +++ b/exercises/practice/protein-translation/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/protein-translation/tsconfig.json b/exercises/practice/protein-translation/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/protein-translation/tsconfig.json +++ b/exercises/practice/protein-translation/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/proverb/.eslintignore b/exercises/practice/proverb/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/proverb/.eslintignore +++ b/exercises/practice/proverb/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/proverb/.eslintrc b/exercises/practice/proverb/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/proverb/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/proverb/.eslintrc.cjs b/exercises/practice/proverb/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/proverb/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/proverb/babel.config.cjs b/exercises/practice/proverb/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/proverb/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/proverb/babel.config.js b/exercises/practice/proverb/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/proverb/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/proverb/jest.config.js b/exercises/practice/proverb/jest.config.cjs similarity index 100% rename from exercises/practice/proverb/jest.config.js rename to exercises/practice/proverb/jest.config.cjs diff --git a/exercises/practice/proverb/package.json b/exercises/practice/proverb/package.json index f2dcfa439..8db42e5d0 100644 --- a/exercises/practice/proverb/package.json +++ b/exercises/practice/proverb/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/proverb/tsconfig.json b/exercises/practice/proverb/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/proverb/tsconfig.json +++ b/exercises/practice/proverb/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/pythagorean-triplet/.eslintignore b/exercises/practice/pythagorean-triplet/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/pythagorean-triplet/.eslintignore +++ b/exercises/practice/pythagorean-triplet/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/pythagorean-triplet/.eslintrc b/exercises/practice/pythagorean-triplet/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/pythagorean-triplet/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/pythagorean-triplet/.eslintrc.cjs b/exercises/practice/pythagorean-triplet/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/pythagorean-triplet/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/pythagorean-triplet/babel.config.cjs b/exercises/practice/pythagorean-triplet/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/pythagorean-triplet/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/pythagorean-triplet/babel.config.js b/exercises/practice/pythagorean-triplet/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/pythagorean-triplet/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/pythagorean-triplet/jest.config.js b/exercises/practice/pythagorean-triplet/jest.config.cjs similarity index 100% rename from exercises/practice/pythagorean-triplet/jest.config.js rename to exercises/practice/pythagorean-triplet/jest.config.cjs diff --git a/exercises/practice/pythagorean-triplet/package.json b/exercises/practice/pythagorean-triplet/package.json index dc8cdd07a..ffecfae95 100644 --- a/exercises/practice/pythagorean-triplet/package.json +++ b/exercises/practice/pythagorean-triplet/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/pythagorean-triplet/tsconfig.json b/exercises/practice/pythagorean-triplet/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/pythagorean-triplet/tsconfig.json +++ b/exercises/practice/pythagorean-triplet/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/queen-attack/.eslintignore b/exercises/practice/queen-attack/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/queen-attack/.eslintignore +++ b/exercises/practice/queen-attack/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/queen-attack/.eslintrc b/exercises/practice/queen-attack/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/queen-attack/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/queen-attack/.eslintrc.cjs b/exercises/practice/queen-attack/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/queen-attack/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/queen-attack/babel.config.cjs b/exercises/practice/queen-attack/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/queen-attack/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/queen-attack/babel.config.js b/exercises/practice/queen-attack/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/queen-attack/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/queen-attack/jest.config.js b/exercises/practice/queen-attack/jest.config.cjs similarity index 100% rename from exercises/practice/queen-attack/jest.config.js rename to exercises/practice/queen-attack/jest.config.cjs diff --git a/exercises/practice/queen-attack/package.json b/exercises/practice/queen-attack/package.json index 386588fa6..463b6267b 100644 --- a/exercises/practice/queen-attack/package.json +++ b/exercises/practice/queen-attack/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/queen-attack/tsconfig.json b/exercises/practice/queen-attack/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/queen-attack/tsconfig.json +++ b/exercises/practice/queen-attack/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/raindrops/.eslintignore b/exercises/practice/raindrops/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/raindrops/.eslintignore +++ b/exercises/practice/raindrops/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/raindrops/.eslintrc b/exercises/practice/raindrops/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/raindrops/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/raindrops/.eslintrc.cjs b/exercises/practice/raindrops/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/raindrops/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/raindrops/babel.config.cjs b/exercises/practice/raindrops/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/raindrops/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/raindrops/babel.config.js b/exercises/practice/raindrops/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/raindrops/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/raindrops/jest.config.js b/exercises/practice/raindrops/jest.config.cjs similarity index 100% rename from exercises/practice/raindrops/jest.config.js rename to exercises/practice/raindrops/jest.config.cjs diff --git a/exercises/practice/raindrops/package.json b/exercises/practice/raindrops/package.json index d64474f78..48c2baa11 100644 --- a/exercises/practice/raindrops/package.json +++ b/exercises/practice/raindrops/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/raindrops/tsconfig.json b/exercises/practice/raindrops/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/raindrops/tsconfig.json +++ b/exercises/practice/raindrops/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/rational-numbers/.eslintignore b/exercises/practice/rational-numbers/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/rational-numbers/.eslintignore +++ b/exercises/practice/rational-numbers/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/rational-numbers/.eslintrc b/exercises/practice/rational-numbers/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/rational-numbers/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/rational-numbers/.eslintrc.cjs b/exercises/practice/rational-numbers/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/rational-numbers/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/rational-numbers/babel.config.cjs b/exercises/practice/rational-numbers/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/rational-numbers/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/rational-numbers/babel.config.js b/exercises/practice/rational-numbers/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/rational-numbers/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/rational-numbers/jest.config.js b/exercises/practice/rational-numbers/jest.config.cjs similarity index 100% rename from exercises/practice/rational-numbers/jest.config.js rename to exercises/practice/rational-numbers/jest.config.cjs diff --git a/exercises/practice/rational-numbers/package.json b/exercises/practice/rational-numbers/package.json index aadbaec1c..a279a1fe0 100644 --- a/exercises/practice/rational-numbers/package.json +++ b/exercises/practice/rational-numbers/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/rational-numbers/tsconfig.json b/exercises/practice/rational-numbers/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/rational-numbers/tsconfig.json +++ b/exercises/practice/rational-numbers/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/react/.eslintignore b/exercises/practice/react/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/react/.eslintignore +++ b/exercises/practice/react/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/react/.eslintrc b/exercises/practice/react/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/react/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/react/.eslintrc.cjs b/exercises/practice/react/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/react/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/react/babel.config.cjs b/exercises/practice/react/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/react/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/react/babel.config.js b/exercises/practice/react/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/react/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/react/jest.config.js b/exercises/practice/react/jest.config.cjs similarity index 100% rename from exercises/practice/react/jest.config.js rename to exercises/practice/react/jest.config.cjs diff --git a/exercises/practice/react/package.json b/exercises/practice/react/package.json index 2347b4436..6333ace00 100644 --- a/exercises/practice/react/package.json +++ b/exercises/practice/react/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/react/tsconfig.json b/exercises/practice/react/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/react/tsconfig.json +++ b/exercises/practice/react/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/rectangles/.eslintignore b/exercises/practice/rectangles/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/rectangles/.eslintignore +++ b/exercises/practice/rectangles/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/rectangles/.eslintrc b/exercises/practice/rectangles/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/rectangles/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/rectangles/.eslintrc.cjs b/exercises/practice/rectangles/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/rectangles/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/rectangles/babel.config.cjs b/exercises/practice/rectangles/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/rectangles/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/rectangles/babel.config.js b/exercises/practice/rectangles/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/rectangles/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/rectangles/jest.config.js b/exercises/practice/rectangles/jest.config.cjs similarity index 100% rename from exercises/practice/rectangles/jest.config.js rename to exercises/practice/rectangles/jest.config.cjs diff --git a/exercises/practice/rectangles/package.json b/exercises/practice/rectangles/package.json index 494001780..30220d276 100644 --- a/exercises/practice/rectangles/package.json +++ b/exercises/practice/rectangles/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/rectangles/tsconfig.json b/exercises/practice/rectangles/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/rectangles/tsconfig.json +++ b/exercises/practice/rectangles/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/resistor-color-duo/.eslintignore b/exercises/practice/resistor-color-duo/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/resistor-color-duo/.eslintignore +++ b/exercises/practice/resistor-color-duo/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/resistor-color-duo/.eslintrc b/exercises/practice/resistor-color-duo/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/resistor-color-duo/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/resistor-color-duo/.eslintrc.cjs b/exercises/practice/resistor-color-duo/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/resistor-color-duo/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/resistor-color-duo/babel.config.cjs b/exercises/practice/resistor-color-duo/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/resistor-color-duo/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/resistor-color-duo/babel.config.js b/exercises/practice/resistor-color-duo/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/resistor-color-duo/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/resistor-color-duo/jest.config.js b/exercises/practice/resistor-color-duo/jest.config.cjs similarity index 100% rename from exercises/practice/resistor-color-duo/jest.config.js rename to exercises/practice/resistor-color-duo/jest.config.cjs diff --git a/exercises/practice/resistor-color-duo/package.json b/exercises/practice/resistor-color-duo/package.json index 8f94f2836..e41d9a10b 100644 --- a/exercises/practice/resistor-color-duo/package.json +++ b/exercises/practice/resistor-color-duo/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/resistor-color-duo/tsconfig.json b/exercises/practice/resistor-color-duo/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/resistor-color-duo/tsconfig.json +++ b/exercises/practice/resistor-color-duo/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/resistor-color-trio/.eslintignore b/exercises/practice/resistor-color-trio/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/resistor-color-trio/.eslintignore +++ b/exercises/practice/resistor-color-trio/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/resistor-color-trio/.eslintrc b/exercises/practice/resistor-color-trio/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/resistor-color-trio/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/resistor-color-trio/.eslintrc.cjs b/exercises/practice/resistor-color-trio/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/resistor-color-trio/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/resistor-color-trio/babel.config.cjs b/exercises/practice/resistor-color-trio/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/resistor-color-trio/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/resistor-color-trio/babel.config.js b/exercises/practice/resistor-color-trio/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/resistor-color-trio/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/resistor-color-trio/jest.config.js b/exercises/practice/resistor-color-trio/jest.config.cjs similarity index 100% rename from exercises/practice/resistor-color-trio/jest.config.js rename to exercises/practice/resistor-color-trio/jest.config.cjs diff --git a/exercises/practice/resistor-color-trio/package.json b/exercises/practice/resistor-color-trio/package.json index 54c014e92..e9839a9f0 100644 --- a/exercises/practice/resistor-color-trio/package.json +++ b/exercises/practice/resistor-color-trio/package.json @@ -11,21 +11,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/resistor-color-trio/tsconfig.json b/exercises/practice/resistor-color-trio/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/resistor-color-trio/tsconfig.json +++ b/exercises/practice/resistor-color-trio/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/resistor-color/.eslintignore b/exercises/practice/resistor-color/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/resistor-color/.eslintignore +++ b/exercises/practice/resistor-color/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/resistor-color/.eslintrc b/exercises/practice/resistor-color/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/resistor-color/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/resistor-color/.eslintrc.cjs b/exercises/practice/resistor-color/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/resistor-color/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/resistor-color/babel.config.cjs b/exercises/practice/resistor-color/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/resistor-color/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/resistor-color/babel.config.js b/exercises/practice/resistor-color/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/resistor-color/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/resistor-color/jest.config.js b/exercises/practice/resistor-color/jest.config.cjs similarity index 100% rename from exercises/practice/resistor-color/jest.config.js rename to exercises/practice/resistor-color/jest.config.cjs diff --git a/exercises/practice/resistor-color/package.json b/exercises/practice/resistor-color/package.json index 61e9371e9..0c18c5b04 100644 --- a/exercises/practice/resistor-color/package.json +++ b/exercises/practice/resistor-color/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/resistor-color/tsconfig.json b/exercises/practice/resistor-color/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/resistor-color/tsconfig.json +++ b/exercises/practice/resistor-color/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/reverse-string/.eslintignore b/exercises/practice/reverse-string/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/reverse-string/.eslintignore +++ b/exercises/practice/reverse-string/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/reverse-string/.eslintrc b/exercises/practice/reverse-string/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/reverse-string/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/reverse-string/.eslintrc.cjs b/exercises/practice/reverse-string/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/reverse-string/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/reverse-string/babel.config.cjs b/exercises/practice/reverse-string/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/reverse-string/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/reverse-string/babel.config.js b/exercises/practice/reverse-string/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/reverse-string/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/reverse-string/jest.config.js b/exercises/practice/reverse-string/jest.config.cjs similarity index 100% rename from exercises/practice/reverse-string/jest.config.js rename to exercises/practice/reverse-string/jest.config.cjs diff --git a/exercises/practice/reverse-string/package.json b/exercises/practice/reverse-string/package.json index 55decd5fb..357fa653a 100644 --- a/exercises/practice/reverse-string/package.json +++ b/exercises/practice/reverse-string/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/reverse-string/tsconfig.json b/exercises/practice/reverse-string/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/reverse-string/tsconfig.json +++ b/exercises/practice/reverse-string/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/rna-transcription/.eslintignore b/exercises/practice/rna-transcription/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/rna-transcription/.eslintignore +++ b/exercises/practice/rna-transcription/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/rna-transcription/.eslintrc b/exercises/practice/rna-transcription/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/rna-transcription/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/rna-transcription/.eslintrc.cjs b/exercises/practice/rna-transcription/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/rna-transcription/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/rna-transcription/babel.config.cjs b/exercises/practice/rna-transcription/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/rna-transcription/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/rna-transcription/babel.config.js b/exercises/practice/rna-transcription/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/rna-transcription/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/rna-transcription/jest.config.js b/exercises/practice/rna-transcription/jest.config.cjs similarity index 100% rename from exercises/practice/rna-transcription/jest.config.js rename to exercises/practice/rna-transcription/jest.config.cjs diff --git a/exercises/practice/rna-transcription/package.json b/exercises/practice/rna-transcription/package.json index 8b3b43469..6b2ca8afc 100644 --- a/exercises/practice/rna-transcription/package.json +++ b/exercises/practice/rna-transcription/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/rna-transcription/tsconfig.json b/exercises/practice/rna-transcription/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/rna-transcription/tsconfig.json +++ b/exercises/practice/rna-transcription/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/robot-name/.eslintignore b/exercises/practice/robot-name/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/robot-name/.eslintignore +++ b/exercises/practice/robot-name/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/robot-name/.eslintrc b/exercises/practice/robot-name/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/robot-name/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/robot-name/.eslintrc.cjs b/exercises/practice/robot-name/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/robot-name/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/robot-name/babel.config.cjs b/exercises/practice/robot-name/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/robot-name/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/robot-name/babel.config.js b/exercises/practice/robot-name/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/robot-name/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/robot-name/jest.config.js b/exercises/practice/robot-name/jest.config.cjs similarity index 100% rename from exercises/practice/robot-name/jest.config.js rename to exercises/practice/robot-name/jest.config.cjs diff --git a/exercises/practice/robot-name/package.json b/exercises/practice/robot-name/package.json index 04ade7905..1cd355fdb 100644 --- a/exercises/practice/robot-name/package.json +++ b/exercises/practice/robot-name/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/robot-name/tsconfig.json b/exercises/practice/robot-name/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/robot-name/tsconfig.json +++ b/exercises/practice/robot-name/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/robot-simulator/.eslintignore b/exercises/practice/robot-simulator/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/robot-simulator/.eslintignore +++ b/exercises/practice/robot-simulator/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/robot-simulator/.eslintrc b/exercises/practice/robot-simulator/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/robot-simulator/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/robot-simulator/.eslintrc.cjs b/exercises/practice/robot-simulator/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/robot-simulator/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/robot-simulator/babel.config.cjs b/exercises/practice/robot-simulator/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/robot-simulator/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/robot-simulator/babel.config.js b/exercises/practice/robot-simulator/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/robot-simulator/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/robot-simulator/jest.config.js b/exercises/practice/robot-simulator/jest.config.cjs similarity index 100% rename from exercises/practice/robot-simulator/jest.config.js rename to exercises/practice/robot-simulator/jest.config.cjs diff --git a/exercises/practice/robot-simulator/package.json b/exercises/practice/robot-simulator/package.json index 1005789dd..81c1f4051 100644 --- a/exercises/practice/robot-simulator/package.json +++ b/exercises/practice/robot-simulator/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/robot-simulator/tsconfig.json b/exercises/practice/robot-simulator/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/robot-simulator/tsconfig.json +++ b/exercises/practice/robot-simulator/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/roman-numerals/.eslintignore b/exercises/practice/roman-numerals/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/roman-numerals/.eslintignore +++ b/exercises/practice/roman-numerals/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/roman-numerals/.eslintrc b/exercises/practice/roman-numerals/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/roman-numerals/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/roman-numerals/.eslintrc.cjs b/exercises/practice/roman-numerals/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/roman-numerals/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/roman-numerals/babel.config.cjs b/exercises/practice/roman-numerals/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/roman-numerals/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/roman-numerals/babel.config.js b/exercises/practice/roman-numerals/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/roman-numerals/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/roman-numerals/jest.config.js b/exercises/practice/roman-numerals/jest.config.cjs similarity index 100% rename from exercises/practice/roman-numerals/jest.config.js rename to exercises/practice/roman-numerals/jest.config.cjs diff --git a/exercises/practice/roman-numerals/package.json b/exercises/practice/roman-numerals/package.json index 0bf4c02fe..36b11a324 100644 --- a/exercises/practice/roman-numerals/package.json +++ b/exercises/practice/roman-numerals/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/roman-numerals/tsconfig.json b/exercises/practice/roman-numerals/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/roman-numerals/tsconfig.json +++ b/exercises/practice/roman-numerals/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/rotational-cipher/.eslintignore b/exercises/practice/rotational-cipher/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/rotational-cipher/.eslintignore +++ b/exercises/practice/rotational-cipher/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/rotational-cipher/.eslintrc b/exercises/practice/rotational-cipher/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/rotational-cipher/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/rotational-cipher/.eslintrc.cjs b/exercises/practice/rotational-cipher/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/rotational-cipher/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/rotational-cipher/babel.config.cjs b/exercises/practice/rotational-cipher/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/rotational-cipher/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/rotational-cipher/babel.config.js b/exercises/practice/rotational-cipher/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/rotational-cipher/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/rotational-cipher/jest.config.js b/exercises/practice/rotational-cipher/jest.config.cjs similarity index 100% rename from exercises/practice/rotational-cipher/jest.config.js rename to exercises/practice/rotational-cipher/jest.config.cjs diff --git a/exercises/practice/rotational-cipher/package.json b/exercises/practice/rotational-cipher/package.json index 17e38d182..e9ee2bfe3 100644 --- a/exercises/practice/rotational-cipher/package.json +++ b/exercises/practice/rotational-cipher/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/rotational-cipher/tsconfig.json b/exercises/practice/rotational-cipher/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/rotational-cipher/tsconfig.json +++ b/exercises/practice/rotational-cipher/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/run-length-encoding/.eslintignore b/exercises/practice/run-length-encoding/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/run-length-encoding/.eslintignore +++ b/exercises/practice/run-length-encoding/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/run-length-encoding/.eslintrc b/exercises/practice/run-length-encoding/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/run-length-encoding/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/run-length-encoding/.eslintrc.cjs b/exercises/practice/run-length-encoding/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/run-length-encoding/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/run-length-encoding/babel.config.cjs b/exercises/practice/run-length-encoding/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/run-length-encoding/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/run-length-encoding/babel.config.js b/exercises/practice/run-length-encoding/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/run-length-encoding/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/run-length-encoding/jest.config.js b/exercises/practice/run-length-encoding/jest.config.cjs similarity index 100% rename from exercises/practice/run-length-encoding/jest.config.js rename to exercises/practice/run-length-encoding/jest.config.cjs diff --git a/exercises/practice/run-length-encoding/package.json b/exercises/practice/run-length-encoding/package.json index b16d39503..262dbf49b 100644 --- a/exercises/practice/run-length-encoding/package.json +++ b/exercises/practice/run-length-encoding/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/run-length-encoding/tsconfig.json b/exercises/practice/run-length-encoding/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/run-length-encoding/tsconfig.json +++ b/exercises/practice/run-length-encoding/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/saddle-points/.eslintignore b/exercises/practice/saddle-points/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/saddle-points/.eslintignore +++ b/exercises/practice/saddle-points/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/saddle-points/.eslintrc b/exercises/practice/saddle-points/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/saddle-points/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/saddle-points/.eslintrc.cjs b/exercises/practice/saddle-points/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/saddle-points/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/saddle-points/babel.config.cjs b/exercises/practice/saddle-points/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/saddle-points/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/saddle-points/babel.config.js b/exercises/practice/saddle-points/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/saddle-points/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/saddle-points/jest.config.js b/exercises/practice/saddle-points/jest.config.cjs similarity index 100% rename from exercises/practice/saddle-points/jest.config.js rename to exercises/practice/saddle-points/jest.config.cjs diff --git a/exercises/practice/saddle-points/package.json b/exercises/practice/saddle-points/package.json index 51548f107..4f1060964 100644 --- a/exercises/practice/saddle-points/package.json +++ b/exercises/practice/saddle-points/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/saddle-points/tsconfig.json b/exercises/practice/saddle-points/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/saddle-points/tsconfig.json +++ b/exercises/practice/saddle-points/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/say/.eslintignore b/exercises/practice/say/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/say/.eslintignore +++ b/exercises/practice/say/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/say/.eslintrc b/exercises/practice/say/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/say/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/say/.eslintrc.cjs b/exercises/practice/say/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/say/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/say/babel.config.cjs b/exercises/practice/say/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/say/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/say/babel.config.js b/exercises/practice/say/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/say/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/say/jest.config.js b/exercises/practice/say/jest.config.cjs similarity index 100% rename from exercises/practice/say/jest.config.js rename to exercises/practice/say/jest.config.cjs diff --git a/exercises/practice/say/package.json b/exercises/practice/say/package.json index 0746683ae..e0dc5ca99 100644 --- a/exercises/practice/say/package.json +++ b/exercises/practice/say/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/say/tsconfig.json b/exercises/practice/say/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/say/tsconfig.json +++ b/exercises/practice/say/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/scrabble-score/.eslintignore b/exercises/practice/scrabble-score/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/scrabble-score/.eslintignore +++ b/exercises/practice/scrabble-score/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/scrabble-score/.eslintrc b/exercises/practice/scrabble-score/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/scrabble-score/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/scrabble-score/.eslintrc.cjs b/exercises/practice/scrabble-score/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/scrabble-score/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/scrabble-score/babel.config.cjs b/exercises/practice/scrabble-score/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/scrabble-score/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/scrabble-score/babel.config.js b/exercises/practice/scrabble-score/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/scrabble-score/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/scrabble-score/jest.config.js b/exercises/practice/scrabble-score/jest.config.cjs similarity index 100% rename from exercises/practice/scrabble-score/jest.config.js rename to exercises/practice/scrabble-score/jest.config.cjs diff --git a/exercises/practice/scrabble-score/package.json b/exercises/practice/scrabble-score/package.json index d891e05c8..ae7d5e4cf 100644 --- a/exercises/practice/scrabble-score/package.json +++ b/exercises/practice/scrabble-score/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/scrabble-score/tsconfig.json b/exercises/practice/scrabble-score/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/scrabble-score/tsconfig.json +++ b/exercises/practice/scrabble-score/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/secret-handshake/.eslintignore b/exercises/practice/secret-handshake/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/secret-handshake/.eslintignore +++ b/exercises/practice/secret-handshake/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/secret-handshake/.eslintrc b/exercises/practice/secret-handshake/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/secret-handshake/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/secret-handshake/.eslintrc.cjs b/exercises/practice/secret-handshake/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/secret-handshake/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/secret-handshake/babel.config.cjs b/exercises/practice/secret-handshake/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/secret-handshake/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/secret-handshake/babel.config.js b/exercises/practice/secret-handshake/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/secret-handshake/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/secret-handshake/jest.config.js b/exercises/practice/secret-handshake/jest.config.cjs similarity index 100% rename from exercises/practice/secret-handshake/jest.config.js rename to exercises/practice/secret-handshake/jest.config.cjs diff --git a/exercises/practice/secret-handshake/package.json b/exercises/practice/secret-handshake/package.json index 26c990f8e..f4ec656c3 100644 --- a/exercises/practice/secret-handshake/package.json +++ b/exercises/practice/secret-handshake/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/secret-handshake/tsconfig.json b/exercises/practice/secret-handshake/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/secret-handshake/tsconfig.json +++ b/exercises/practice/secret-handshake/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/series/.eslintignore b/exercises/practice/series/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/series/.eslintignore +++ b/exercises/practice/series/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/series/.eslintrc b/exercises/practice/series/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/series/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/series/.eslintrc.cjs b/exercises/practice/series/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/series/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/series/babel.config.cjs b/exercises/practice/series/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/series/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/series/babel.config.js b/exercises/practice/series/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/series/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/series/jest.config.js b/exercises/practice/series/jest.config.cjs similarity index 100% rename from exercises/practice/series/jest.config.js rename to exercises/practice/series/jest.config.cjs diff --git a/exercises/practice/series/package.json b/exercises/practice/series/package.json index bbf417a6e..996e6e8b5 100644 --- a/exercises/practice/series/package.json +++ b/exercises/practice/series/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/series/tsconfig.json b/exercises/practice/series/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/series/tsconfig.json +++ b/exercises/practice/series/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/sieve/.eslintignore b/exercises/practice/sieve/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/sieve/.eslintignore +++ b/exercises/practice/sieve/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/sieve/.eslintrc b/exercises/practice/sieve/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/sieve/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/sieve/.eslintrc.cjs b/exercises/practice/sieve/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/sieve/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/sieve/babel.config.cjs b/exercises/practice/sieve/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/sieve/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/sieve/babel.config.js b/exercises/practice/sieve/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/sieve/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/sieve/jest.config.js b/exercises/practice/sieve/jest.config.cjs similarity index 100% rename from exercises/practice/sieve/jest.config.js rename to exercises/practice/sieve/jest.config.cjs diff --git a/exercises/practice/sieve/package.json b/exercises/practice/sieve/package.json index f915674ab..1285df150 100644 --- a/exercises/practice/sieve/package.json +++ b/exercises/practice/sieve/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/sieve/tsconfig.json b/exercises/practice/sieve/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/sieve/tsconfig.json +++ b/exercises/practice/sieve/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/simple-cipher/.eslintignore b/exercises/practice/simple-cipher/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/simple-cipher/.eslintignore +++ b/exercises/practice/simple-cipher/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/simple-cipher/.eslintrc b/exercises/practice/simple-cipher/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/simple-cipher/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/simple-cipher/.eslintrc.cjs b/exercises/practice/simple-cipher/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/simple-cipher/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/simple-cipher/babel.config.cjs b/exercises/practice/simple-cipher/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/simple-cipher/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/simple-cipher/babel.config.js b/exercises/practice/simple-cipher/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/simple-cipher/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/simple-cipher/jest.config.js b/exercises/practice/simple-cipher/jest.config.cjs similarity index 100% rename from exercises/practice/simple-cipher/jest.config.js rename to exercises/practice/simple-cipher/jest.config.cjs diff --git a/exercises/practice/simple-cipher/package.json b/exercises/practice/simple-cipher/package.json index 27d3cf706..6924f3983 100644 --- a/exercises/practice/simple-cipher/package.json +++ b/exercises/practice/simple-cipher/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/simple-cipher/tsconfig.json b/exercises/practice/simple-cipher/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/simple-cipher/tsconfig.json +++ b/exercises/practice/simple-cipher/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/space-age/.eslintignore b/exercises/practice/space-age/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/space-age/.eslintignore +++ b/exercises/practice/space-age/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/space-age/.eslintrc b/exercises/practice/space-age/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/space-age/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/space-age/.eslintrc.cjs b/exercises/practice/space-age/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/space-age/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/space-age/babel.config.cjs b/exercises/practice/space-age/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/space-age/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/space-age/babel.config.js b/exercises/practice/space-age/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/space-age/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/space-age/jest.config.js b/exercises/practice/space-age/jest.config.cjs similarity index 100% rename from exercises/practice/space-age/jest.config.js rename to exercises/practice/space-age/jest.config.cjs diff --git a/exercises/practice/space-age/package.json b/exercises/practice/space-age/package.json index c4b6cf30a..f08be02e1 100644 --- a/exercises/practice/space-age/package.json +++ b/exercises/practice/space-age/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/space-age/tsconfig.json b/exercises/practice/space-age/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/space-age/tsconfig.json +++ b/exercises/practice/space-age/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/spiral-matrix/.eslintignore b/exercises/practice/spiral-matrix/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/spiral-matrix/.eslintignore +++ b/exercises/practice/spiral-matrix/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/spiral-matrix/.eslintrc b/exercises/practice/spiral-matrix/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/spiral-matrix/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/spiral-matrix/.eslintrc.cjs b/exercises/practice/spiral-matrix/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/spiral-matrix/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/spiral-matrix/babel.config.cjs b/exercises/practice/spiral-matrix/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/spiral-matrix/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/spiral-matrix/babel.config.js b/exercises/practice/spiral-matrix/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/spiral-matrix/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/spiral-matrix/jest.config.js b/exercises/practice/spiral-matrix/jest.config.cjs similarity index 100% rename from exercises/practice/spiral-matrix/jest.config.js rename to exercises/practice/spiral-matrix/jest.config.cjs diff --git a/exercises/practice/spiral-matrix/package.json b/exercises/practice/spiral-matrix/package.json index aa33edc90..cf8139fbb 100644 --- a/exercises/practice/spiral-matrix/package.json +++ b/exercises/practice/spiral-matrix/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/spiral-matrix/tsconfig.json b/exercises/practice/spiral-matrix/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/spiral-matrix/tsconfig.json +++ b/exercises/practice/spiral-matrix/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/strain/.eslintignore b/exercises/practice/strain/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/strain/.eslintignore +++ b/exercises/practice/strain/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/strain/.eslintrc b/exercises/practice/strain/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/strain/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/strain/.eslintrc.cjs b/exercises/practice/strain/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/strain/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/strain/babel.config.cjs b/exercises/practice/strain/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/strain/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/strain/babel.config.js b/exercises/practice/strain/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/strain/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/strain/jest.config.js b/exercises/practice/strain/jest.config.cjs similarity index 100% rename from exercises/practice/strain/jest.config.js rename to exercises/practice/strain/jest.config.cjs diff --git a/exercises/practice/strain/package.json b/exercises/practice/strain/package.json index 52cdf8e06..ae0cc2926 100644 --- a/exercises/practice/strain/package.json +++ b/exercises/practice/strain/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/strain/tsconfig.json b/exercises/practice/strain/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/strain/tsconfig.json +++ b/exercises/practice/strain/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/sublist/.eslintignore b/exercises/practice/sublist/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/sublist/.eslintignore +++ b/exercises/practice/sublist/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/sublist/.eslintrc b/exercises/practice/sublist/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/sublist/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/sublist/.eslintrc.cjs b/exercises/practice/sublist/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/sublist/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/sublist/babel.config.cjs b/exercises/practice/sublist/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/sublist/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/sublist/babel.config.js b/exercises/practice/sublist/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/sublist/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/sublist/jest.config.js b/exercises/practice/sublist/jest.config.cjs similarity index 100% rename from exercises/practice/sublist/jest.config.js rename to exercises/practice/sublist/jest.config.cjs diff --git a/exercises/practice/sublist/package.json b/exercises/practice/sublist/package.json index e2308e48e..50956f91f 100644 --- a/exercises/practice/sublist/package.json +++ b/exercises/practice/sublist/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/sublist/tsconfig.json b/exercises/practice/sublist/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/sublist/tsconfig.json +++ b/exercises/practice/sublist/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/sum-of-multiples/.eslintignore b/exercises/practice/sum-of-multiples/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/sum-of-multiples/.eslintignore +++ b/exercises/practice/sum-of-multiples/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/sum-of-multiples/.eslintrc b/exercises/practice/sum-of-multiples/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/sum-of-multiples/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/sum-of-multiples/.eslintrc.cjs b/exercises/practice/sum-of-multiples/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/sum-of-multiples/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/sum-of-multiples/babel.config.cjs b/exercises/practice/sum-of-multiples/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/sum-of-multiples/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/sum-of-multiples/babel.config.js b/exercises/practice/sum-of-multiples/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/sum-of-multiples/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/sum-of-multiples/jest.config.js b/exercises/practice/sum-of-multiples/jest.config.cjs similarity index 100% rename from exercises/practice/sum-of-multiples/jest.config.js rename to exercises/practice/sum-of-multiples/jest.config.cjs diff --git a/exercises/practice/sum-of-multiples/package.json b/exercises/practice/sum-of-multiples/package.json index 288efa6b0..8b3637d64 100644 --- a/exercises/practice/sum-of-multiples/package.json +++ b/exercises/practice/sum-of-multiples/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/sum-of-multiples/tsconfig.json b/exercises/practice/sum-of-multiples/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/sum-of-multiples/tsconfig.json +++ b/exercises/practice/sum-of-multiples/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/transpose/.eslintignore b/exercises/practice/transpose/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/transpose/.eslintignore +++ b/exercises/practice/transpose/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/transpose/.eslintrc b/exercises/practice/transpose/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/transpose/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/transpose/.eslintrc.cjs b/exercises/practice/transpose/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/transpose/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/transpose/babel.config.cjs b/exercises/practice/transpose/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/transpose/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/transpose/babel.config.js b/exercises/practice/transpose/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/transpose/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/transpose/jest.config.js b/exercises/practice/transpose/jest.config.cjs similarity index 100% rename from exercises/practice/transpose/jest.config.js rename to exercises/practice/transpose/jest.config.cjs diff --git a/exercises/practice/transpose/package.json b/exercises/practice/transpose/package.json index 3fd525434..e68c448f0 100644 --- a/exercises/practice/transpose/package.json +++ b/exercises/practice/transpose/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/transpose/tsconfig.json b/exercises/practice/transpose/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/transpose/tsconfig.json +++ b/exercises/practice/transpose/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/triangle/.eslintignore b/exercises/practice/triangle/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/triangle/.eslintignore +++ b/exercises/practice/triangle/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/triangle/.eslintrc b/exercises/practice/triangle/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/triangle/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/triangle/.eslintrc.cjs b/exercises/practice/triangle/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/triangle/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/triangle/babel.config.cjs b/exercises/practice/triangle/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/triangle/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/triangle/babel.config.js b/exercises/practice/triangle/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/triangle/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/triangle/jest.config.js b/exercises/practice/triangle/jest.config.cjs similarity index 100% rename from exercises/practice/triangle/jest.config.js rename to exercises/practice/triangle/jest.config.cjs diff --git a/exercises/practice/triangle/package.json b/exercises/practice/triangle/package.json index 1f910a2a8..6f418e142 100644 --- a/exercises/practice/triangle/package.json +++ b/exercises/practice/triangle/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/triangle/tsconfig.json b/exercises/practice/triangle/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/triangle/tsconfig.json +++ b/exercises/practice/triangle/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/twelve-days/.eslintignore b/exercises/practice/twelve-days/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/twelve-days/.eslintignore +++ b/exercises/practice/twelve-days/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/twelve-days/.eslintrc b/exercises/practice/twelve-days/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/twelve-days/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/twelve-days/.eslintrc.cjs b/exercises/practice/twelve-days/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/twelve-days/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/twelve-days/babel.config.cjs b/exercises/practice/twelve-days/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/twelve-days/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/twelve-days/babel.config.js b/exercises/practice/twelve-days/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/twelve-days/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/twelve-days/jest.config.js b/exercises/practice/twelve-days/jest.config.cjs similarity index 100% rename from exercises/practice/twelve-days/jest.config.js rename to exercises/practice/twelve-days/jest.config.cjs diff --git a/exercises/practice/twelve-days/package.json b/exercises/practice/twelve-days/package.json index ea4731a9c..e91a74b88 100644 --- a/exercises/practice/twelve-days/package.json +++ b/exercises/practice/twelve-days/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/twelve-days/tsconfig.json b/exercises/practice/twelve-days/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/twelve-days/tsconfig.json +++ b/exercises/practice/twelve-days/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/two-bucket/.eslintignore b/exercises/practice/two-bucket/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/two-bucket/.eslintignore +++ b/exercises/practice/two-bucket/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/two-bucket/.eslintrc b/exercises/practice/two-bucket/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/two-bucket/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/two-bucket/.eslintrc.cjs b/exercises/practice/two-bucket/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/two-bucket/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/two-bucket/babel.config.cjs b/exercises/practice/two-bucket/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/two-bucket/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/two-bucket/babel.config.js b/exercises/practice/two-bucket/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/two-bucket/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/two-bucket/jest.config.js b/exercises/practice/two-bucket/jest.config.cjs similarity index 100% rename from exercises/practice/two-bucket/jest.config.js rename to exercises/practice/two-bucket/jest.config.cjs diff --git a/exercises/practice/two-bucket/package.json b/exercises/practice/two-bucket/package.json index 3cc8ad337..47ab1fe68 100644 --- a/exercises/practice/two-bucket/package.json +++ b/exercises/practice/two-bucket/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/two-bucket/tsconfig.json b/exercises/practice/two-bucket/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/two-bucket/tsconfig.json +++ b/exercises/practice/two-bucket/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/two-fer/.eslintignore b/exercises/practice/two-fer/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/two-fer/.eslintignore +++ b/exercises/practice/two-fer/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/two-fer/.eslintrc b/exercises/practice/two-fer/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/two-fer/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/two-fer/.eslintrc.cjs b/exercises/practice/two-fer/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/two-fer/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/two-fer/babel.config.cjs b/exercises/practice/two-fer/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/two-fer/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/two-fer/babel.config.js b/exercises/practice/two-fer/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/two-fer/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/two-fer/jest.config.js b/exercises/practice/two-fer/jest.config.cjs similarity index 100% rename from exercises/practice/two-fer/jest.config.js rename to exercises/practice/two-fer/jest.config.cjs diff --git a/exercises/practice/two-fer/package.json b/exercises/practice/two-fer/package.json index 27151c670..6578b31a0 100644 --- a/exercises/practice/two-fer/package.json +++ b/exercises/practice/two-fer/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/two-fer/tsconfig.json b/exercises/practice/two-fer/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/two-fer/tsconfig.json +++ b/exercises/practice/two-fer/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/variable-length-quantity/.eslintignore b/exercises/practice/variable-length-quantity/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/variable-length-quantity/.eslintignore +++ b/exercises/practice/variable-length-quantity/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/variable-length-quantity/.eslintrc b/exercises/practice/variable-length-quantity/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/variable-length-quantity/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/variable-length-quantity/.eslintrc.cjs b/exercises/practice/variable-length-quantity/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/variable-length-quantity/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/variable-length-quantity/babel.config.cjs b/exercises/practice/variable-length-quantity/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/variable-length-quantity/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/variable-length-quantity/babel.config.js b/exercises/practice/variable-length-quantity/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/variable-length-quantity/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/variable-length-quantity/jest.config.js b/exercises/practice/variable-length-quantity/jest.config.cjs similarity index 100% rename from exercises/practice/variable-length-quantity/jest.config.js rename to exercises/practice/variable-length-quantity/jest.config.cjs diff --git a/exercises/practice/variable-length-quantity/package.json b/exercises/practice/variable-length-quantity/package.json index c49dfa3a6..5b4fb8491 100644 --- a/exercises/practice/variable-length-quantity/package.json +++ b/exercises/practice/variable-length-quantity/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/variable-length-quantity/tsconfig.json b/exercises/practice/variable-length-quantity/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/variable-length-quantity/tsconfig.json +++ b/exercises/practice/variable-length-quantity/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/word-count/.eslintignore b/exercises/practice/word-count/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/word-count/.eslintignore +++ b/exercises/practice/word-count/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/word-count/.eslintrc b/exercises/practice/word-count/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/word-count/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/word-count/.eslintrc.cjs b/exercises/practice/word-count/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/word-count/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/word-count/babel.config.cjs b/exercises/practice/word-count/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/word-count/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/word-count/babel.config.js b/exercises/practice/word-count/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/word-count/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/word-count/jest.config.js b/exercises/practice/word-count/jest.config.cjs similarity index 100% rename from exercises/practice/word-count/jest.config.js rename to exercises/practice/word-count/jest.config.cjs diff --git a/exercises/practice/word-count/package.json b/exercises/practice/word-count/package.json index 418bd5a31..6737aa799 100644 --- a/exercises/practice/word-count/package.json +++ b/exercises/practice/word-count/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/word-count/tsconfig.json b/exercises/practice/word-count/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/word-count/tsconfig.json +++ b/exercises/practice/word-count/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/word-search/.eslintignore b/exercises/practice/word-search/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/word-search/.eslintignore +++ b/exercises/practice/word-search/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/word-search/.eslintrc b/exercises/practice/word-search/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/word-search/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/word-search/.eslintrc.cjs b/exercises/practice/word-search/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/word-search/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/word-search/babel.config.cjs b/exercises/practice/word-search/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/word-search/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/word-search/babel.config.js b/exercises/practice/word-search/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/word-search/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/word-search/jest.config.js b/exercises/practice/word-search/jest.config.cjs similarity index 100% rename from exercises/practice/word-search/jest.config.js rename to exercises/practice/word-search/jest.config.cjs diff --git a/exercises/practice/word-search/package.json b/exercises/practice/word-search/package.json index b16df684c..d317413a1 100644 --- a/exercises/practice/word-search/package.json +++ b/exercises/practice/word-search/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/word-search/tsconfig.json b/exercises/practice/word-search/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/word-search/tsconfig.json +++ b/exercises/practice/word-search/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/exercises/practice/wordy/.eslintignore b/exercises/practice/wordy/.eslintignore index e3e45c396..e08db2a94 100644 --- a/exercises/practice/wordy/.eslintignore +++ b/exercises/practice/wordy/.eslintignore @@ -8,5 +8,6 @@ node_modules/* # Configuration files -babel.config.js -jest.config.js \ No newline at end of file +.eslintrc.cjs +babel.config.cjs +jest.config.cjs \ No newline at end of file diff --git a/exercises/practice/wordy/.eslintrc b/exercises/practice/wordy/.eslintrc deleted file mode 100644 index 3fbb9032c..000000000 --- a/exercises/practice/wordy/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2020, - "sourceType": "module" - }, - "extends": "@exercism/eslint-config-typescript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.ts", ".meta/exemplar.ts", "*.test.ts"], - "excludedFiles": ["custom.test.ts"], - "extends": "@exercism/eslint-config-typescript/maintainers" - } - ] -} diff --git a/exercises/practice/wordy/.eslintrc.cjs b/exercises/practice/wordy/.eslintrc.cjs new file mode 100644 index 000000000..e09910032 --- /dev/null +++ b/exercises/practice/wordy/.eslintrc.cjs @@ -0,0 +1,38 @@ +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + overrides: [ + // Student provided files + { + files: ['*.ts'], + excludedFiles: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + extends: '@exercism/eslint-config-typescript', + }, + // Exercism given tests + { + files: ['*.test.ts'], + excludedFiles: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript/maintainers', + }, + // Student provided tests + { + files: ['custom.test.ts'], + env: { + jest: true, + }, + extends: '@exercism/eslint-config-typescript', + }, + // Exercism provided files + { + files: ['.meta/proof.ci.ts', '.meta/exemplar.ts', '*.test.ts'], + excludedFiles: ['custom.test.ts'], + extends: '@exercism/eslint-config-typescript/maintainers', + }, + ], +} diff --git a/exercises/practice/wordy/babel.config.cjs b/exercises/practice/wordy/babel.config.cjs new file mode 100644 index 000000000..3233dc1b9 --- /dev/null +++ b/exercises/practice/wordy/babel.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ['@exercism/babel-preset-typescript'], + plugins: [], +} diff --git a/exercises/practice/wordy/babel.config.js b/exercises/practice/wordy/babel.config.js deleted file mode 100644 index cd2715330..000000000 --- a/exercises/practice/wordy/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - useBuiltIns: 'entry', - corejs: '3.19', - }, - ], - '@babel/preset-typescript', - ], - plugins: [ - '@babel/proposal-class-properties', - '@babel/proposal-object-rest-spread', - '@babel/plugin-syntax-bigint', - ], -} diff --git a/exercises/practice/wordy/jest.config.js b/exercises/practice/wordy/jest.config.cjs similarity index 100% rename from exercises/practice/wordy/jest.config.js rename to exercises/practice/wordy/jest.config.cjs diff --git a/exercises/practice/wordy/package.json b/exercises/practice/wordy/package.json index 861ad47f4..8060dfa44 100644 --- a/exercises/practice/wordy/package.json +++ b/exercises/practice/wordy/package.json @@ -7,21 +7,19 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.5", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.5", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.20", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "babel-jest": "^26.6.3", - "core-js": "^3.19.3", - "eslint": "^8.7.0", - "eslint-plugin-import": "^2.25.4", - "jest": "^26.6.3", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "core-js": "^3.21.0", + "eslint": "^8.9.0", + "jest": "^27.5.1", "typescript": "^4.5.4" }, "scripts": { diff --git a/exercises/practice/wordy/tsconfig.json b/exercises/practice/wordy/tsconfig.json index 646bc5fee..abb9a3524 100644 --- a/exercises/practice/wordy/tsconfig.json +++ b/exercises/practice/wordy/tsconfig.json @@ -1,19 +1,28 @@ { - "display": "Configuration for Node LTS", + "display": "Configuration for Exercism TypeScript Exercises", "compilerOptions": { - "lib": ["es2020", "dom"], - "module": "commonjs", - "target": "es2020", + // Allows you to use the newest syntax, and have access to console.log + // https://www.typescriptlang.org/tsconfig#lib + "lib": ["ESNEXT", "dom"], + // Make sure typescript is configured to output ESM + // https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm + "module": "ES2020", + // Since this project is using babel, TypeScript may target something very + // high, and babel will make sure it runs on your local Node version. + // https://babeljs.io/docs/en/ + "target": "ESNext", // ESLint doesn't support this yet: "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - // Because we'll be using babel - // Ensure that Babel can safely transpile files in the TypeScript project + // Because we'll be using babel: ensure that Babel can safely transpile + // files in the TypeScript project. + // + // https://babeljs.io/docs/en/babel-plugin-transform-typescript/#caveats "isolatedModules": true }, - "include": ["*", ".meta/*"], + "include": ["*.ts", "*.tsx", ".meta/*.ts", ".meta/*.tsx"], "exclude": ["node_modules"] } diff --git a/package.json b/package.json index 1cec1de0d..d681d82a2 100644 --- a/package.json +++ b/package.json @@ -12,23 +12,22 @@ "type": "git", "url": "https://github.com/exercism/typescript" }, + "type": "module", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, "devDependencies": { - "@babel/core": "^7.16.7", - "@babel/node": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.5", - "@babel/plugin-proposal-object-rest-spread": "^7.16.5", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.7", + "@exercism/babel-preset-typescript": "^0.1.0", "@exercism/eslint-config-typescript": "^0.4.0", - "@types/jest": "^26.0.24", - "@types/node": "^16.11.21", - "babel-jest": "^26.6.3", - "chalk": "^4.1.2", - "core-js": "^3.19.3", + "@tsconfig/node16": "^1.0.2", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.24", + "babel-jest": "^27.5.1", + "chalk": "^5.0.0", + "core-js": "^3.21.0", "diff": "^5.0.0", - "eslint": "^8.7.0", - "jest": "^26.6.3", + "eslint": "^8.9.0", + "jest": "^27.5.1", "prettier": "^2.5.1", "shelljs": "^0.8.5", "typescript": "^4.5.5" diff --git a/reference/implementing-a-concept-exercise.md b/reference/implementing-a-concept-exercise.md index 1e47da620..c707db11d 100644 --- a/reference/implementing-a-concept-exercise.md +++ b/reference/implementing-a-concept-exercise.md @@ -47,8 +47,8 @@ languages | └── exemplar.ts ├── .eslintignore ├── .gitignore - ├── .eslintrc - ├── jest.config.js + ├── .eslintrc.cjs + ├── jest.config.cjs ├── <slug>.ts ├── <slug>.spec.ts └── package.json @@ -59,8 +59,8 @@ languages The configuration files may be copied from another exercise. We aim to keep these in sync: - `.eslintignore` -- `.eslintrc` -- `jest.config.js` +- `.eslintrc.cjs` +- `jest.config.cjs` - `package.json` - `tsconfig.json` diff --git a/scripts/checksum b/scripts/checksum.mjs old mode 100755 new mode 100644 similarity index 64% rename from scripts/checksum rename to scripts/checksum.mjs index b500c6ce9..4dc2eb7f0 --- a/scripts/checksum +++ b/scripts/checksum.mjs @@ -9,9 +9,9 @@ * See `SKIP_PACKAGES_FOR_CHECKSUM` in helpers.js for list of skipped packages. */ -const shell = require('shelljs') -const helpers = require('./helpers') -const path = require('path') +import shell from 'shelljs' +import * as helpers from './helpers.mjs' +import path from 'node:path' /** * Compares the file of the assignment with some known value @@ -21,7 +21,7 @@ const path = require('path') * @param baseFile the file path that {filename} must be compared against * @param expectedSha known value of {baseFile} */ -function checksumAssignment(assignment, filename, baseFile, expectedSha) { +async function checksumAssignment(assignment, filename, baseFile, expectedSha) { if (!assignment) { return } @@ -30,7 +30,7 @@ function checksumAssignment(assignment, filename, baseFile, expectedSha) { let fileSha - if (filename == 'package.json') { + if (filename === 'package.json') { const packageJson = helpers.prepareExercisePackageJson(filePath, false) fileSha = helpers.shaPackageJson(packageJson) @@ -40,16 +40,18 @@ function checksumAssignment(assignment, filename, baseFile, expectedSha) { } if (fileSha !== expectedSha) { - const chalk = require('chalk') - const diff = require('diff') + const [chalk, diff] = await Promise.all([ + import('chalk').then((d) => d.default), + import('diff'), + ]) // prettier-ignore shell.echo( - `\n`, - `[Failure] ${filename} did not match for ${assignment} (${chalk.red(expectedSha)} != ${chalk.green(fileSha)})\n`, - `! Expected ${chalk.red(baseFile)} to match ${chalk.green(filePath)}\n`, - `! Did you forget to run ${chalk.bold(`yarn babel-node scripts/sync`)}?\n` - ); + `\n`, + `[Failure] ${filename} did not match for ${assignment} (${chalk.red(expectedSha)} != ${chalk.green(fileSha)})\n`, + `! Expected ${chalk.red(baseFile)} to match ${chalk.green(filePath)}\n`, + `! Did you forget to run ${chalk.bold(`yarn babel-node scripts/sync`)}?\n` + ); if (filename === 'package.json') { shell.echo(helpers.prepareExercisePackageJson(filePath, false)) @@ -86,12 +88,12 @@ function checksumAssignment(assignment, filename, baseFile, expectedSha) { * @param filename filename in the exercise directory * @param rootFileName filename in the root directory */ -function checkSumAll(filename, rootFileName = filename) { +async function checkSumAll(filename, rootFileName = filename) { const assignments = [shell.env['ASSIGNMENT']].filter(Boolean) let expectedSha - if (rootFileName == 'exercise-package.json') { + if (rootFileName === 'exercise-package.json') { expectedSha = shell.cat('exercise-package.json.sha').toString() } else { const fileContents = shell.cat(rootFileName).toString() @@ -105,18 +107,27 @@ function checkSumAll(filename, rootFileName = filename) { shell.exit() } - return assignments.every((assignment) => { - shell.echo(`Checking integrity of ${assignment}/${filename}...`) - return checksumAssignment(assignment, filename, rootFileName, expectedSha) - }) + return await Promise.all( + assignments.map((assignment) => { + shell.echo(`Checking integrity of ${assignment}/${filename}...`) + return checksumAssignment( + assignment, + filename, + rootFileName, + expectedSha + ) + }) + ) } shell.echo( `Checking integrity of ${filename} in all ${helpers.assignments.length} exercises` ) - helpers.assignments.forEach((assignment) => - checksumAssignment(assignment, filename, rootFileName, expectedSha) + await Promise.all( + helpers.assignments.map((assignment) => + checksumAssignment(assignment, filename, rootFileName, expectedSha) + ) ) } @@ -125,10 +136,12 @@ helpers.createExercisePackageJson(true) checkSumAll('package.json', 'exercise-package.json') -helpers.COMMON_FILES.forEach((file) => { - if (file !== 'package.json') { - checkSumAll(file, path.join('common', file)) - } -}) +Promise.all( + helpers.COMMON_FILES.map((file) => { + if (file !== 'package.json') { + return checkSumAll(file, path.join('common', file)) + } -shell.echo('All files passed the checksum test') + return null + }) +).then(() => shell.echo('All files passed the checksum test')) diff --git a/scripts/ci-check b/scripts/ci-check.mjs similarity index 96% rename from scripts/ci-check rename to scripts/ci-check.mjs index 14db998ce..c4e363c46 100644 --- a/scripts/ci-check +++ b/scripts/ci-check.mjs @@ -10,10 +10,8 @@ * 3. Run tests against sample solutions */ -const shell = require('shelljs') -const path = require('path') - -const { +import shell from 'shelljs' +import { assignments, assertAssignment, registerExitHandler, @@ -21,7 +19,8 @@ const { hasStub, cleanUp, prepare, -} = require('./helpers') +} from './helpers.mjs' +import path from 'node:path' const exercises = assignments if (exercises.length === 0) { diff --git a/scripts/ci b/scripts/ci.mjs similarity index 93% rename from scripts/ci rename to scripts/ci.mjs index 9665e5a88..090314a90 100644 --- a/scripts/ci +++ b/scripts/ci.mjs @@ -11,15 +11,14 @@ * 2. Run tests against sample solutions */ -const { +import shell from 'shelljs' +import { prepareAndRun, prepare, cleanUp, registerExitHandler, assignments, -} = require('./helpers') - -const shell = require('shelljs') +} from './helpers.mjs' const exercises = assignments diff --git a/scripts/format b/scripts/format deleted file mode 100755 index ab8246ca5..000000000 --- a/scripts/format +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env node - -/* - * Run this script (from root directory): npx babel-node scripts/format - * - * This runs `prettier` on all applicable files, FORCES using the same version - * as the CI uses to check if the files have been formatted. - */ - -const shell = require('shelljs'); -const path = require('path'); -const { basename } = require('path'); - -const basedir = path.resolve(basename(__dirname), '..'); -const workflow = path.join( - basedir, - '.github', - 'workflows', - 'verify-code-formatting.yml' -); - -const versionLine = shell - .cat(workflow) - .stdout.split('\n') - .map((line) => line.trim()) - .find((line) => line.startsWith('EXERCISM_PRETTIER_VERSION:')); - -if (!versionLine) { - shell.echo('[format] Expected workflow to contain EXERCISM_PRETTIER_VERSION'); - shell.echo(`[format] Path: ${workflow}`); - shell.exit(-1); -} - -const EXERCISM_PRETTIER_VERSION = versionLine - .split(':')[1] - .trim() - .replace(/'/g, ''); - -const command = `npx "prettier@${EXERCISM_PRETTIER_VERSION}" --write "**/*.{js,jsx,ts,tsx,css,sass,scss,html,json,md,yml}"`; -shell.echo(`[format] ${command}`); - -const result = shell.exec(command); -shell.echo(`[format] ${result}`); diff --git a/scripts/format.mjs b/scripts/format.mjs new file mode 100644 index 000000000..66c615126 --- /dev/null +++ b/scripts/format.mjs @@ -0,0 +1,47 @@ +#!/usr/bin/env node + +/* + * Run this script (from root directory): npx babel-node scripts/format + * + * This runs `prettier` on all applicable files, FORCES using the same version + * as the CI uses to check if the files have been formatted. + */ + +import shell from 'shelljs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +const basedir = path.resolve( + path.basename(fileURLToPath(import.meta.url)), + '..' +) + +const workflow = path.join( + basedir, + '.github', + 'workflows', + 'verify-code-formatting.yml' +) + +let EXERCISM_PRETTIER_VERSION + +const versionLine = shell + .cat(workflow) + .stdout.split('\n') + .map((line) => line.trim()) + .find((line) => line.startsWith('EXERCISM_PRETTIER_VERSION:')) + +if (!versionLine) { + const { stdout: versionFromPackage } = shell.exec( + "yarn list --pattern prettier | sed -n -e 's/^.* prettier@//p'" + ) + EXERCISM_PRETTIER_VERSION = versionFromPackage.trim() +} else { + EXERCISM_PRETTIER_VERSION = versionLine.split(':')[1].trim().replace(/'/g, '') +} + +const command = `npx "prettier@${EXERCISM_PRETTIER_VERSION}" --write "**/*.{js,jsx,ts,tsx,css,sass,scss,html,json,md,yml}"` +shell.echo(`[format] ${command}`) + +const result = shell.exec(command) +shell.echo(`[format] ${result}`) diff --git a/scripts/helpers.js b/scripts/helpers.mjs similarity index 94% rename from scripts/helpers.js rename to scripts/helpers.mjs index f8beb8302..c2653ba26 100644 --- a/scripts/helpers.js +++ b/scripts/helpers.mjs @@ -7,9 +7,9 @@ * & is NOT intended to be run as a script. */ -const shell = require('shelljs') -const path = require('path') -const crypto = require('crypto') +import shell from 'shelljs' +import crypto from 'node:crypto' +import path from 'node:path' const exerciseDirs = shell.ls( '-d', @@ -20,9 +20,9 @@ export const packageFiles = exerciseDirs.map((dir) => `${dir}/package.json`) export const COMMON_FILES = [ '.eslintignore', - '.eslintrc', - 'babel.config.js', - 'jest.config.js', + '.eslintrc.cjs', + 'babel.config.cjs', + 'jest.config.cjs', 'package.json', 'tsconfig.json', ] @@ -51,27 +51,28 @@ export function assertAssignment(assignment, shouldExist = true) { } shell.echo("[Failure] that's not a valid assignment reference") - const chalk = require('chalk') - if (assignment.split(path.sep).length === 1) { - // prettier-ignore - shell.echo(` + import('chalk').then((chalk) => { + if (assignment.split(path.sep).length === 1) { + // prettier-ignore + shell.echo(` Expected ${chalk.cyan(`{type}${path.sep}{slug}`)}, actual: ${chalk.yellow(assignment)}. - Use ${chalk.green(`concept${path.sep}${assignment}`)} if ${chalk.yellow(assignment)} is a concept exercise. - Use ${chalk.green(`practice${path.sep}${assignment}`)} if ${chalk.yellow(assignment)} is a practice exercise. `.trim()); - } - - const suggestions = knownAssignments().filter((known) => - known.includes(assignment) - ) + } - if (suggestions.length > 0 && suggestions.length < 5) { - shell.echo( - '\nDid you mean:\n' + - suggestions.map((suggestion) => `- ${suggestion}`).join('\n') + const suggestions = knownAssignments().filter((known) => + known.includes(assignment) ) - } + + if (suggestions.length > 0 && suggestions.length < 5) { + shell.echo( + '\nDid you mean:\n' + + suggestions.map((suggestion) => `- ${suggestion}`).join('\n') + ) + } + }) return false } diff --git a/scripts/lint b/scripts/lint.mjs similarity index 92% rename from scripts/lint rename to scripts/lint.mjs index 5ea69d7a2..11c5264db 100644 --- a/scripts/lint +++ b/scripts/lint.mjs @@ -6,13 +6,13 @@ * This runs `eslint` on all sample solutions (and test) files */ -const shell = require('shelljs') -const { +import shell from 'shelljs' +import { registerExitHandler, prepareAndRun, - assignments: exercises, + assignments as exercises, shouldPrepare, -} = require('./helpers') +} from './helpers.mjs' registerExitHandler() diff --git a/scripts/name-check b/scripts/name-check.mjs old mode 100755 new mode 100644 similarity index 80% rename from scripts/name-check rename to scripts/name-check.mjs index 4dfca1927..bedf86a3d --- a/scripts/name-check +++ b/scripts/name-check.mjs @@ -10,10 +10,9 @@ * This script also allows fixing these names: yarn babel-node scripts/name-check --fix */ -const shell = require('shelljs') -const path = require('path') - -let { packageFiles, registerExitHandler } = require('./helpers') +import shell from 'shelljs' +import path from 'node:path' +import { packageFiles, registerExitHandler } from './helpers.mjs' registerExitHandler() @@ -24,19 +23,19 @@ let exitCode = 0 const fix = process.argv.slice(2).includes('--fix') const envAssignment = shell.env['ASSIGNMENT'] -if (envAssignment) { - packageFiles = [path.join('exercises', envAssignment, 'package.json')] -} +const finalPackageFiles = envAssignment + ? [path.join('exercises', envAssignment, 'package.json')] + : packageFiles // Check if package name in each exercises' package.json is of the format "@exercism/javascript-" -packageFiles.forEach((filePath) => { +finalPackageFiles.forEach((filePath) => { const file = JSON.parse(shell.cat(filePath).toString()) const givenName = file['name'] const exerciseName = filePath.split(/[/\\]/g)[2] const expectedName = `@exercism/typescript-${exerciseName}` - if (givenName == expectedName) { + if (givenName === expectedName) { shell.echo(`[Success]: Package name ${givenName} is in correct format`) return } diff --git a/scripts/name-uniq b/scripts/name-uniq.mjs old mode 100755 new mode 100644 similarity index 85% rename from scripts/name-uniq rename to scripts/name-uniq.mjs index 9e961b3fa..aa8c86cbd --- a/scripts/name-uniq +++ b/scripts/name-uniq.mjs @@ -8,8 +8,8 @@ * 1. All exercises have unique package names in their package.json files. */ -const shell = require('shelljs') -const { packageFiles, registerExitHandler } = require('./helpers') +import shell from 'shelljs' +import { packageFiles, registerExitHandler } from './helpers.mjs' registerExitHandler() @@ -27,6 +27,6 @@ if (duplicates.length !== 0) { ) } -if (exitCode == 0) { +if (exitCode === 0) { shell.echo('[Success] All package names are unique.') } diff --git a/scripts/pr-check b/scripts/pr-check.mjs similarity index 97% rename from scripts/pr-check rename to scripts/pr-check.mjs index 0f4ba405c..9939eabed 100644 --- a/scripts/pr-check +++ b/scripts/pr-check.mjs @@ -12,7 +12,9 @@ * 4. Run eslint for those exercises to check code-style */ -const { +import shell from 'shelljs' +import path from 'node:path' +import { findExerciseDirectory, prepare, cleanUp, @@ -20,10 +22,8 @@ const { envIsThruthy, hasStub, assignments, -} = require('./helpers') +} from './helpers.mjs' -const shell = require('shelljs') -const path = require('path') const files = process.argv.slice(2) if (files.length === 0) { diff --git a/scripts/pr b/scripts/pr.mjs similarity index 95% rename from scripts/pr rename to scripts/pr.mjs index aa32ee4a7..b57bae813 100644 --- a/scripts/pr +++ b/scripts/pr.mjs @@ -11,17 +11,16 @@ * 2. Run tests for those exercises against sample solutions */ -const { +import shell from 'shelljs' +import { findExerciseDirectory, prepareAndRun, prepare, cleanUp, registerExitHandler, assignments, -} = require('./helpers') +} from './helpers.mjs' -const shell = require('shelljs') -const path = require('path') const files = process.argv.slice(2) if (files.length === 0) { diff --git a/scripts/stub-check b/scripts/stub-check.mjs similarity index 90% rename from scripts/stub-check rename to scripts/stub-check.mjs index 10b00b347..c49811299 100644 --- a/scripts/stub-check +++ b/scripts/stub-check.mjs @@ -7,8 +7,8 @@ * Ref: https://github.com/exercism/javascript/issues/705 */ -const shell = require('shelljs') -const helpers = require('./helpers') +import shell from 'shelljs' +import * as helpers from './helpers.mjs' const noStubs = helpers.assignments.filter( (assignment) => !helpers.hasStub(assignment) diff --git a/scripts/sync b/scripts/sync.mjs old mode 100755 new mode 100644 similarity index 88% rename from scripts/sync rename to scripts/sync.mjs index 26c04203c..2ff186652 --- a/scripts/sync +++ b/scripts/sync.mjs @@ -8,8 +8,8 @@ * * - .eslintignore * - .eslintrc - * - babel.config.js - * - jest.config.js + * - babel.config.cjs + * - jest.config.cjs * - package.json * - tsconfig.json * @@ -17,10 +17,11 @@ * (see checksum script for more info). */ -const shell = require('shelljs') +import shell from 'shelljs' +import * as helpers from './helpers.mjs' +import path from 'node:path' + const assignment = shell.env['ASSIGNMENT'] -const helpers = require('./helpers') -const path = require('path') function copyConfigForAssignment(assignment) { const destination = path.join('exercises', assignment) @@ -81,8 +82,9 @@ if (assignment) { copyConfigForAssignment(assignment) } else { shell.echo('Syncing all assignments...') - helpers.assignments.forEach((assignment) => { - shell.echo('Syncing ' + assignment + '...') - copyConfigForAssignment(assignment) + + helpers.assignments.forEach((a) => { + shell.echo('Syncing ' + a + '...') + copyConfigForAssignment(a) }) } diff --git a/scripts/test b/scripts/test.mjs similarity index 88% rename from scripts/test rename to scripts/test.mjs index ba1e6336c..786ee7f9e 100644 --- a/scripts/test +++ b/scripts/test.mjs @@ -6,8 +6,9 @@ * This runs `jest` tests for all sample solutions */ -const shell = require('shelljs') -const helpers = require('./helpers') +import shell from 'shelljs' +import * as helpers from './helpers.mjs' + const assignment = shell.env['ASSIGNMENT'] const infoStr = assignment diff --git a/tsconfig.json b/tsconfig.json index 7586c0a7c..d302dfb3e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,67 +1,8 @@ { + "extends": "@tsconfig/node16/tsconfig.json", "compilerOptions": { - /* Basic Options */ - "target": "esnext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - "lib": [ - "esnext", - "es2016", - "es2017" - ] /* Specify library files to be included in the compilation. */, - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - // "outDir": "./build", /* Redirect output structure to the directory. */ - // "rootDirs": ["./"], /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "removeComments": true, /* Do not emit comments to output. */ - "noEmit": true /* Do not emit outputs. */, - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - "isolatedModules": true /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */, - // "noEmitOnError": true, /* Do not emit outputs when compilation fails. */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - "noUnusedParameters": true /* Report errors on unused parameters. */, - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": { "~src/*": ["./src/*"] }, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + "module": "ES2020" }, - "compileOnSave": true, - "exclude": ["node_modules", "exercises"] + "include": ["src", "exercises"], + "exclude": ["test", "node_modules"] } diff --git a/yarn.lock b/yarn.lock index 19b904943..f9f9df195 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,54 +2,90 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": +"@ampproject/remapping@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.1.tgz#7922fb0817bf3166d8d9e258c57477e3fd1c3610" + integrity sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" - integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== +"@babel/compat-data@^7.13.11": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + +"@babel/compat-data@^7.16.4": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" + integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== + +"@babel/compat-data@^7.16.8": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" + integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== + +"@babel/core@^7.1.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.0.tgz#749e57c68778b73ad8082775561f67f5196aafa8" + integrity sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.0" + "@babel/helper-module-transforms" "^7.15.0" + "@babel/helpers" "^7.14.8" + "@babel/parser" "^7.15.0" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.16.7", "@babel/core@^7.7.5": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.7.tgz#db990f931f6d40cb9b87a0dc7d2adc749f1dcbcf" - integrity sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA== +"@babel/core@^7.12.3", "@babel/core@^7.17.2", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.2.tgz#2c77fc430e95139d816d39b113b31bf40fb22337" + integrity sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw== dependencies: + "@ampproject/remapping" "^2.0.0" "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.7" + "@babel/generator" "^7.17.0" "@babel/helper-compilation-targets" "^7.16.7" "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.16.7" - "@babel/parser" "^7.16.7" + "@babel/helpers" "^7.17.2" + "@babel/parser" "^7.17.0" "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/traverse" "^7.17.0" + "@babel/types" "^7.17.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.1.2" semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb" - integrity sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg== - dependencies: - "@babel/types" "^7.16.7" - jsesc "^2.5.1" - source-map "^0.5.0" -"@babel/generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" - integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== +"@babel/generator@^7.15.0", "@babel/generator@^7.17.0", "@babel/generator@^7.7.2": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e" + integrity sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw== dependencies: - "@babel/types" "^7.16.8" + "@babel/types" "^7.17.0" jsesc "^2.5.1" source-map "^0.5.0" @@ -68,7 +104,7 @@ "@babel/helper-explode-assignable-expression" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.0", "@babel/helper-compilation-targets@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== @@ -78,23 +114,10 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.10": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" - integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-class-features-plugin@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz#9c5b34b53a01f2097daf10678d65135c1b9f84ba" - integrity sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw== +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": + version "7.17.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz#9699f14a88833a7e055ce57dcd3ffdcd25186b21" + integrity sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/helper-environment-visitor" "^7.16.7" @@ -105,12 +128,12 @@ "@babel/helper-split-export-declaration" "^7.16.7" "@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" - integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" + integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^4.7.1" + regexpu-core "^5.0.1" "@babel/helper-define-polyfill-provider@^0.3.0": version "0.3.0" @@ -154,6 +177,15 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" + integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== + dependencies: + "@babel/helper-get-function-arity" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-function-name@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" @@ -163,21 +195,21 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-get-function-arity@^7.16.7": +"@babel/helper-get-function-arity@^7.14.5", "@babel/helper-get-function-arity@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== dependencies: "@babel/types" "^7.16.7" -"@babel/helper-hoist-variables@^7.16.7": +"@babel/helper-hoist-variables@^7.14.5", "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== dependencies: "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.16.7": +"@babel/helper-member-expression-to-functions@^7.15.0", "@babel/helper-member-expression-to-functions@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== @@ -191,6 +223,13 @@ dependencies: "@babel/types" "^7.13.12" +"@babel/helper-module-imports@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" + integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-module-imports@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" @@ -198,6 +237,20 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-module-transforms@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08" + integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.0" + "@babel/helper-simple-access" "^7.14.8" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + "@babel/helper-module-transforms@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" @@ -212,6 +265,13 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" @@ -219,7 +279,12 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-plugin-utils@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== @@ -233,6 +298,16 @@ "@babel/helper-wrap-function" "^7.16.8" "@babel/types" "^7.16.8" +"@babel/helper-replace-supers@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4" + integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.15.0" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + "@babel/helper-replace-supers@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" @@ -244,6 +319,13 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-simple-access@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924" + integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== + dependencies: + "@babel/types" "^7.14.8" + "@babel/helper-simple-access@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" @@ -258,13 +340,18 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.16.7": +"@babel/helper-split-export-declaration@^7.14.5", "@babel/helper-split-export-declaration@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== dependencies: "@babel/types" "^7.16.7" +"@babel/helper-validator-identifier@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" + integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== + "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" @@ -285,19 +372,19 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" - integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== +"@babel/helpers@^7.14.8", "@babel/helpers@^7.17.2": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" + integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== dependencies: "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/traverse" "^7.17.0" + "@babel/types" "^7.17.0" -"@babel/highlight@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" - integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== +"@babel/highlight@^7.14.5", "@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== dependencies: "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" @@ -315,15 +402,15 @@ regenerator-runtime "^0.13.4" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.16.7": +"@babel/parser@^7.1.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== -"@babel/parser@^7.16.10": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.10.tgz#aba1b1cb9696a24a19f59c41af9cf17d1c716a88" - integrity sha512-Sm/S9Or6nN8uiFsQU1yodyDW3MWXQhFeqzMPM+t8MJjM+pLsnFVxFZzkpXKvUXh+Gz9cbMoYYs484+Jw/NTEFQ== +"@babel/parser@^7.14.5", "@babel/parser@^7.14.7", "@babel/parser@^7.15.0", "@babel/parser@^7.16.7", "@babel/parser@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c" + integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" @@ -350,7 +437,7 @@ "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.16.5", "@babel/plugin-proposal-class-properties@^7.16.7": +"@babel/plugin-proposal-class-properties@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== @@ -415,7 +502,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.16.5", "@babel/plugin-proposal-object-rest-spread@^7.16.7": +"@babel/plugin-proposal-object-rest-spread@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== @@ -461,7 +548,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== @@ -469,6 +556,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -581,7 +676,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7": +"@babel/plugin-syntax-typescript@^7.16.7", "@babel/plugin-syntax-typescript@^7.7.2": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== @@ -824,9 +919,9 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-typescript@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.7.tgz#33f8c2c890fbfdc4ef82446e9abb8de8211a3ff3" - integrity sha512-Hzx1lvBtOCWuCEwMmYOfpQpO7joFeXLgoPuzZZBtTxXqSqUGUubvFGZv2ygo1tB5Bp9q6PXV3H0E/kf7KM0RLA== + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" + integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" @@ -948,14 +1043,14 @@ "@babel/plugin-transform-typescript" "^7.16.7" "@babel/register@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.16.8.tgz#bb688b9dc127d98bb54e37e1d817aed1165833b8" - integrity sha512-aoUj2ocH92k7qyyA59y07sUaCVxxS7VjNul/jR0mpAyYvpo6n5HELZmyUGtrgFm7/1b0UutT7I1w/4bAkXxCHA== + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.17.0.tgz#8051e0b7cb71385be4909324f072599723a1f084" + integrity sha512-UNZsMAZ7uKoGHo1HlEXfteEOYssf64n/PNLHGqOKq/bgYcu/4LrQWAHJwSCb3BRZK8Hi5gkJdRcwrGTO2wtRCg== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" make-dir "^2.1.0" - pirates "^4.0.0" + pirates "^4.0.5" source-map-support "^0.5.16" "@babel/runtime@^7.8.4": @@ -965,7 +1060,16 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.16.7", "@babel/template@^7.3.3": +"@babel/template@^7.14.5", "@babel/template@^7.3.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" + integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/template@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== @@ -974,39 +1078,38 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" - integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" +"@babel/traverse@^7.13.0", "@babel/traverse@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" + integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.0" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/parser" "^7.15.0" + "@babel/types" "^7.15.0" debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.16.8": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" - integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== +"@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.7.2": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30" + integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg== dependencies: "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" + "@babel/generator" "^7.17.0" "@babel/helper-environment-visitor" "^7.16.7" "@babel/helper-function-name" "^7.16.7" "@babel/helper-hoist-variables" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.10" - "@babel/types" "^7.16.8" + "@babel/parser" "^7.17.0" + "@babel/types" "^7.17.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.13.12", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.13.12", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== @@ -1014,27 +1117,27 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@eslint/eslintrc@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" - integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== +"@eslint/eslintrc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.1.0.tgz#583d12dbec5d4f22f333f9669f7d0b7c7815b4d3" + integrity sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.2.0" + espree "^9.3.1" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" @@ -1042,6 +1145,17 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@exercism/babel-preset-typescript@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@exercism/babel-preset-typescript/-/babel-preset-typescript-0.1.0.tgz#3b1efe8117fbc208bd0adb1a729156872a0409b1" + integrity sha512-5By/nNFSZfPJE1vKzZmzlwEWOt0J/zkfUvS3D8Q6Dhj/xXFqASWksrhW6kqUBOTHhACLoUdYqpGF7eQc3qh+sg== + dependencies: + "@babel/core" "^7.17.2" + "@babel/node" "^7.16.8" + "@babel/preset-env" "^7.16.11" + "@babel/preset-typescript" "^7.16.7" + core-js "^3.21.0" + "@exercism/eslint-config-typescript@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@exercism/eslint-config-typescript/-/eslint-config-typescript-0.4.0.tgz#ae26073ca4eca1473fe912d57a2e538db97cf363" @@ -1082,177 +1196,193 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" + emittery "^0.8.1" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^26.6.2" + jest-mock "^27.5.1" -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" + istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" + v8-to-istanbul "^8.1.0" -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== dependencies: callsites "^3.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" source-map "^0.6.0" -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" slash "^3.0.0" source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^15.0.0" + "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" + integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.11" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" + integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== + +"@jridgewell/trace-mapping@^0.3.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" + integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@nodelib/fs.scandir@2.1.3": version "2.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" @@ -1281,14 +1411,24 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== dependencies: "@sinonjs/commons" "^1.7.0" -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tsconfig/node16@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" + integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + +"@types/babel__core@^7.0.0": version "7.1.14" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== @@ -1299,6 +1439,17 @@ "@types/babel__template" "*" "@types/babel__traverse" "*" +"@types/babel__core@^7.1.14": + version "7.1.18" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" + integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + "@types/babel__generator@*": version "7.6.2" resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" @@ -1347,13 +1498,13 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^26.0.24": - version "26.0.24" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" - integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== +"@types/jest@^27.4.0": + version "27.4.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.0.tgz#037ab8b872067cae842a320841693080f9cb84ed" + integrity sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ== dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" + jest-diff "^27.0.0" + pretty-format "^27.0.0" "@types/json-schema@^7.0.9": version "7.0.9" @@ -1365,20 +1516,20 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/node@*", "@types/node@^16.11.21": - version "16.11.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.21.tgz#474d7589a30afcf5291f59bd49cca9ad171ffde4" - integrity sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A== +"@types/node@*": + version "16.7.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.13.tgz#86fae356b03b5a12f2506c6cf6cd9287b205973f" + integrity sha512-pLUPDn+YG3FYEt/pHI74HmnJOWzeR+tOIQzUx93pi9M7D8OE7PSLr97HboXwk5F+JS+TLtWuzCOW97AHjmOXXA== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/node@^16.11.24": + version "16.11.24" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.24.tgz#9624338b685fea65fb1aba6c7b7eb45ca2df7188" + integrity sha512-Ezv33Rl4mIi6YdSHfIRNBd4Q9kUe5okiaw/ikvJiJDmuQZNW5kfdg7+oQPF8NO6sTcr3woIpj3jANzTXdvEZXA== -"@types/prettier@^2.0.0": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" - integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ== +"@types/prettier@^2.1.5": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" + integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== "@types/stack-utils@^2.0.0": version "2.0.0" @@ -1390,10 +1541,10 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== -"@types/yargs@^15.0.0": - version "15.0.9" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.9.tgz#524cd7998fe810cdb02f26101b699cccd156ff19" - integrity sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g== +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== dependencies: "@types/yargs-parser" "*" @@ -1467,7 +1618,7 @@ "@typescript-eslint/types" "5.7.0" eslint-visitor-keys "^3.0.0" -abab@^2.0.3: +abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== @@ -1495,12 +1646,19 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.7.0: +acorn@^8.2.4, acorn@^8.7.0: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1517,7 +1675,7 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.11.0" -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -1536,13 +1694,10 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@^3.0.3: version "3.1.1" @@ -1564,21 +1719,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - array-includes@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" @@ -1595,11 +1735,6 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - array.prototype.flat@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" @@ -1609,55 +1744,23 @@ array.prototype.flat@^1.2.5: define-properties "^1.1.3" es-abstract "^1.19.0" -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" - integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== - -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" +babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" slash "^3.0.0" babel-plugin-dynamic-import-node@^2.3.3: @@ -1667,21 +1770,21 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -1698,12 +1801,12 @@ babel-plugin-polyfill-corejs2@^0.3.0: semver "^6.1.1" babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz#d66183bf10976ea677f4149a7fcc4d8df43d4060" - integrity sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A== + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.20.0" + core-js-compat "^3.21.0" babel-plugin-polyfill-regenerator@^0.3.0: version "0.3.0" @@ -1730,12 +1833,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== dependencies: - babel-plugin-jest-hoist "^26.6.2" + babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -1743,26 +1846,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1771,22 +1854,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - braces@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -1822,21 +1889,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -1850,33 +1902,21 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.1.0.tgz#27dc176173725fb0adf8a48b647f4d7871944d78" - integrity sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ== +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001286: version "1.0.30001286" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz#3e9debad420419618cfdf52dc9b6572b28a8fff6" integrity sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1886,7 +1926,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.2: +chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1894,39 +1934,34 @@ chalk@^4.0.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.0.tgz#bd96c6bb8e02b96e08c0c3ee2a9d90e050c7b832" + integrity sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ== + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +ci-info@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" + wrap-ansi "^7.0.0" clone-deep@^4.0.1: version "4.0.1" @@ -1947,14 +1982,6 @@ collect-v8-coverage@^1.0.0: resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1979,7 +2006,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1996,11 +2023,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2013,41 +2035,20 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.20.0, core-js-compat@^3.20.2: - version "3.20.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.3.tgz#d71f85f94eb5e4bea3407412e549daa083d23bd6" - integrity sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw== +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.0.tgz#bcc86aa5a589cee358e7a7fa0a4979d5a76c3885" + integrity sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A== dependencies: browserslist "^4.19.1" semver "7.0.0" -core-js@^3.19.3, core-js@^3.20.2: - version "3.20.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.2.tgz#46468d8601eafc8b266bd2dd6bf9dee622779581" - integrity sha512-nuqhq11DcOAbFBV4zCbKeGbKQsUDRqTX0oqx7AttUBuqe3h20ixsE039QHelbL6P4h+9kytVqyEtyZ6gsiwEYw== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" +core-js@^3.20.2, core-js@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.0.tgz#f479dbfc3dffb035a0827602dd056839a774aa71" + integrity sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ== -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2066,20 +2067,13 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.2.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -2089,7 +2083,14 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@4, debug@^4.3.2: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2103,27 +2104,22 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== -decimal.js@^10.2.0: - version "10.2.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" - integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" @@ -2142,28 +2138,6 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2174,10 +2148,10 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== diff@^5.0.0: version "5.0.0" @@ -2212,36 +2186,21 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - electron-to-chromium@^1.4.17: version "1.4.18" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.18.tgz#2fb282213937986a20a653315963070e8321b3f3" integrity sha512-i7nKjGGBE1+YUIbfLObA1EZPmN7J1ITEllbhusDk+KIk6V6gUxN9PFe36v+Sd+8Cg0k3cgUv9lQhQZalr8rggw== -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2339,13 +2298,13 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^1.14.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" - estraverse "^4.2.0" + estraverse "^5.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: @@ -2400,10 +2359,10 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" - integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -2420,17 +2379,22 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz#6fbb166a6798ee5991358bc2daa1ba76cc1254a1" - integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ== +eslint-visitor-keys@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" + integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== -eslint@^8.7.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.7.0.tgz#22e036842ee5b7cf87b03fe237731675b4d3633c" - integrity sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.9.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.9.0.tgz#a2a8227a99599adc4342fd9b854cb8d8d6412fdb" + integrity sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q== dependencies: - "@eslint/eslintrc" "^1.0.5" + "@eslint/eslintrc" "^1.1.0" "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" @@ -2438,10 +2402,10 @@ eslint@^8.7.0: debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.0" + eslint-scope "^7.1.1" eslint-utils "^3.0.0" - eslint-visitor-keys "^3.2.0" - espree "^9.3.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -2466,14 +2430,14 @@ eslint@^8.7.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^9.2.0, espree@^9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8" - integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ== +espree@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" + integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== dependencies: acorn "^8.7.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.1.0" + eslint-visitor-keys "^3.3.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" @@ -2494,7 +2458,7 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -2509,37 +2473,19 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" - integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" exit@^0.1.2: @@ -2547,74 +2493,15 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== - dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -2664,16 +2551,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -2725,41 +2602,24 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.6" + combined-stream "^1.0.8" mime-types "^2.1.12" -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" @@ -2776,7 +2636,7 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -2795,19 +2655,10 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-symbol-description@^1.0.0: version "1.0.0" @@ -2817,18 +2668,6 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - glob-parent@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -2879,28 +2718,10 @@ globby@^11.0.4: merge2 "^1.3.0" slash "^3.0.0" -graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" +graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== has-bigints@^1.0.1: version "1.0.1" @@ -2934,37 +2755,6 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -2979,11 +2769,6 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -2996,19 +2781,27 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + "@tootallnate/once" "1" + agent-base "6" + debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== iconv-lite@0.4.24: version "0.4.24" @@ -3075,25 +2868,6 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -3111,11 +2885,6 @@ is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.2" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-callable@^1.1.4, is-callable@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" @@ -3126,13 +2895,6 @@ is-callable@^1.2.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-core-module@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" @@ -3147,60 +2909,11 @@ is-core-module@^2.8.0: dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -3238,29 +2951,22 @@ is-number-object@^1.0.4: resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-potential-custom-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" - integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.1.1: version "1.1.1" @@ -3282,11 +2988,6 @@ is-shared-array-buffer@^1.0.1: resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - is-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" @@ -3318,7 +3019,7 @@ is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -3330,58 +3031,35 @@ is-weakref@^1.0.1: dependencies: call-bind "^1.0.2" -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - istanbul-lib-coverage@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== +istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== dependencies: - "@babel/core" "^7.7.5" + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" + istanbul-lib-coverage "^3.2.0" semver "^6.3.0" istanbul-lib-report@^3.0.0: @@ -3402,208 +3080,236 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== +istanbul-reports@^3.1.3: + version "3.1.4" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" + integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + dependencies: + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" prompts "^2.0.1" - yargs "^15.4.1" + yargs "^16.2.0" -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" chalk "^4.0.0" + ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" -jest-diff@^26.0.0, jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== +jest-diff@^27.0.0, jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== dependencies: chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== dependencies: detect-newline "^3.0.0" -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-mock "^27.5.1" + jest-util "^27.5.1" -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + fsevents "^2.3.2" + +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^26.6.2" + expect "^27.5.1" is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== dependencies: chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" slash "^3.0.0" - stack-utils "^2.0.2" + stack-utils "^2.0.3" -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -3611,177 +3317,181 @@ jest-pnp-resolver@^1.2.2: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" + throat "^6.0.1" + +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" - cjs-module-lexer "^0.6.0" + cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - exit "^0.1.2" + execa "^5.0.0" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.4.1" -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== dependencies: "@types/node" "*" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" natural-compare "^1.4.0" - pretty-format "^26.6.2" + pretty-format "^27.5.1" semver "^7.3.2" -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" + "@jest/types" "^27.5.1" + camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^26.3.0" + jest-get-type "^27.5.1" leven "^3.1.0" - pretty-format "^26.6.2" + pretty-format "^27.5.1" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.6.2" + jest-util "^27.5.1" string-length "^4.0.1" -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" - supports-color "^7.0.0" + supports-color "^8.0.0" -jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== +jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== dependencies: - "@jest/core" "^26.6.3" + "@jest/core" "^27.5.1" import-local "^3.0.2" - jest-cli "^26.6.3" + jest-cli "^27.5.1" js-tokens@^4.0.0: version "4.0.0" @@ -3803,41 +3513,37 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^16.4.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== dependencies: - abab "^2.0.3" - acorn "^7.1.1" + abab "^2.0.5" + acorn "^8.2.4" acorn-globals "^6.0.0" cssom "^0.4.4" - cssstyle "^2.2.0" + cssstyle "^2.3.0" data-urls "^2.0.0" - decimal.js "^10.2.0" + decimal.js "^10.2.1" domexception "^2.0.1" - escodegen "^1.14.1" + escodegen "^2.0.0" + form-data "^3.0.0" html-encoding-sniffer "^2.0.1" - is-potential-custom-element-name "^1.0.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" nwsapi "^2.2.0" - parse5 "5.1.1" - request "^2.88.2" - request-promise-native "^1.0.8" - saxes "^5.0.0" + parse5 "6.0.1" + saxes "^5.0.1" symbol-tree "^3.2.4" - tough-cookie "^3.0.1" + tough-cookie "^4.0.0" w3c-hr-time "^1.0.2" w3c-xmlserializer "^2.0.0" webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - ws "^7.2.3" + whatwg-url "^8.5.0" + ws "^7.4.6" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -3860,21 +3566,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -3889,36 +3585,7 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -3992,7 +3659,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.17.19: +lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4026,18 +3693,6 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -4048,25 +3703,6 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" @@ -4075,12 +3711,20 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + mime-db@1.44.0: version "1.44.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== -mime-types@^2.1.12, mime-types@~2.1.19: +mime-types@^2.1.12: version "2.1.27" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== @@ -4099,19 +3743,11 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4127,33 +3763,11 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - node-environment-flags@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" @@ -4167,58 +3781,17 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" - integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - node-releases@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -4230,20 +3803,6 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - object-inspect@^1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" @@ -4264,13 +3823,6 @@ object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - object.assign@^4.1.0, object.assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" @@ -4299,13 +3851,6 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - object.values@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" @@ -4315,14 +3860,14 @@ object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -onetime@^5.1.0: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -4353,16 +3898,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -p-each-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" - integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -4415,10 +3950,10 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" - integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" @@ -4430,15 +3965,10 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= -parse5@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== path-exists@^3.0.0: version "3.0.0" @@ -4455,11 +3985,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -4475,11 +4000,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -4490,17 +4010,20 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.0, pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" +pirates@^4.0.4, pirates@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^2.0.0: version "2.0.0" @@ -4523,11 +4046,6 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -4543,14 +4061,13 @@ prettier@^2.5.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== -pretty-format@^26.0.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== +pretty-format@^27.0.0, pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" react-is "^17.0.1" prompts@^2.0.1: @@ -4561,53 +4078,21 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.4" -psl@^1.1.28: +psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - react-is@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -4615,17 +4100,17 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== dependencies: - regenerate "^1.4.0" + regenerate "^1.4.2" -regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.13.4: version "0.13.7" @@ -4639,110 +4124,40 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== dependencies: jsesc "~0.5.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.8: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -4760,12 +4175,12 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0: +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -4773,11 +4188,6 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20 is-core-module "^2.2.0" path-parse "^1.0.6" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -4790,70 +4200,38 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - run-parallel@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== -safe-buffer@^5.0.1, safe-buffer@^5.1.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -saxes@^5.0.0: +saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: xmlchars "^2.2.0" -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +semver@^5.6.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -4866,21 +4244,6 @@ semver@^7.3.2, semver@^7.3.5: dependencies: lru-cache "^6.0.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -4888,13 +4251,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -4902,11 +4258,6 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -4921,11 +4272,6 @@ shelljs@^0.8.5: interpret "^1.0.0" rechoir "^0.6.2" -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -4935,11 +4281,16 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + sisteransi@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -4950,47 +4301,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - source-map-support@^0.5.16, source-map-support@^0.5.6: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -4999,12 +4309,7 @@ source-map-support@^0.5.16, source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -5019,79 +4324,18 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" - integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stack-utils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" - integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== dependencies: escape-string-regexp "^2.0.0" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - string-length@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" @@ -5158,11 +4402,6 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -5187,6 +4426,13 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" @@ -5222,10 +4468,10 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== +throat@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" + integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== tmpl@1.0.x: version "1.0.5" @@ -5237,21 +4483,6 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -5259,32 +4490,14 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.1.2" tr46@^2.0.2: version "2.0.2" @@ -5293,6 +4506,13 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + tsconfig-paths@^3.11.0: version "3.11.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36" @@ -5315,18 +4535,6 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -5356,16 +4564,6 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -5388,46 +4586,33 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== uri-js@^4.2.2: version "4.4.0" @@ -5436,35 +4621,15 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.0: - version "8.3.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" - integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== - v8-compile-cache@^2.0.3: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== -v8-to-istanbul@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" - integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -5477,23 +4642,6 @@ v8flags@^3.1.1: dependencies: homedir-polyfill "^1.0.1" -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -5508,7 +4656,7 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -walker@^1.0.7, walker@~1.0.5: +walker@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= @@ -5546,6 +4694,15 @@ whatwg-url@^8.0.0: tr46 "^2.0.2" webidl-conversions "^6.1.0" +whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -5557,19 +4714,7 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -5581,10 +4726,10 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" @@ -5605,10 +4750,10 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.2.3: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@^7.4.6: + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== xml-name-validator@^3.0.0: version "3.0.0" @@ -5620,37 +4765,30 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" + y18n "^5.0.5" + yargs-parser "^20.2.2"